咖啡猫

导航

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

  

                                                                                        

posted on 2015-03-05 21:21  咖啡猫1292  阅读(147)  评论(0编辑  收藏  举报