Hadoop-2.4.1学习之Streaming编程

在之前的文章曾提到Hadoop不仅支持用Java编写的job,也支持其他语言编写的作业,比方Hadoop Streaming(shell、python)和Hadoop Pipes(c++),本篇文章将学习Hadoop Streaming编程。

Streaming是hadoop自带的工具,封装在hadoop-streaming-版本.jar中,能够使用hadoop jar hadoop-streaming-版本.jar命令启动,在该命令中还须要指定mapper或/和reducer。当中mapper和reducer任务既能够是java类,也能够是可运行文件(如cat)或脚本文件(如python)。

该工具将创建MapReduce作业。将作业提交给集群处理并监控作业的运行进度等,以下分析一下Streaming的运行过程。

当可运行文件做为mapper或者reducer时,每一个mapper任务或者reducer任务在mapper或者reducer初始化后将可运行文件做为独立的进程载入运行。

当mapper任务运行时。它将输入转换为行然后把这些行传递给该进程的标准输入stdin,同一时候mapper收集从该进程的标准输出stdout产生的行并将每行转换为键值对。这些键值对将做为该mapper的输出。默认的情况下,一行的開始部分到第一个tab符为键,剩余的部分(不包括tab符)为值。假设某行不存在tab符,则整个行将做为键,而值为null。

但可通过使用-inputformat命令行选项自己定义键值分隔符。当reducer任务运行时,它将输入的键值对转换为行,然后传递给该进程的标准输入stdin,同一时候reducer任务收集该进程标准输出stdout的输出。并转换为键值对,这些键值对将做为reducer任务的输出。同mapper任务一样,默认使用tab符分隔键值对,用户能够使用-outputformat自己定义分隔符。

通过上面的描写叙述可知,mapper和reducer的的输出都为键值对。输入都为从对应进程的stdin输入的行,不同的是mapper是将输入数据转换为行,reducer是将mapper输出的键值对转换为行。

能够通过指定stream.non.zero.exit.is.failure的值为true或false表示streaming任务退出时状态码的含义,假设为true则非0值表示失败。若为false则非0表示成功,默认情况下。streaming任务退出时的状态码非0表示任务失败。接下来看看streaming工具的语法格式。用户能够通过在命令行输入hadoop jar hadoop-streaming-2.4.1.jar –help获取该工具的具体使用方法,例如以下表所看到的:


參数


可选/必选


说明


-input


必选


Map阶段输入文件的路径


-output


必选


Reduce阶段的输出文件夹


-mapper


可选


可运行文件或者Java类,做为mapper。默觉得PipeMapper


-reducer


可选


可运行文件或者Java类,做为reducer。

默觉得PipeReducer


-combiner


可选


可运行文件或者Java类,做为combiner。默觉得PipeCombiner


-partitioner


可选


做为partitioner的Java类


-inputformat


可选


指定输入格式的Java类,默觉得TextInputFormat,还能够为SequenceFileAsTextInputFormat或者自己定义输入格式的Java类


-outputformat


可选


指定输出格式的Java类,默觉得TextOutputFormat,也能够为自己定义输出格式的Java类


-file


可选


指定了作业使用的文件,将被复制到集群中。推荐使用通用选项-files选线替代该选项


-numnumReduceTasks


可选


指定reducer的数量


-inputreader


可选


指定读取记录的reader类


-cmdenv


可选


<n>=<v>,像streaming传递环境变量


-mapdebug


可选


指定了map任务失败时运行的脚本


-reducedebug


可选


指定了reduce任务失败时运行的脚本


-lazyOutput


可选


延迟创建输出,比如假设输出为TextOutputFormat。输出文件仅在第一次调用Context.write时创建


-background


可选


提交作业后马上返回,不等待作业完毕


-verbose


可选


打印作业的运行情况


-info


可选


打印具体的使用方式

除了上表所述的专门用于streaming的选项外,在使用streaming工具时还能够指定通用选项。但须要确保通用选项位于streaming选项之前。否则将导致失败。

通用选项例如以下表所看到的:


參数


可选/必选


说明


-conf configuration_file


可选


指定应用程序的配置文件


-D property=value


可选


为指定属性设置特定值


-fs host:port or local


可选


指定NameNode


-files


可选


指定用逗号分隔的传递到MapReduce集群的文件


-libjars


可选


指定要被包括在类路径中的用逗号分隔的jar文件


-archives


可选


指定了用逗号分隔的归档文件,这些归档文件将在计算节点上解压缩

前面以前提到,默认使用tab符分隔键值对,而且依照第一个tab符来分隔,而在非常多情况下。数据不是使用tab符分隔字段,而且希望某几个字段做为键,默认情况将不满足这种需求。此时用户能够通过使用对应的參数来改动默认设置,这几个參数为:


參数


说明


stream.map.input.field.separator


Map输入的字段分隔符,默觉得\t


stream.map.output.field.separator


Map输出的字段分隔符,默觉得\t


stream.num.map.output.key.fields


第几个分隔符用于分隔键值对。默觉得1


stream.reduce.input.field.separator


Reduce输入的字段分隔符,默觉得\t


stream.reduce.output.field.separator


Reduce输出的字段分隔符,默觉得\t


stream.num.reduce.output.key.fields


第几个分隔符用于分隔键值对,默觉得1

通过一个具体的演示样例代码来具体描写叙述上述參数的含义,在该段代码中使用点号(.)做为分隔符,而且第四个点号之前的字段为键,第四个点号(不包括该点号)后面的字段做为值。假设某行中的点号少于四个,则正行将做为键,值为空的Text对象。代码例如以下:

