一、Hadoop Streaming
它是hadoop的一个工具,用来创建和运行一类特殊的map/reduce作业。所谓的特殊的map/reduce作业可以是可执行文件或脚本本件(python、PHP、c等)。Streaming使用“标准输入”和“标准输出”与我们编写的Map和Reduce进行数据的交换。由此可知,任何能够使用“标准输入”和“标准输出”的编程语言都可以用来编写MapReduce程序。如下
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming.jar
-input myInputDirs 【hdfs系统中输入文件/夹位置】
-output myOutputDir
-mapper cat
-reducer wc
-file 【需要分发的文件】
二、Hadoop Streaming原理
在上面的例子里,mapper和reducer都是可执行文件,它们从标准输入读入数据(一行一行读),并把计算结果发给标准输出。Streaming工具会创建一个Map/Reduce作业,并把它发送给合适的集群,同时监视这个作业的整个执行过程。
如果一个可执行文件被用于mapper,则在mapper初始化时,每一个mapper任务会把这个可执行文件作为一个单独的进程启动。 mapper任务运行时,它把输入切分成行并把每一行提供给可执行文件进程的标准输入。同时,mapper收集可执行文件进程标准输出的内容,并把收到的每一行内容转化成key/value对,作为mapper的输出。默认情况下,一行中第一个tab之前的部分作为key,之后的(不包括tab)作为value。如果没有tab,整行作为key值,value值为null。不过,这可以定制,在下文中将会讨论如何自定义key和value的切分方式。
如果一个可执行文件被用于reducer,每个reducer任务会把这个可执行文件作为一个单独的进程启动。 Reducer任务运行时,它把输入切分成行并把每一行提供给可执行文件进程的标准输入。同时,reducer收集可执行文件进程标准输出的内容,并把每一行内容转化成key/value对,作为reducer的输出。默认情况下,一行中第一个tab之前的部分作为key,之后的(不包括tab)作为value。在下文中将会讨论如何自定义key和value的切分方式。
三、使用注意事项
1、使用Hadoop Streaming运行MapReduce会比用java代码写的MapReduce稍慢一些,原因如下:
Java运行Map任务输出一定数量结果集后就会启动Reduce任务,而使用Streaming要等到所有Map任务都执行完毕后才会启动Reduce任务;
2、运行失败
使用Hadoop Streaming时需要将mapper文件和reducer文件放到所有tasktracker节点上。或者采用 -file 选型指定文件,打包文件到提交的作业中,可以是mapper或者reducer要用的输入文件,如配置文件,字典,framework会把文件当成作业提交的一部分分发到集群的机器上。。
3、只需要map函数处理数据,如何设置?
“-jobconf mapred.reduce.tasks=0” ,Map/Reduce框架就不会创建reducer任务,直接使用mapper任务的输出做为最终输出。
4、如何为作业指定其他插件
-inputformat JavaClassName
-outputformat JavaClassName
-partitioner JavaClassName 【用户自定义的partitioner程序】
-combiner JavaClassName 【用户自定义的combiner程序(必须用java实现)】
5、为作业指定附加配置参数
【-D】:作业的一些属性(以前用的是-jonconf),具体有:
1)mapred.map.tasks:map task数目
2)mapred.reduce.tasks:reduce task数目
3)stream.map.input.field.separator/stream.map.output.field.separator: map task输入/输出数据的分隔符,默认均为\t。
4)stream.num.map.output.key.fields:指定map task输出记录中key所占的域数目
5)stream.reduce.input.field.separator/stream.reduce.output.field.separator:reduce task输入/输出数据的分隔符,默认均为\t。
6)stream.num.reduce.output.key.fields:指定reduce task输出记录中key所占的域数目
6、如何处理python程序map输出文件,每行后面的的tab符 or 空格符;
问题原因:当Map/Reduce框架从mapper的标准输入读取一行时,它把这一行切分为key/value对。在默认情况下,每行第一个tab符之前的部分作为key,之后的部分作为value(不包括tab符)。
参考5做如下设置:建设分隔符是"^"【-jobconf mapred.textoutputformat.separator=^ -jobconf stream.map.output.field.separator=^】
7、如何输出gzip文件格式的输出
你只需设置streaming作业中的选项‘-jobconf mapred.output.compress=true -jobconf mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCode’
8、如何使用Streaming如何解析XML文档?
可以使用StreamXmlRecordReader来解析XML文档。hadoop jar hadoop-streaming.jar -inputreader "StreamXmlRecord,begin=BEGIN_STRING,end=END_STRING" ..... (rest of the command) Map任务会把BEGIN_STRING和END_STRING之间的部分看作一条记录。
分享到:
相关推荐
数据架构师第006节实战.基于hadoop streaming的wordcount .mp4
org.apache.hadoop.streaming.io org.apache.hadoop.tools.mapred org.apache.hadoop.tools.mapred.lib org.apache.hadoop.tools.rumen org.apache.hadoop.tools.rumen.anonymization org.apache.hadoop.tools....
Hadoop Streaming基本使用方法.docx
Hadoop Streaming基本使用方法.pdf
HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算 ...
在Windows上使用Hadoop进行大数据处理,还需要了解如何使用Hadoop命令行工具,如hadoop fs系列命令来与HDFS交互,以及使用Hadoop Streaming或Pig、Hive等高级接口进行数据处理。同时,理解Hadoop的HDFS和MapReduce的...
[INFO] Apache Hadoop MapReduce Streaming ................. SUCCESS [4.999s] [INFO] Apache Hadoop Distributed Copy .................... SUCCESS [7.547s] [INFO] Apache Hadoop Archives .....................
HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算 ...
HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。 Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
$ hadoop jar hadoop-streaming.jar -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner -mapper mymapper -reducer myreducer -input input -output output ``` 这里 `org.apache.hadoop.mapred...
hadoop-0.21.0-streaming.jar
对于MapReduce作业,你可以编写Java程序或者使用Hadoop Streaming接口用其他语言(如Python)编写作业,然后提交给YARN执行。 总的来说,Hadoop 3.3.0是一个强大的大数据处理平台,它持续改进以适应不断变化的...
Hadoop Streaming简介** Hadoop Streaming的工作原理是,Mapper和Reducer从标准输入读取数据,按行处理后再将结果输出到标准输出。Hadoop Streaming工具会创建一个MapReduce作业,并分发到TaskTrackers上执行。每...
Hadoop Streaming是Hadoop生态系统中的一个组件,它允许用户使用自定义的编程语言(如Python、Perl或Ruby)编写MapReduce程序,而不仅仅是Java。这一特性极大地扩展了Hadoop的适用范围,使得不同背景的开发者都能够...
4. **HadoopStreaming.class**: 这个类是 Hadoop Streaming 的核心,它实现了 MapReduce 框架,使得用户可以使用非Java语言编写 Map 和 Reduce 部分。 Hadoop Streaming 的标签 "jar 2.8.0 hadoop streaming" 强调...
[INFO] Apache Hadoop MapReduce Streaming ................. SUCCESS [4.999s] [INFO] Apache Hadoop Distributed Copy .................... SUCCESS [7.547s] [INFO] Apache Hadoop Archives .....................
然而,随着实时和流式处理的需求增加,Hadoop生态系统中也出现了如Storm和Spark Streaming这样的实时处理框架。 9. **安全性**:Hadoop 3.2.2引入了更多安全特性,如Kerberos认证、透明加密数据块、访问控制列表等...
Spark是Apache软件基金会下的一个开源大数据处理框架,它以其高效、灵活和易用性而...它的使用涉及到Spark的安装、配置、编程接口、核心组件以及与Hadoop的集成等多个方面,为开发者提供了强大且灵活的数据处理能力。
hadoop jar hadoop-streaming.jar -file mapper.py -mapper mapper.py -file reducer.py -reducer reducer.py -input /input/directory -output /output/directory -config jobconf.xml ``` 这个命令将启动一个...
hadoop-annotations-3.1.1.jar hadoop-common-3.1.1.jar hadoop-mapreduce-client-core-3.1.1.jar hadoop-yarn-api-3.1.1.jar hadoop-auth-3.1.1.jar hadoop-hdfs-3.1.1.jar hadoop-mapreduce-client-hs-3.1.1.jar ...