赞
踩
Hadoop是一个开源分布式计算平台架构,基于apache协议发布,由java语言开发。主要包括
通过InputSplit()函数来处理,设置分片数量为Math.max(minSize,Math.min(goalSize, blockSize)),一个数据片分配一个map任务。
Combiner主要是在map完成后,reducer之前对数据做一次聚合,以减少数据传输的IO开销。
数据格式转换
Combiner和Reducer的区别在于运行的位置
Combiner是在每一个MapTask所在的节点运行;
Reducer是接收全局所有Mapper的输出结果;
map端shuffle
1、split,将文件切片
2、partition,得到key,value形式的结果
3、写入环形内存缓冲区
4、spill,执行溢出写
5、归并
reduce端shuffle
1、复制copy
2、归并merge
3、reduce
当一个task被认定很慢后,JobTracker会起一个新的task attempt来双跑,取最先完成的task的结果,本文记录下Hadoop中是如何判断一个task需要起speculative task的。
写数据请求
1、客户端通过Distributed FileSystem模块向NameNode请求上传文件;
2、NameNode检查是否已存在文件和检查权限。若通过检查,直接先将操作写入EditLog,并返回输出流对象;
3、客户端按照配置参数(dfs.blocksize,比如128MB)的大小将文件切分为块(Block),并向NameNode请求上传第一个Block;
4、NameNode返回分配的可写的DataNode列表,比如dn1、dn2、dn3;
5、客户端通过FSDataOutputStream模块向dn1请求上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道pipeline建 立完成;
6、dn1、dn2、dn3逐级应答客户端;
7、客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答;(注:并不是每写完一个packet后就返回确认信息,因为packet中的每个chunk都携带校验信息,没必要每写一个就汇报一下,这样效率太慢。正确的做法是写完一个block块后对校验信息进行汇总分析,进而得出是否有块写错的情况发生)
8、当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步);
9、写完数据,关闭输出流。
读数据请求
1、客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据获得这个文件的数据块位置列表,返回输入流对象;
2、挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据;
3、DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验);
4、客户端以Packet为单位接收,先在本地缓存,然后写入目标文件;
5、写完数据,关闭输入流。
Hadoop 由MapReduce和HDFS组成,1.x版本设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题,这使得Hadoop在相当长时间内仅适合离线存储和离线计算。
Hadoop 2.0由三个分支组成,分别是HDFS、MapReduce和YARN,YARN是Hadoop 2.x中的资源管理系统,它是一个通用的资源管理模块,可为各类应用程序进行资源管理和调度。YARN不仅限于MapReduce一种框架使用,也可以供其他框架使用,Spark、Storm等。
Yarn的作用:解耦资源与计算
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。