hadoop jar hadoop-streaming-2.4.1.jar     -D stream.map.output.field.separator=.     -D stream.num.map.output.key.fields=4     -input input     -output output     -mapper /bin/cat     -reducer /bin/cat

最后通过以下的演示样例代码结束Streaming编程的学习。在该代码中通过-files通用选项将两个python脚本上传到集群中,并分别做为mapper和reducer:

hadoop jar hadoop-streaming-2.4.1.jar -files mapperPythonScript.py, reducerPythonScript.py
-input myInputDirs     -output myOutputDir     -mapper mapperPythonScript.py     -reducer reducerPythonScript.py

本篇文章学习Hadoop Streaming编程,具体介绍了作业流程和參数的使用方式,至于怎样编写Streaming中的mapper和reducer,则须要依据用户使用的脚本语言(如python、shell)而定。

时间: 2024-10-06 20:04:14

Hadoop-2.4.1学习之Streaming编程的相关文章

Hadoop Streaming 编程

1.概述 Hadoop Streaming是Hadoop提供的一个编程工具,它允许用户使用任何可执行文件或者脚本文件作为Mapper和Reducer,例如: 采用shell脚本语言中的一些命令作为mapper和reducer(cat作为mapper,wc作为reducer) $HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/contrib/streaming/hadoop-*-streaming.jar \ -input myInputDirs \ -outpu

零基础学习hadoop到上手工作线路指导(编程篇)

问题导读:1.hadoop编程需要哪些基础?2.hadoop编程需要注意哪些问题?3.如何创建mapreduce程序及其包含几部分?4.如何远程连接eclipse,可能会遇到什么问题?5.如何编译hadoop源码? 阅读此篇文章,需要些基础下面两篇文章零基础学习hadoop到上手工作线路指导(初级篇) 零基础学习hadoop到上手工作线路指导(中级篇)如果看过的话,看这篇不成问题,此篇讲hadoop编程篇. hadoop编程,hadoop是一个Java框架,同时也是编程的一次革命,使得传统开发运

hadoop学习;Streaming,aggregate;combiner

hadoop streaming允许我们使用任何可执行脚本来处理按行组织的数据流,数据取自UNIX的标准输入STDIN,并输出到STDOUT 通过设定mapper为'RandomSample.py 10',我们按十分之一的采样率,没有设定特殊的reducer,一般默认使用IdentityReducer(把输入直接转向输出) 通过HDFS的命令getMerge(输出合并)或其他文件操作,可以获得正确数目的输出文件 随机采样脚本用Python实现,但是只要基于STDIN和STDOUT的脚本语言都可以

Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN

Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Input DStreams 和 Receivers(接收器) DStreams 上的 Transformations(转换) DStreams 上的输出操作 DataFrame 和 SQL 操作 MLlib 操作 缓存 / 持久性 Checkpointing Accumulators, Broadcas

Spark Streaming编程示例

近期也有开始研究使用spark streaming来实现流式处理.本文以流式计算word count为例,简单描述如何进行spark streaming编程. 1. 依赖的jar包 参考<分别用Eclipse和IDEA搭建Scala+Spark开发环境>一文,pom.xml中指定依赖库spark-streaming_2.10.jar. <dependency> <groupId>org.scala-lang</groupId> <artifactId&

Cloudera Spark 及 Hadoop 开发员培训学习【北京上海】

Spark 及 Hadoop 开发员培训 学习如何将数据导入到 Apache Hadoop 机群并使用 Spark.Hive.Flume.Sqoop.Impala 及其他 Hadoop 生态系统工具对数据进行各种操作和处理分析 在为期四天的培训中,学员将学习关键概念和掌握使用最新技术和工具将数据采集到 Hadoop 机群并进行处理.通过学习掌握诸如 Spark.Hive.Flume.Sqoop 和 Impala 这样的 Hadoop 生态系统工具和技术,Hadoop 开发员将具备解决实际大数据问

Apache Spark 2.2.0 中文文档 - Structured Streaming 编程指南 | ApacheCN

Structured Streaming 编程指南 概述 快速示例 Programming Model (编程模型) 基本概念 处理 Event-time 和延迟数据 容错语义 API 使用 Datasets 和 DataFrames 创建 streaming DataFrames 和 streaming Datasets Input Sources (输入源) streaming DataFrames/Datasets 的模式接口和分区 streaming DataFrames/Dataset

Linux程序设计学习笔记----网络通信编程API及其示例应用

转载请注明出处, http://blog.csdn.net/suool/article/details/38702855. BSD Socket 网络通信编程 BSD TCP 通信编程流程 图为面向连接的Socket通信的双方执行函数流程.使用TCP协议的通信双方实现数据通信的基本流程如下 建立连接的步骤 1.首先服务器端需要以下工作: (1)调用socket()函数,建立Socket对象,指定通信协议. (2)调用bind()函数,将创建的Socket对象与当前主机的某一个IP地址和TCP端口

ufldl学习笔记与编程作业:Softmax Regression(vectorization加速)

ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在deep learning高质量群里面听一些前辈说,不必深究其他机器学习的算法,可以直接来学dl. 于是最近就开始搞这个了,教程加上matlab编程,就是完美啊. 新教程的地址是:http://ufldl.stanford.edu/tutorial/ 本节是对ufldl学习笔记与编程作业:Softmax Regression(softmax回归)版本的改进. 哈哈,把向量化的写法给写出来了,尼玛好快啊.只需要2分钟,2