目录
1.设计思想
分而治之:大数据切分成多个小数据,并行计算
计算向数据靠拢:计算放在数据节点上运行
快排,归并算法
2.MapReduce计算流程
原始数据File:1T数据被切分成Block块,一个Block128M
数据块Block:同一个文件,块大小相同,块和计算能力不匹配,需要Split
切片Split:逻辑概念,不改变块大小,还能改变参与计算节点数量,一般Split为Block整数倍(2,1/2)
默认Split大小等于Block大小,128M,一个切片对应一个MapTask
MapTask:map默认每次从split数据读一行到内存中,可以自定义分词逻辑,统计次数,就会产生Map(String,Interger)存放在内存中,内存是有限的,多个任务执行可能OOM,直接放硬盘效率低
环形数据缓冲区:默认128M,达到百分之80,开始溢写磁盘
分区:根据key计算对应的reduce,分区数和reduce数相等,默认分区算法是hash取余
排序:对溢写数据进行排序,先Partition后Key的顺序->相同分区在一起,相同key在一起
溢写:内存的数据循环写入磁盘,不担心OOM,每次都会产生一个80M的文件
合并:Merge 是为了让传输的文件数量变少,但是网络传输数据量并没有改变,只是减少了网络 IO 次数
组合器:对每一个 MapTask 的输出进行局部汇总,以减小网络传输量。
拉取:我们需要将Map的临时结果拉取到Reduce节点
合并:因为reduce拉取的时候,会从多个map拉取数据 那么每个map都会产生一个小文件,这些小文件(文件与文件之间无序,文件内部有序) 为了方便计算(没必要读取N个小文件),需要合并文件
归并:将文件中的数据读取到内存中 一次性将相同的key全部读取到内存中 直接将相同的key得到结果-->最终结果
写出:每个reduce将自己计算的最终结果都会存放到HDFS上
5.Yarn架构
ResourceManager
资源协调管理者,zk主备切换,与nm保持心跳,nn汇报资源情况,如果是外部框架使用资源,直接访问rm
NodeManager
资源协调框架的执行者,每个DataNode默认有一个NodeManger,nm汇报到rm
6.配置,启动,端口
配置:hadoop-env.sh ,mapred-site.xml,yarn-site.xml
启动:zkServer.sh start ,start-all.sh,mapred --daemon start historyserver
端口:8088 ,19888