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)而定。
Hadoop-2.4.1学习之Streaming编程的更多相关文章
- hadoop streaming 编程
概况 Hadoop Streaming 是一个工具, 代替编写Java的实现类,而利用可执行程序来完成map-reduce过程.一个最简单的程序 $HADOOP_HOME/bin/hadoop jar ...
- 零基础学习hadoop到上手工作线路指导(编程篇)
问题导读: 1.hadoop编程需要哪些基础? 2.hadoop编程需要注意哪些问题? 3.如何创建mapreduce程序及其包含几部分? 4.如何远程连接eclipse,可能会遇到什么问题? 5.如 ...
- Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN
Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...
- Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南
Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...
- Spark Streaming编程示例
近期也有开始研究使用spark streaming来实现流式处理.本文以流式计算word count为例,简单描述如何进行spark streaming编程. 1. 依赖的jar包 参考<分别用 ...
- Apache Spark 2.2.0 中文文档 - Structured Streaming 编程指南 | ApacheCN
Structured Streaming 编程指南 概述 快速示例 Programming Model (编程模型) 基本概念 处理 Event-time 和延迟数据 容错语义 API 使用 Data ...
- Structured Streaming编程 Programming Guide
Structured Streaming编程 Programming Guide Overview Quick Example Programming Model Basic Concepts Han ...
- 学习linux/unix编程方法的建议(转)
假设你是计算机科班出身,计算机系的基本课程如数据结构.操作系统.体系结构.编译原理.计算机网络你全修过 我想大概可以分为4个阶段,水平从低到高从安装使用=>linux常用命令=>linux ...
- Learning ROS for Robotics Programming - Second Edition(《学习ROS机器人编程-第二版》)
Learning ROS for Robotics Programming - Second Edition <学习ROS机器人编程-第二版> ----Your one-stop guid ...
随机推荐
- 并发系列3-大白话聊聊Java并发面试问题之谈谈你对AQS的理解?【石杉的架构笔记】
- python正则表达式中的分组 group
维基百科:http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C ...
- UVA 12284 Digital Matrix
思路:这个分清楚情况就很好做了. 注意一点当A的转置等于B的时候(对角线除外),记录A的下三角(或上三角)有cnt个的数与B不同,如果cnt>1则 不需要额外的步数就可以了,否则当k==2时结果 ...
- Problem C: 程序改错(递归函数):数字转字符
Description 下面程序中“/ ***** N ***** /”的下一行中有错误,请改正(注意:不得加行.减行.加句.减句,否则后果自负). 该程序功能:用递归法将一个六位整数n转换成字符串, ...
- Ubantu配置protoc2.5.0
首先得到 protobuf 相应的包文件 ,在终端上输入如下 wget http://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz 下载完毕后 ...
- opencv中SiftDescriptorExtractor所做的SIFT特征向量提取工作简单分析
SiftDescriptorExtractor对应于SIFT算法中特征向量提取的工作,通过他对关键点周围邻域内的像素分块进行梯度运算,得到128维的特征向量.具体有如下几个操作: 0.首先,我们假设在 ...
- Ubuntu 16.04安装RabbitMQ(单机版)
说明: 1.如果是做RabbitMQ方面的开发时,建议先不要了解集群的安装和部署,先安装一个单机版之后,尽快的熟悉里面的功能和特性.毕竟单机版支持的QPS相当的高.同样,集群方式也没有想象中的多点复制 ...
- 在Visual Studio中开发Matlab mex文件,生成mexw64/mexw32
csunking贡献,2015-9-22 1712 1. 概述 通过使用C/C++与Matlab混合编程,既可以享受到C代码快速执行的速度,又可以方便的使用Matlab众多的库函数和强大的绘图功能 ...
- eclipse 性能调优之内存分配
转自:http://blog.csdn.net/defonds/article/details/6289236 如果觉得自己的 eclipse 比较慢,可以通过修改 %eclipse_home%/ec ...
- 五种算法实现IP到地址的转换
条件: 给出一个文件,其中每行一个IP段(IPv4,其实IPv6类似,只是规模剧增)及其对应的信息(例如物理地址信息),内容及格式为: <start_IP> <end_IP> ...