1.Mapreduce原理过程
(1)读取hdfs文件,切片并解析成键值对(默认一行产生一个键值对,键对应地址,值为行内容)。
(2)每一个键值对调用一次map函数。
(3)Combiner,在输出中间结果之前,进行同一map内的键值对合并(具有相同键的键值对进行合并),减少需要传输的中间结果数据量,优化网络数据传输。
(4)进行reduce之前,所有的map节点必须全部执行完,设置一个同步障(barrier),也负责对map的中间结果进行收集和整理(Aggregation & shuffle)。
(5)Partitioner,保证所有的主键相同的键值对传输给同一个reduce节点,消除数据传入reduce节点后带来不必要的相关性。
(6)Reduce节点对结果进行合并,并输出。
2.Mapreduce执行过程
Mapreduce的实际处理过程可以分为input→map→sort→combine→partition→reduce→output
①input阶段:数据进行切片,形成键值对。Job.setInputFormat设置数据输入格式。
②Map阶段:对输入的键值对进行处理,<k1,v1> →<k2,v2>。Job.setMapperClass进行设置。
③sort阶段:对map的输出进行排序,可以按照自定义规则。Job.setOutputKeyComparatorClass进行设置。
④Combine阶段:对sort之后的结果,具有相同主键的键值对进行合并。
⑤partition阶段:将中间结果按照key进行范围划分(份数=reduce节点数),保证相同的key进入同一个reduce节点进行处理。采用HashPartitioner
⑥reduce阶段:对中间结果进行reduce处理。Job.setReducerClass进行设置。
⑦output阶段:输出数据。
3.client访问namenode,datanode过程