对于比线性链更加复杂的问题,会有相关的类库帮助合理地安排工作流。最简单的是org.apache.hadoop.mapred.jobcontrol包中的JobControl类。
mapReduce中出传递的数据都是<key, value>形式的,并且shuffle排序聚集分发都是按照key值进行的。
map的输入采用hadoop默认的输入方式:文件一行作为value,行号为key。
reduce的输入为map输出聚集后的结果。即<key, value-list>,如<word, {1,1,1…}>。
在wordCount例子中,map过程切分词,并将其作为key,reduce阶段按key累加value,两者之间靠的shuffle将map输出的key合并到一块,并将其value都添加到value集合中。shuffle过程不需要手动配置,是系统自动完成的。
单表关联:表变换后自连接
多表关联:类似单表关联,通常逻辑更清晰
mapreduce程序的执行包含四个实体:
客户端:编写mapreduce代码,配置作业,提交作业
JobTraker:初始化作业,分配作业,与TaskTraker保持通信,协调整个作业的执行。
TaskTraker: 保持与JobTraker的通信,在分配的数据片上执行Map和Reduce任务,一个集群中可以包含多个TaskTraker。
HDFS:保存作业的数据、配置信息等,保存作业结果。