Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2118970
  • 博文数量: 249
  • 博客积分: 1305
  • 博客等级: 军士长
  • 技术积分: 4733
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-17 10:37
个人简介

不懂的东西还有很多,随着不断的学习,不懂的东西更多,无法消灭更多不懂的东西,那就不断的充实自己吧。 欢迎关注微信公众号:菜鸟的机器学习

文章分类

全部博文(249)

文章存档

2015年(1)

2014年(4)

2013年(208)

2012年(35)

2011年(1)

分类: HADOOP

2014-08-17 13:11:35

Hadoop Streaming编程
一、概述
    Hadoop Streaming是Hadoop提供的一个编程工具,它允许用户使用任何可执行文件或者脚本作为Mapper和Reducer,例如:
    采用shell脚本语言中的一些命令作为mapper和reducer(cat作为mapper,wc作为reduce
  1. $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-*-streaming.jar\
  2. -input myInputDir\
  3. -output myOutputDir\
  4. -mapper cat\
  5. -reducer wc
    本文安排如下,第二节介绍Hadoop Streaming的原理,第三节介绍Hadoop Streaming的使用方法,第四节介绍Hadoop Streaming的程序编写方法,在这一节中,使用C++、C、Shell脚本和python实现了WordCount作业,第五节总结了常见的问题。
   
二、Hadoop Streaming原理
    mapper和reducer会从标准输入中读取用户数据,一行一行处理后发送给标准输出。Streaming工具会创建MapReduce作业,发送给各个tasktracker,同时监控整个作业的执行过程。
    如果一个文件(可执行或者脚本)作为mapper,mapper初始化时,每一个mapper任务会把该文件作为一个单独进程启动,mapper任务运行时,它把输入切分成行,并把每一行提供给可执行文件进程的标准输入。同时,mapper收集可执行文件进程标准输出的内容,并把收到的每一行内容转化为key/value对,作为mapper的输出。默认情况下,一行中第一个tab之前的部分作为key,之后的(不包括tab)作为value。如果没有tab,整行作为key值,value值为null。
    对于reducer,类似。
    以上是Map/Reduce框架和Streaming Mapper/Reduce之间的基本通信协议。

三、Hadoop Streaming用法
    

四、Mapper和Reducer实现
    本节试图用尽可能多的语言编写Mapper和Reducer,包括java、C、C++、shell脚本、python等。
    由于hadoop会自动解析数据文件到Mapper或者Reducer的标准输入中,以供它们读取使用,所以应先了解各个语言获取标准输入的方法。
    (1)java语言
    见Hadoop自带的例子。

    (2)C++语言
    
   
    (3)C语言
    

    (4)shell脚本
    管道

    (5)Python
    

    为了说明各种语言编写Hadoop Streaming程序的方法,下面以WordCount为例,WordCount作业的主要的功能是对用户输入的数据中的所有字符串进行计数。
    (1)C语言实现
    
    


    (2)C++语言实现
    

    (3)shell脚本语言实现
    简约版,每行一个单词:
    
    详细版,每行可能有多个单词(由史江明编写):mapper.sh
    
    reducer.sh
    
   

    (4) Python脚本语言实现
    
    
五、常见问题及解决方案
    (1)作业总是允许失败
    提示找不到可执行程序,比如”Caused by: java.io.IOException: Cannot run program “/user/hadoop/Mapper”: error=2, No such file or directory”:
    可在提交作业时,采用-file选型指定这些文件,比如上面的例子中,可以使用”-file Mapper -file Reducer“或者"-file Mapper.py -file Reducer.py",这样,Hadoop会将这两个文件自动分发到各个节点上,比如:
    
    (2)用脚本编写时,第一行需要注明脚本解释器,默认是shell
    (3)如何对Hadoop Streaming程序进行测试?
    Hadoop Streaming程序的一个优点是易于测试,比如在WordCount例子中,可以运行以下命令在本地进行测试:
    

六、参考资料

【1】C++&Python实现Hadoop Streaming的paritioner和模块化

【2】

【3】

【4】Hadoop Streaming和pipes理解


    


致谢:
    感谢原作者解决了我这个小白的问题,让我一个对Hadoop Streaming一无所知的小白,写出了第一个程序,完成了任务。
    引自:




































阅读(2674) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~