效字当先,以质为本。测试开发入行十余年,辉煌过,迷茫过,持续探寻人生的激情和前进的步伐!好好生活,认真工作!
分类: Python/Ruby
2017-11-27 18:30:31
Hadoop Streaming提供了一个便于进行MapReduce编程的工具包,使用它可以基于一些可执行命令、脚本语言或其他编程语言来实现Mapper和 Reducer,从而充分利用Hadoop并行计算框架的优势和能力。Hadoop Streaming比较独特的一点是利用的UNIX标准输入输出stdin和stdout,所以只要能处理stdin和stdout的编程语言都能够使用Hadoop Streaming来进行MR的编写。甚至,wc、awk这些linux自带的能处理标准输入输出的程序,也能被用来编写Hadoop Streaming。
怎么工作的呢:
Hadoop Streaming 提供了一个hadoop-streaming.jar,默认处于$HADOOP_HOME目录下。如果不在可以自己搜索下,然后使用Hadoop 执行该jar,传入MR job 的参数们开始MapReduce。一个最基本的使用Hadoop Streaming来执行MR的命令行如下:
/home/xitong/software/hadoop-0.20.2.1U29/bin/hadoop jar \
/home/xitong/software/hadoop-0.20.2.1U29/contrib/streaming/hadoop-streaming.jar \
-input /user/eng-test/vidio -output /user/eng-test/vidiooutnew \
-mapper /home/eng-test/donhiyue/mapper.py \
-reducer /home/eng-test/donhiyue/reducer.py
这时候我们执行下上面的命令,这个时候会报错:
1、sh: /home/eng-test/donhiyue/mapper.py: 没有那个文件或目录
这里因为map是需要分发给下面的各个slave去执行的,所以有个文件拷贝的动作,这里加上-file就可以了,于是命令变为如下:
/home/xitong/software/hadoop-0.20.2.1U29/bin/hadoop jar /home/xitong/software/hadoop-0.20.2.1U29/contrib/streaming/hadoop-streaming.jar
-input /user/eng-test/vidio -output /user/eng-test/vidiooutnew3
-file /home/eng-test/dongshiyue/mapper.py
-file /home/eng-test/dongiyue/reducer.py
-mapper /home/eng-test/dongiyue/mapper.py
-reducer /home/eng-test/dongshiyue/reducer.py
2、报各种命令错误如import失败等,是因为-mapper 应该用Python执行
/home/xitong/software/hadoop-0.20.2.1U29/bin/hadoop jar /home/xitong/software/hadoop-0.20.2.1U29/contrib/streaming/hadoop-streaming.jar
-input /user/eng-test/vidio -output /user/eng-test/vidiooutnew3
-file /home/eng-test/dongshiyue/mapper.py
-file /home/eng-test/dongiyue/reducer.py
-mapper “python /home/eng-test/dongiyue/mapper.py"
-reducer "python /home/eng-test/dongshiyue/reducer.py
总结下流程:
Hadoop Streaming的工作流程大概如下:
点击(此处)折叠或打开
点击(此处)折叠或打开