设为首页 收藏本站
查看: 738|回复: 0

[经验分享] Hadoop入门之HDFS与MapReduce

[复制链接]

尚未签到

发表于 2016-12-10 09:00:01 | 显示全部楼层 |阅读模式
Hadoop的核心就是HDFS与MapReduce
  HDFS(Hadoop Distributed File System)由GFS(Google File System)演变而来,用于管理数据存储。
  MapReduce 是一个分布式计算框架,用于数据分析处理。
  

  1. HDFS
DSC0000.gif

  HDFS采用master/slave的架构,对应分别是Namenode 和Datanode
master/slave : Namenode,Datanode
Namenode:Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。
Datanode:Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。


文件怎么存的?
文件分块,存到Datanode里。分块的原则:除了最后一个数据块,其它数据块的大小相同,一般为64MB or 128MB。
每个数据块有副本(一般为3):副本多了浪费空间。
副本存储:在大多数情况下,副本系数是3,HDFS的存放策略是将一个副本存放在本地机架的节点上,一个副本放在同一机架的另一个节点上,
最后一个副本放在不同机架的节点上。这种策略减少了机架间的数据传输,这就提高了写操作的效率。
副本目的:可靠性+性能


集群中单一Namenode的结构大大简化了系统的架构。Namenode是所有HDFS元数据的仲裁者和管理者,这样,用户数据永远不会流过Namenode。


client读数据:为了降低整体的带宽消耗和读取延时,HDFS会尽量让读取程序读取离它最近的副本。如果在读取程序的同一个机架上有一个副本,
那么就读取该副本。如果一个HDFS集群跨越多个数据中心,那么客户端也将首先读本地数据中心的副本。
client写数据:一次性写入,多次读取,数据访问会高效。


通讯协议:tcp/ip


  2. MapReduce
DSC0001.gif

流程:
Inputformat——》map——》(combine)——》partition——》copy&merge——》sort——》reduce——》outputformat
优化措施:合理设计MapReduce, 代码级别
  转载一篇讲的比较好的文章:
我们以wordcount为例,假设有个6400M的文件,100台hadoop机器(准确地说应该是tasktracker机),默认block大小为64M,这样每台执行map的文件刚好是一个64M的block文件(假设这个分发过程已经完成,同时忽略备份数之类的细节),并且我们使用10个reduce任务来归并文件。Hadoop的mapreducer的执行过程如下:

这100台机器上面的map都是并发、独立的执行,以wordcount为例,步骤如下:

1、<wbr>每个map任务使用默认的textinputformat类的LineRecordReader方法按行读取文件,这个读取的行数据就被交给map函数去执行,wordcount的map做的就是提取里面的单词,并以单词为key,1为value作为输出,格式为:&lt;word integer(1)&gt;。</wbr>

2、<wbr>如果有combine,先对第一步的输出结果就行combine操作。Combine就是个小reduce操作,作用就是对某个map自己的输出结果先进行一次归并,把相同word的计数累加,这样假设某个map输出结果做如果有50%的重复word,那combine后的中间结果大小可以减少一半,可减少后续的patition、copy、sort等的开销,提高性能。</wbr>

3、<wbr>每个map对自己的输出文件进行patition操作。上面提到有10个reducer任务,那默认的patition操作就是对map的输出kay进行hash,并对10求余(hash(key)),并提供10个文件(内存足够的话可以是链表等内存数据结构),假设是r1、r2….r10这10个文件,把不同key的放到不同的文件,这次操作就可以把相同key聚合到同一个文件。由于算法一样,保证了每个map的输出结果经过这个操作后,相同key的肯定在同一个聚合文件里,比如某个单词word肯定都在r1文件里。</wbr>

4、<wbr>接下来就是copy文件的过程了,10个reducer任务各自从所有map机器上取到属于自己的文件,比如reducer1会从100台map机器上取到所有r1文件,reducer2取所有r2的文件,这样同一类word已经到了同一台reducer机器上了。</wbr>

5、<wbr>每个reducer合并(meger)自己取到的文件,reducer1就是合并100个r1文件(实际过程是在上面第4步操作中会边copy边meger,在内存中)。</wbr>

6、<wbr>合并好后进行下sort(排序)操作,再次把不同小文件中的同一个单词聚合在一起。作为提供给reduce操作的数据。</wbr>

7、<wbr>进行reduce操作,对同一个单词的value列表再次进行累加,最终得到某个单词的词频数。</wbr>

8、<wbr>Outputformat操作,把reduce结果写到磁盘。</wbr>

所以,总的流程应该是这样的:

*<wbr><wbr>Inputformat——》map——》(combine)——》partition——》copy&amp;merge——》sort——》reduce——》outputformat</wbr></wbr>

由此我们也可以看出,执行reduce的代价还是有些的,所以如果我们的应用只使用map就能搞定的话,那就尽量不要再有reduce操作在其中。


3. Hadoop调度流程


DSC0002.gif

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-312153-1-1.html 上篇帖子: Hadoop小试牛刀之dump数据 下篇帖子: Hadoop MapReduce实现矩阵的乘法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表