zoukankan      html  css  js  c++  java
  • 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(" ");

            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

      

                                                                                            

  • 相关阅读:
    关于slmgr命令
    .msi安装包安装方法(安装错误2503和2502)
    BIOS相关
    C和C#的区别
    关于del命令
    win8快捷键
    Windows 8 系统快捷键热键列表收集
    Android开发环境搭建
    关于Android sdkmanager目录结构的总结
    关于eclipse新建项目问题
  • 原文地址:https://www.cnblogs.com/catWang/p/4316750.html
Copyright © 2011-2022 走看看