Hadoop的基本概念

Hadoop分为狭义和广义两个概念。
狭义的Hadoop呢就是指HDFS还有Mapreduce以及YARN(2.X版本)。
广义的就是指Hadoop的生态圈,其中还包括Flink和HBase等好多的热门框架。
本文仅从狭义角度去解释Hadoop的基本概念。
首先要解释的就是Hadoop是要解决怎样一个问题!
这里要阐述Hadoop的一个来源,它源自Apache的一个爬虫项目,Apache想要在网上爬取很多的数据,但是大量的数据如何存放如何处理都是一个非常大的问题,于是就去求助Google,用Google曾经做的一些研究去实现出来了这样一个可以存储海量数据并且对其处理的一个功能。

因此,Hadoop其实就是要解决海量数据如何存储并处理的问题。

Hadoop有什么样的优点呢?

1、高可靠性:Hadoop为处理海量数据,需要提供可靠的数据处理服务,这个可靠体现在数据在存储和计算过程中可能会因一些意外而导致失败,那么它就要维护多个数据副本,确保能够针对失败的节点重新分布处理。实现的方法就是通过集群的思想,假设,数据通过三个电脑去传输到终端,那么三个电脑其中有一个坏掉了,另外两个也可以继续去传输。所谓集群,就是多个服务器去做同样的事情。
2、高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中[1]。但是,增添或者删除DataNode(支持热插拔,即无需重新启动集群),都会通知NameNode及时更新metadata。因此,Hadoop同时也带来了两面性,它适用于大文件的批处理;不适用于大量小文件的实时流处理(大量小文件会占据太多的NameNode内存空间,数据访问延迟较高)。
3、高效性:在MapReduce的思想下,Hadoop是并行工作的,能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快 。
4、高容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配 [1] 。

Hadoop核心架构

Hadoop 由许多元素构成。其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS的上一层是MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心 [1] 。

HDFS

HDFS的全称为Hadoop Distributed File System,就其字面意思理解就是一个分级的文件系统。可以增删改查文件,它就像一个Mysql数据库,其中不同之处在于Mysql存储的是关系型数据,而HDFS存储的是文件数据。

详情见图,HDFS是通过节点来完成文件存储。这些节点包括 NameNode(仅一个),它在 HDFS 内部提供元数据服务;DataNode,它为 HDFS 提供存储块。由于仅存在一个 NameNode,因此这是 HDFS 1.x版本的一个缺点(单点失败)。在Hadoop 2.x版本可以存在两个NameNode,解决了单节点故障问题 [1]
另外,HDFS 内部的所有通信都基于标准的 TCP/IP 协议。

NameNode

NameNode 是一个通常在 HDFS 实例中的单独机器上运行的软件。它负责管理文件系统名称空间和控制外部客户机的访问。NameNode 决定是否将文件映射到 DataNode 上的复制块上。对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上 [2]。

NameNode它不参与I/O事务,其核心作用就是作为一个中介控制内部的名称空间和外部的访问权限。

DataNode

DataNode 响应来自 HDFS 客户机的读写请求。它们还响应来自 NameNode 的创建、删除和复制块的命令。NameNode 依赖来自每个 DataNode 的定期心跳(heartbeat)消息。每条消息都包含一个块报告,NameNode 可以根据这个报告验证块映射和其他文件系统元数据。如果 DataNode 不能发送心跳消息,NameNode 将采取修复措施,重新复制在该节点上丢失的块[3]。

MAPREDUCE

Mapreduce是Hadoop中的一个应用程序,是用于并行处理大数据集的软件框架。MapReduce 的根源是函数性编程中的 map 和 reduce 函数。它由两个可能包含有许多实例(许多 Map 和 Reduce)的操作组成。Map 函数接受一组数据并将其转换为一个键/值对列表,输入域中的每个元素对应一个键/值对。Reduce 函数接受 Map 函数生成的列表,然后根据它们的键(为每个键生成一个键/值对)缩小键/值对列表 [3]。
这里提供一个示例,帮助您理解它。假设输入域是 one small step for man,one giant leap for mankind。在这个域上运行 Map 函数将得出以下的键/值对列表 [6] :
(one,1)(small,1) (step,1) (for,1) (man,1)(one,1) (giant,1) (leap,1) (for,1) (mankind,1)
如果对这个键/值对列表应用 Reduce 函数,将得到以下一组键/值对:
(one,2) (small,1) (step,1) (for,2) (man,1)(giant,1) (leap,1) (mankind,1)
可以看到Reduce实际上就是对每个单词进行归约计数。
Mapreduce解决的问题是,one small step for man,one giant leap for mankind作为一整个输入信息输入,和one small step for man还有one giant leap for mankind两个句子分别输入,其规约得到的结果是相同的,这样对处理索引十分有用。同时,这表示Hadoop通过Mapreduce程序,并没有将存储移动到某个位置以供处理,而是将处理移动到存储,这带来了极大的效率提升,而且并行功能可在任意数量的系统上使用。

[1] 李小华,周毅主编;刘晓辉等副主编,医院信息系统数据库技术与应用=Technology and application of database of hospital information system,中山大学出版社,2015.10,第431页~第433页
[2] 李浪主编,网络安全与密码技术导论,华中科技大学出版社,2015.09,第175页~第177页
[3] 杨旭,汤海京,丁刚毅编著,数据科学导论 第2版,北京理工大学出版社,2017.01,第168页

