Hadoop Streaming编程实例
2016-01-22 13:12
323 查看
Hadoop Streaming是Hadoop提供的多语言编程工具,通过该工具,用户可采用任何语言编写MapReduce程序,本文将介绍几个Hadoop Streaming编程实例,大家可重点从以下几个方面学习:
(1)对于一种编写语言,应该怎么编写Mapper和Reduce,需遵循什么样的编程规范
(2) 如何在Hadoop Streaming中自定义Hadoop Counter
(3) 如何在Hadoop Streaming中自定义状态信息,进而给用户反馈当前作业执行进度
(4) 如何在Hadoop Streaming中打印调试日志,在哪里可以看到这些日志
(5)如何使用Hadoop Streaming处理二进制文件,而不仅仅是文本文件
我已经在多篇文章中介绍了Hadoop Streaming,如果你对它还不了解,可以阅读:“Hadoop Streaming
编程”,“Hadoop Streaming高级编程”等文章。
本文重点解决前四个问题,给出了C++和Shell编写的Wordcount实例,供大家参考。
1. C++版WordCount
(1)Mapper实现(mapper.cpp)
(2)Reducer实现(reducer.cpp)
(3)编译运行
编译以上两个程序:
g++ -o mapper mapper.cpp
g++ -o reducer reducer.cpp
测试一下:
echo “dong xicheng is here now, talk to dong xicheng now” | ./mapper | sort | ./reducer
注:上面这种测试方法会频繁打印以下字符串,可以先注释掉,这些字符串hadoop能够识别
reporter:counter:counter_group,counter_no,1
reporter:status:processing……
This is log, will be printed in stdout file
测试通过后,可通过以下脚本将作业提交到集群中(run_cpp_mr.sh):
2. Shell版WordCount
(1)Mapper实现(mapper.sh)
(2)Reducer实现(mapper.sh)
(3)测试运行
测试以上两个程序:
echo “dong xicheng is here now, talk to dong xicheng now” | sh mapper.sh | sort | sh reducer.sh
注:上面这种测试方法会频繁打印以下字符串,可以先注释掉,这些字符串hadoop能够识别
reporter:counter:counter_group,counter_no,1
reporter:status:processing……
This is log, will be printed in stdout file
测试通过后,可通过以下脚本将作业提交到集群中(run_shell_mr.sh):
3. 程序说明
在Hadoop Streaming中,标准输入、标准输出和错误输出各有妙用,其中,标准输入和输出分别用于接受输入数据和输出处理结果,而错误输出的意义视内容而定:
(1)如果标准错误输出的内容为:reporter:counter:group,counter,amount,表示将名称为counter,所在组为group的hadoop counter值增加amount,hadoop第一次读到这个counter时,会创建它,之后查找counter表,增加对应counter值
(2)如果标准错误输出的内容为:reporter:status:message,则表示在界面或者终端上打印message信息,可以是一些状态提示信息
(3)如果采用错误输出的内容不是以上两种情况,则表示调试日志,Hadoop会将其重定向到stderr文件中。注:每个Task对应三个日志文件,分别是stdout、stderr和syslog,都是文本文件,可以在web界面上查看这三个日志文件内容,也可以登录到task所在节点上,到对应目录中查看。
另外,需要注意一点,默认Map Task输出的key和value分隔符是\t,Hadoop会在Map和Reduce阶段按照\t分离key和value,并对key排序,注意这点非常重要,当然,你可以使用stream.map.output.field.separator指定新的分隔符。
原创文章,转载请注明: 转载自董的博客
本文链接地址: http://dongxicheng.org/mapreduce-nextgen/hadoop-streaming-examples/
作者:Dong,作者介绍:http://dongxicheng.org/about/
本博客的文章集合:http://dongxicheng.org/recommend/
(1)对于一种编写语言,应该怎么编写Mapper和Reduce,需遵循什么样的编程规范
(2) 如何在Hadoop Streaming中自定义Hadoop Counter
(3) 如何在Hadoop Streaming中自定义状态信息,进而给用户反馈当前作业执行进度
(4) 如何在Hadoop Streaming中打印调试日志,在哪里可以看到这些日志
(5)如何使用Hadoop Streaming处理二进制文件,而不仅仅是文本文件
我已经在多篇文章中介绍了Hadoop Streaming,如果你对它还不了解,可以阅读:“Hadoop Streaming
编程”,“Hadoop Streaming高级编程”等文章。
本文重点解决前四个问题,给出了C++和Shell编写的Wordcount实例,供大家参考。
1. C++版WordCount
(1)Mapper实现(mapper.cpp)
编译以上两个程序:
g++ -o mapper mapper.cpp
g++ -o reducer reducer.cpp
测试一下:
echo “dong xicheng is here now, talk to dong xicheng now” | ./mapper | sort | ./reducer
注:上面这种测试方法会频繁打印以下字符串,可以先注释掉,这些字符串hadoop能够识别
reporter:counter:counter_group,counter_no,1
reporter:status:processing……
This is log, will be printed in stdout file
测试通过后,可通过以下脚本将作业提交到集群中(run_cpp_mr.sh):
(1)Mapper实现(mapper.sh)
测试以上两个程序:
echo “dong xicheng is here now, talk to dong xicheng now” | sh mapper.sh | sort | sh reducer.sh
注:上面这种测试方法会频繁打印以下字符串,可以先注释掉,这些字符串hadoop能够识别
reporter:counter:counter_group,counter_no,1
reporter:status:processing……
This is log, will be printed in stdout file
测试通过后,可通过以下脚本将作业提交到集群中(run_shell_mr.sh):
在Hadoop Streaming中,标准输入、标准输出和错误输出各有妙用,其中,标准输入和输出分别用于接受输入数据和输出处理结果,而错误输出的意义视内容而定:
(1)如果标准错误输出的内容为:reporter:counter:group,counter,amount,表示将名称为counter,所在组为group的hadoop counter值增加amount,hadoop第一次读到这个counter时,会创建它,之后查找counter表,增加对应counter值
(2)如果标准错误输出的内容为:reporter:status:message,则表示在界面或者终端上打印message信息,可以是一些状态提示信息
(3)如果采用错误输出的内容不是以上两种情况,则表示调试日志,Hadoop会将其重定向到stderr文件中。注:每个Task对应三个日志文件,分别是stdout、stderr和syslog,都是文本文件,可以在web界面上查看这三个日志文件内容,也可以登录到task所在节点上,到对应目录中查看。
另外,需要注意一点,默认Map Task输出的key和value分隔符是\t,Hadoop会在Map和Reduce阶段按照\t分离key和value,并对key排序,注意这点非常重要,当然,你可以使用stream.map.output.field.separator指定新的分隔符。
原创文章,转载请注明: 转载自董的博客
本文链接地址: http://dongxicheng.org/mapreduce-nextgen/hadoop-streaming-examples/
作者:Dong,作者介绍:http://dongxicheng.org/about/
本博客的文章集合:http://dongxicheng.org/recommend/
相关文章推荐
- 详解HDFS Short Circuit Local Reads
- Hadoop_2.1.0 MapReduce序列图
- 使用Hadoop搭建现代电信企业架构
- 单机版搭建Hadoop环境图文教程详解
- hadoop常见错误以及处理方法详解
- hadoop 单机安装配置教程
- hadoop的hdfs文件操作实现上传文件到hdfs
- hadoop实现grep示例分享
- Apache Hadoop版本详解
- linux下搭建hadoop环境步骤分享
- hadoop client与datanode的通信协议分析
- hadoop中一些常用的命令介绍
- Hadoop单机版和全分布式(集群)安装
- 用PHP和Shell写Hadoop的MapReduce程序
- hadoop map-reduce中的文件并发操作
- Hadoop1.2中配置伪分布式的实例
- java结合HADOOP集群文件上传下载
- 用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
- Hadoop安装感悟
- Scala代码实现列出Hadoop 文件夹下面的所有文件