阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop的HDFS和MapReduce

142次阅读
没有评论

共计 2732 个字符,预计需要花费 7 分钟才能阅读完成。

HDFS

HDFS 是一个具有高度容错性的分布式文件系统,适合部署在廉价的机器上,它具有以下几个特点:

1)适合存储非常大的文件

2)适合流式数据读取,即适合“只写一次,读多次”的数据处理模式

3)适合部署在廉价的机器上

但 HDFS 不适合以下场景(任何东西都要分两面看,只有适合自己业务的技术才是真正的好技术):

1)不适合存储大量的小文件,因为受 Namenode 内存大小限制

2)不适合实时数据读取,高吞吐量和实时性是相悖的,HDFS 选择前者

3)不适合需要经常修改数据的场景

Hadoop 的 HDFS 和 MapReduce

HDFS 的架构如上图所示,总体上采用了 Master/Slave 的架构,主要有以下 4 个部分组成:

1、Client

2、NameNode

整个 HDFS 集群只有一个 NameNode,它存储整个集群文件分别的元数据信息。这些信息以 fsimage 和 editlog 两个文件存储在本地磁盘,Client 通过这些元数据信息可以找到相应的文件。此外,NameNode 还负责监控 DataNode 的健康情况,一旦发现 DataNode 异常,就将其踢出,并拷贝其上数据至其它 DataNode。

3、Secondary NameNode

Secondary NameNode 负责定期合并 NameNode 的 fsimage 和 editlog。这里特别注意,它不是 NameNode 的热备,所以 NameNode 依然是 Single Point of Failure。它存在的主要目的是为了分担一部分 NameNode 的工作(特别是消耗内存的工作,因为内存资源对 NameNode 来说非常珍贵)。

4、DataNode

DataNode 负责数据的实际存储。当一个文件上传至 HDFS 集群时,它以 Block 为基本单位分布在各个 DataNode 中,同时,为了保证数据的可靠性,每个 Block 会同时写入多个 DataNode 中(默认为 3)

MapReduce

和 HDFS 一样,MapReduce 也是采用 Master/Slave 的架构,其架构图如下:

Hadoop 的 HDFS 和 MapReduce

它主要有以下 4 个部分组成:

1)Client

2)JobTracker

JobTracke 负责资源监控和作业调度。JobTracker 监控所有 TaskTracker 与 job 的健康状况,一旦发现失败,就将相应的任务转移到其他节点;同时,JobTracker 会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源。在 Hadoop 中,任务调度器是一个可插拔的模块,用户可以根据自己的需要设计相应的调度器。

3)TaskTracker

TaskTracker 会周期性地通过 Heartbeat 将本节点上资源的使用情况和任务的运行进度汇报给 JobTracker,同时接收 JobTracker 发送过来的命令并执行相应的操作(如启动新任务、杀死任务等)。TaskTracker 使用“slot”等量划分本节点上的资源量。“slot”代表计算资源(CPU、内存等)。一个 Task 获取到一个 slot 后才有机会运行,而 Hadoop 调度器的作用就是将各个 TaskTracker 上的空闲 slot 分配给 Task 使用。slot 分为 Map slot 和 Reduce slot 两种,分别供 MapTask 和 Reduce Task 使用。TaskTracker 通过 slot 数目(可配置参数)限定 Task 的并发度。

4)Task

Task 分为 Map Task 和 Reduce Task 两种,均由 TaskTracker 启动。HDFS 以固定大小的 block 为基本单位存储数据,而对于 MapReduce 而言,其处理单位是 split。split 是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。但需要注意的是,split 的多少决定了 Map Task 的数目,因为每个 split 只会交给一个 Map Task 处理。Split 和 Block 的关系如下图所示:

Hadoop 的 HDFS 和 MapReduce

Map Task 执行过程如下图 所示。由该图可知,Map Task 先将对应的 split 迭代解析成一个个 key/value 对,依次调用用户自定义的 map() 函数进行处理,最终将临时结果存放到本地磁盘上,其中临时数据被分成若干个 partition,每个 partition 将被一个 Reduce Task 处理。

Hadoop 的 HDFS 和 MapReduce

Reduce Task 执行过程下图所示。该过程分为三个阶段:

①从远程节点上读取 MapTask 中间结果(称为“Shuffle 阶段”);

②按照 key 对 key/value 对进行排序(称为“Sort 阶段”);

③依次读取 <key, value list>,调用用户自定义的 reduce() 函数处理,并将最终结果存到 HDFS 上(称为“Reduce 阶段”)。

Hadoop 的 HDFS 和 MapReduce

————————————– 分割线 ————————————–

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

Hadoop 中 HDFS 和 MapReduce 节点基本简介 http://www.linuxidc.com/Linux/2013-09/89653.htm

《Hadoop 实战》中文版 + 英文文字版 + 源码【PDF】http://www.linuxidc.com/Linux/2012-10/71901.htm

Hadoop: The Definitive Guide【PDF 版】http://www.linuxidc.com/Linux/2012-01/51182.htm

————————————– 分割线 ————————————–

更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计2732字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中