【Hadoop的初级理解】相关推荐

  1. hadoop生态圈的理解

    hadoop部分:hadoop生态圈的理解(HDFS,MapReduce,HBASE,zookeeper,hive,sqoop,flume,kafka,yarn,spark) 一.简介         ...

  2. hive和hadoop的浅显理解

    hadoop是一个分布式存储系统,他可以将我们的日志.数据等存储到不同的节点上(当数据十分大的时候),有时候一份数据会被存储到不同机器的不同磁盘上面. 那么问题来了: 我们想取出这么一整份数据并做对应 ...

  3. 傅里叶变换的初级理解三

    傅里叶级数的本质是将一个周期的信号分解成无限多分开的(离散的)正弦波,但是宇宙似乎并不是周期的: 在这个世界上,有的事情一期一会,永不再来,并且时间始终不曾停息地将那些刻骨铭心的往昔连续的标记在时间点 ...

  4. 傅里叶变换的初级理解一

    摘要:从侧面看 一.基本概念的理解: 先来一段高深的文字:从我们出生,我们看到的世界都以时间贯穿,股票的走势.人的身高.汽车的轨迹都会随着时间发生改变.这种以时间作为参照来观察动态世界的方法我们称其为 ...

  5. 同步异步单线程多线程初级理解

    对于我开始接触同步异步单线程多线程的概念的时候,都是分别理解同步和异步.单线程和多线程概念,当看到"使用同步方法保证线程安全"时愚昧的理解为那就是单线程咯:于是就陷入了困惑,同步等 ...

  6. 拓展欧几里得小结(初级理解)

    什么是拓展欧几里得?简单的说,就是求关于x,y的方程 ax + by = gcd(a,b) 的所有整数解 现在我们令g = gcd(a,b)则方程变成了ax + by = g 假如我们现在知道了关于这 ...

  7. 傅里叶变换的初级理解二

    摘要:从下面看: 一.傅里叶分析究竟是干什么用的? 在这一章最开始,我想先回答很多人的一个问题:傅里叶分析究竟是干什么用的?这段相对比较枯燥,已经知道了的同学可以直接跳到下一个分割线. 先说一个最直接 ...

  8. vue的一点初级理解

    1.开发环境:node.js 2.下载地址:https://nodejs.org/en/   下载 8+版本(稳定版) 3.安装完成   svn下载项目,并在项目目录下启动Dos 界面(shift+鼠 ...

  9. kotlin高阶函数的初级理解

    1.定义 如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就称为高阶函数. 系统中已经有很多,示例:库函数 在 Standard.kt 标准库中提供了一些便捷的内置高阶函数 ...

  10. 针对JSON的一些初级理解

    JSON:定义JavaScript对象表示法(JavaScript Object Notation),独立于语言和平台,更容易解析. Android平台自带了JSON了JSON解析相关的API,可以将 ...

最新文章

  1. 总线的性能指标,包括总线频率,宽度,和带宽(微机接口技术)
  2. 怎么用python处理excel文件-用Python读写Excel文件的方式比较
  3. MFC单文档程序加载web网站和html文件
  4. 没有任何基础学编程从哪开始_没有编程基础的朋友,学Python还是C/C++好,看了这个就明白了...
  5. 六:Cocos2d-x的CCLayer
  6. 程序员面试金典 - 面试题 04.02. 最小高度树(二叉搜索树中序遍历)
  7. vivo手机系统升级后没有服务器,为什么安卓手机升级到了12GB还没有iPhone 4GB运行快呢?...
  8. Cache的疑惑??
  9. Firefox 37原生支持HTML5视频回放功能
  10. 突发!Log4j 爆“核弹级”漏洞,Flink、Kafka等至少十多个项目受影响,微博、京东、网易等大厂都发起应急响应...
  11. 拖后腿了吗?工信部称8兆以上宽带占比44.4%
  12. 自定义报表(demo1)
  13. 5G时代,企业逐渐走向无纸化办公,你习惯了吗?
  14. Android包管理机制(一) PackageInstaller的初始化
  15. tp1900芯片对比7621a_TP无线路由器WDR7660千兆版,厉害了单芯片TP1900
  16. 用c语言编程求字符的反码,编程达人 《汇编、C语言基础教程》第一章 进制1.5原码、反码与补码(连载)...
  17. word柱状图垂直轴数值设定_Excel图表中设置坐标轴的字体、图案格式、刻度格式和数字格式的方法...
  18. 《达摩克利斯之剑 》
  19. 业务开发平台与SOA的统一论
  20. Java 实现蓝桥杯不同非空子串

热门文章

  1. syslinux引导硬盘linux,使用SysLinux引导Linux系统
  2. 华为太极magisk安装教程_小米手机官方REC装面具(magisk)教程
  3. (送书)《美好企业》导读:企业家需要超越世俗的成功
  4. 通过CCproxy配置内网linux服务器
  5. 从原理上搞懂编码——究竟什么是编码?什么是解码?什么是字节流?
  6. ros软路由防火墙(双线路、日志配置)
  7. 推荐6款神器软件,你用过哪些?
  8. Java课程设计答辩之感想
  9. 2018.11.07【NOIP训练】lzy的游戏(01背包)
  10. 农业区块链 - 区块链在农林渔食品业的落地场景及案例汇编