hadoop 8步走

1.1读取hdfs中的文件。每一行解析成一个<k,v>。每一个键值对调用一次map函数        解析成2个<k,v>,分别是<0, hello you><10, hello me>。调用2次map函数。

1、读文件解析                                                                                            <k1,v1>

1.2 覆盖map(),接收1.1产生的<k,v>,进行处理,转换为新的<k,v>输出            public void map(k, v, ctx){

String[] splited = v.split("\t");

2、覆盖map,原始k、v  变新k、v                                                            for(String word : splited){

ctx.write(word, 1);

}

1.3 对1.2输出的<k,v>进行分区。默认分为1个区。                                           }

3、  <k,v>进行分区                                                                           <k2,v2>

1.4 对不同分区中的数据进行排序(按照k)、分组。分组指的是相同key的value放到一个集合中。        map输出后的数据是:<hello,1>,<you,1>,<hello,1>,<me,1>

4、k、v排序、分组                                                                                          排序后是:<hello,1>,<hello,1>,<me,1>,<you,1>

分组后是:<hello,{1,1}>,<me,{1}>,<you,{1}>

1.5 (可选)对分组后的数据进行规约。

5、规约

2.1 多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点上。

6、map输出到reduce                                                                                  //reduce函数被调用的次数是3

2.2 对多个map的输出进行合并、排序。覆盖reduce函数接收的是分组后的数据,              public void reduce(k,vs, ctx){

实现自己的业务逻辑,处理后,产生新的<k,v>输出。                                             long sum = 0L;

for(long times : vs){

7、合并、排序                                                                                           sum += times;

}

ctx.write(k, sum);

}

<k3,v3>

2.3 对reduce输出的<k,v>写到hdfs中。                                                           hello   2

me      1

8、k、v写回hdfs                                                                               you     1

上一篇:(转)Mac OS X内核编程,MAC驱动开发资源汇总


下一篇:layoutSubviews #pragma mark -