MapReduce 2.0编程实践(涉及多语言编程)

Posted yunpiao123456

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MapReduce 2.0编程实践(涉及多语言编程)相关的知识,希望对你有一定的参考价值。

         Hadoop提供了三种编程方式:Java(最原始的方式、Hadoop Streaming(支持多语言)以及Hadoop Pipes(支持C/C++)。Java编程接口是所有编程方式的基础。不同的编程接口只是暴露给用户的形式不同而已,内部执行引擎是一样的。不同编程方式效率不同。 


          与Linux管道机制一致,通过标准输入输出实现进程间通信 。 几个举例: 

            cat 1.txt | grep “dong” | sort 

            cat 1.txt | python grep.py | java sort.jar 

JAVA编程


        Map阶段将输入的行数据,解析成单词-1的key-value对。其伪代码如右图所示。


        Reduce阶段将map阶段的输出结果进行归并,最后统计输出。


        MapReduce的数据流如图所示。inputfotmat中的RecordReader函数将split的每一行解析成偏移量-行数据的key-value形式。map实现单词切分。reduce实现归并。最终,统计文本中的单词数。

Grep问题 
       一批TB或者PB量级的文档,需要完成以下功能:  搜索符合某种规则(正则表达式)的单词或者句子。然后,统计相应的单词或者句子的数目。最后,按照数目对其进行排序,并输出最终结果。 

          该过程执行流程如上图所示。分两个过程执行,word统计和sort排序。贴出实现过程如下:



多语言编程

        以标准输入流作为输入。例如:C++:cin 、C:scanf 。以标准输出流作为输出。例如:C++:cout 、C:printf 可实现Mapper和Reducer,其他组件( InputFormat、Partitioner等需要用Java语言实现)。用C++实现wordcount如下图所示:

map阶段



reduce阶段


       执行c++mapreduce: 编译程序,生成可执行文件; g++ -o mapper mapper.cpp ;g++ -o reducer reducer.cpp。 测试程序; cat test.txt | ./mapper | sort | ./reducer 



Streaming程序运行方式 
      区分通用参数和命令行参数,通用参数应放在命令行参数前面,否则不起作用。通用参数有7个:  -conf  -D  -fs -jt -files - libjars    -archives 。“-file”或者“-files”参数,设置要分发到各个节点上的文件,对于mapper和reducer文件,必须要用或者“-files” 或“-file”指定。 如: -files mapper,reducer 和-file mapper -file reducer 。每次运行程序前,需要清空输出目录bin/hadoop fs -rmr /test/output 。

      下面用php实现wordcount:

map阶段:


reduce阶段:


测试mapper和reducer:

       cat test.txt| php mapper.php | sort | php reducer.php 

在Hadoop上运行 :


       最后,Java编程是Hadoop最原始开发语言。支持所有功能,是其他编程方式的基础。 Streaming编程仅用于开发Mapper和Reducer,其他组件需采用 Java实现。其天生支持文本格式,但二进制格式支持较弱。通常用于简单的文本数据处理,加快开发效率。 

以上是关于MapReduce 2.0编程实践(涉及多语言编程)的主要内容,如果未能解决你的问题,请参考以下文章

实验5 MapReduce初级编程实践——编程实现文件合并和去重操作

实验5 MapReduce初级编程实践——编程实现文件合并和去重操作

实验5 MapReduce初级编程实践(Python实现)

小白视角大数据基础实践 MapReduce编程基础操作

MapReduce编程实践——WordCount运行实例(Python实现)

实验5 MapReduce初级编程实践——对给定的表格进行信息挖掘