设为首页 加入收藏

TOP

Hadoop Streaming的使用
2019-04-22 00:40:14 】 浏览:58
Tags:Hadoop Streaming 使用
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w417950004/article/details/82080926

资料来源:https://zhuanlan.zhihu.com/p/34903460

重点记录:

mapper的角色:hadoop将用户提交的mapper可执行程序或脚本作为一个单独的进程加载起来,这个进程我们称之为mapper进程,hadoop不断地将文件片段转换为行,传递到我们的mapper进程中,mapper进程通过标准输入的方式一行一行地获取这些数据,然后设法将其转换为键值对,再通过标准输出的形式将这些键值对按照一对儿一行的方式输出出去。

虽然在我们的mapper函数中,我们自己能分得清key/value(比方说有可能在我们的代码中使用的是string key,int value),但是当我们采用标准输出之后,key value是打印到一行作为结果输出的(比如sys.stdout.write("%s\t%s\n"%(birthyear,gender))),因此我们为了保证hadoop能从中鉴别出我们的键值对,键值对中一定要以分隔符'\t'即Tab(也可自定义分隔符)字符分隔,这样才能保证hadoop正确地为我们进行partitoner、shuffle等等过程。

reducer的角色:hadoop将用户提交的reducer可执行程序或脚本同样作为一个单独的进程加载起来,这个进程我们称之为reducer进程,hadoop不断地将键值对(按键排序)按照一对儿一行的方式传递到reducer进程中,reducer进程同样通过标准输入的方式按行获取这些键值对儿,进行自定义计算后将结果通过标准输出的形式输出出去。

在reducer这个过程中需要注意的是:传递进reducer的键值对是按照键排过序的,这点是由MR框架的sort过程保证的,因此如果读到一个键与前一个键不同,我们就可以知道当前key对应的pairs已经结束了,接下来将是新的key对应的pairs。

Hadoop Streaming的使用方式

$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/.../hadoop-streaming.jar [genericOptions] [streamingOptions]

在这行命令中,其实是有先后顺序的,我们一定要保证[genericOptions]写在[streamingOptions]之前,否则hadoop streaming命令将失效。

按照以上的格式使用该命令需要在安装hadoop时设置好环境变量HADOOP_HOME,将其值设置为hadoop的安装目录,当然如果觉得以上的调用方式还是麻烦的话,也可以把hadoop设置进系统的PATH环境变量并用hadoop jar $HADOOP_HOME/.../hadoop-streaming.jar [genericOptions] [streamingOptions]的格式调用。

Generic options supported are

  • -conf <configuration file> specify an application configuration file
  • -D <property=value> use value for given property
  • -fs <local|namenode:port> specify a namenode
  • -jt <local|jobtracker:port> specify a job tracker
  • -files <comma separated list of files> specify comma separated files to be copied to the map reduce cluster
  • -libjars <comma separated list of jars> specify comma separated jar files to include in the classpath.
  • -archives <comma separated list of archives> specify comma separated archives to be unarchived on the compute machines.

注意:由于版本的原因,files经常被写成CacheFile,D经常被写成jobconf,archives经常被写成cacheArchive。

除了[Generic option]剩余的就是streamingOptions

在集群上运行MapReduce程序

使用hadoop streaming命令来在集群上运行程序时,请注意一定要将-D,-files参数放在所有参数前面,我们之前说过genericOptions一定要放在streamingOptions前面,而-files -D都属于genericOptions,所以你懂的,之前曾把-files放在后面,执行起来后各种错误。另外不要忘了使用-D stream.non.zero.exit.is.failure=false 来避免MR未返回0时异常退出,原因是:-D stream.non.zero.exit.is.failure=false/true指定当mapper和reducer未返回0时,hadoop是否该认为此任务执行失败。默认为true。当mapper和reducer的返回值不是0或没有返回值时,hadoop将认为该任务为异常任务,将被再次执行,默认尝试4次都不是0,整个job都将失败。因此,如果我们在编写mapper和reducer未返回0时,则应该将该参数设置为false,否则hadoop streaming任务将报出异常。

执行代码实例如下所示:

hadoop jar /modules/hadoop-2.6.0-cdh5.11.1/share/hadoop/tools/lib/hadoop-streaming-2.6.0-cdh5.11.1.jar \
> -D stream.non.zero.exit.is.failure=false \
> -files /home/sunyunfeng/jars/mapper.py,/home/sunyunfeng/jars/reducer.py \
> -input /user/sunyunfeng/sampleTest.csv \
> -output /user/sunyunfeng/output \
> -mapper "python mapper.py" \
> -reducer "python reducer.py"

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇大数据计算架构Hadoop、Spark和St.. 下一篇c++ 操作hadoop

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目