hadoop 初学

      hadoop framework是大数据处理的利器,它包含了hdfs、mapreduce、hive、zookeeper等library,hdfs/mapreduce均采用master/slavery结构,hdfs是分布式文件系统,它由一个个block组成,默认的block为64MB,可以调整,它包含了NameNode、DataNode等,NameNode又:editlog、fimage,editLog主要为了记录hdfs上文件的增加、删除、修改操作,而fImage主要是记录文件命名空间与各个block的映射关系,还有个是secondNameNode,这个nameNode主要是为了将editlog与fimage合并在一起,重新传给nameNode的fimage中,而旧的editLog可以被删除,从而有效的减小了editlog的大小。dataNode将HDFS的数据以文件的形式存储在本地文件系统中,它会定期的向NameNode发心跳,如果NameNode很长时间不能收到某些DataNode的心跳时,就会把这个DataNode当成坏死状态,在hdfs上一般会定义一个文件的最低副本数量,这个是为了数据安全、恢复使用的。

mapreduce,map的输出至本地文件系统,它的目的是将原始数据划分为一个个组,并将这些数据组压缩后存储到本地文件系统,最终作为reduce的输入,它分为jobtracker和tasktracker,jobtracker对应于用户的提交的一个个job,而每个job可能分为多个tasks,在map-reduce架构中,每个map、reduce对应了一个tasktracker,而map与reduce的关系为多对多,也就是一个map的输出可能是多个reduce的输入,而一个reduce的输入也可能来至于多个map,这个是由由Shuffle实现的,map的输出保存在本地文件系统,这个是非常耗时的过程,每个map对对应一段内存空间,当map的输出文件的size超过内存空间一定阈值时,就会启用spill存储,内存中向spill存储空间中存放字节时,内存中继续接受来至于map的输出,同时也继续往spill中存放字节流,当内存空间存储满后,就战时锁住内存空间直至所有的数据被存放到spill空间中,由于每个spill空间也存在大小限制,当一个spill空间满后,就会继续填充另外一个spill空间,所以一个map的输出可能包含了多个spills空间,及一个内存空间,在这些数据被写入文件系统前,需要将它们两次排序,第一次按照它们的partition,第二次按照它们的key进行排序,这时的输出包含了索引文件和数据文件,如果设置了combiner可以继续对数据进行压缩,combiner相当于一个mini reducer,当设置了combiner、并且spill的数量大于等于3的时候,就出发了数据的压缩,使map输出到文件系统的结果集更加小,当map结束时,spill空间随即被删。

       reduce的输出一般存储在hdfs上面,它的输出可能也包含了多个文件,这些文件分别来自于多个map,当一个map结束后,就会立即将结果传输到reduce上,每个reduce有多个线程完成数据的传输,这个线程的个数是可以配置,它是以tasktracker为单位进行配置的,当一个map task结束后,就会通知其父tasktracker,然后通过父tasktracker传递给jobtracker, reduce启动了一个线程不断的询问jobtracker,从而查询对应的输入map,一旦发现某个map已经结束就将其纳入reduce的输入。

   

参考资料:

https://blog.csdn.net/thomas0yang/article/details/8562910

https://sishuok.com/forum/blogPost/list/5936.html#19653

评论

© ftutor / Powered by LOFTER