8.1.2hadoop Streaming 作业原理和参数设置
1.1.1 Stream 作业
(1)hadoop streaming
Hadoop streaming是hadoop的一个工具,用于运行费java的maper或reducer作业,例如maper和reducer是C++编写的可执行程序或者脚本文件。同时也可以是java类。
HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper /bin/cat \
-reducer /bin/wc
(2)Stream工作原理
如果可执行程序被用于maper和reducer,可执行程序作为单独的进程启动,mapper任务运行时,将输入按照分隔符切分成行(默认情况下每一行tab之前的为键key,之后为值value,如果没有tab,整行为键,值为null,key和value的分隔符可以设置),提供给可执行程序的标准输入,可执行程序处理之后输出到标准输出,mapper任务收集标准输出的内容,转换为key/value对,作为maper/reducer的输出。用户可以设定stream.non.zero.exit.is.failure true 或false 来表明streaming task的返回值非零时是 Failure 还是Success。默认情况,streaming task返回非零时表示失败。
(3)集群运行可执行程序一起打包提交
如果是集群运行stream作业,需要用-file参数指定可执行程序,framework将可执行程序一起打包提交到集群运行。例如下面的-file myPythonScript.py。除了可执行文件外,其他mapper或reducer需要用到的辅助文件(比如字典,配置文件等)也可以用这种方式打包上传。
HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper myPythonScript.py \
-reducer /bin/wc \
-file myPythonScript.py
-file myDictionary.txt
(4)Stream只使用mapper的设置
有时只需要map函数处理输入数据。这时只需把mapred.reduce.tasks设置为零,Map/reduce框架就不会创建reducer任务,mapper任务的输出就是整个作业的最终输出。
为了做到向下兼容,Hadoop Streaming也支持“-reduce None”选项,它与“-jobconf mapred.reduce.tasks=0”等价。
(5)Stream参数设置
|
-inputformat JavaClassName |
设置输入值类型 |
|
-outputformat JavaClassName |
设置输出值类型 |
|
-partitioner JavaClassName |
设置分区类 |
|
-combiner JavaClassName |
设置combine函数类 |
|
-input myinputdir |
设置输入路径 |
|
-output myoutputdir |
设置输出路径 |
|
-cluster name |
切换集群 |
|
-dfs host:port or local |
设置新的hdfs或者用local表示本地 |
|
-jt host:port or local |
设置新的jobtracker或者用local表示本地 |
|
-file ./map_sort.py |
将当前目录的map_sort.py文件(10M以内)上传到计算节点 |
|
-cacheFile "hdfs://hadoop-master:8020/fruit.txt#fruit |
HDFS中已经存在的文件发送到需要使用该文件的节点。“#”是给要分发的文件起别名(符号链接),在Mapreduce程序中直接使用该别名就可访问该文件。 |
|
-cacheArchive “hdfs://hadoop-master:8020/fruit.tar.gz#fruitlink |
-cacheArchive:将HDFS中已经存在的压缩文件fruit.tar.gz分发到相应的计算节点并解压,fruitlink指向解压后的文件夹。 |
|
-jobconf mapred.reduce.tasks=2 |
Hadoop的参数设置,这里表示用两个reduce任务,还有很多其他任务。 |
(6)Streaming输入输出键值分隔符设置
默认是tab作为分隔符,如果键值中包含tab键,则需要将分隔符设置为其他符号。除了分隔符,还要对键所占分隔符的数量stream.num.map.output.key.fields和stream.num.reduce.output.key.fields进行设置,例如一行数据是a,b,c,数量设置为1,则a是键,b,c是值,如果设置为2,则a,b是键,c是值。
|
属性名称 |
描述 |
|
stream.map.input.field.separator |
String,默认\t,map输入键值分隔符 |
|
stream.reduce.input.field.separator |
String,默认\t,reduce输入键值分隔符 |
|
stream.map.output.field.separator |
String,默认\t,map输出键值分隔符 |
|
stream.reduce.output.field.separator |
String,默认\t,reduce输出键值分隔符 |
|
stream.num.map.output.key.fields |
Map输出键值字符串中,键占的字段数 |
|
stream.num.reduce.output.key.fields |
reduce输出键值字符串中,键占的字段数 |
这参数的作用如图所示,参数作为内部分隔设置,与总的输入input和输出output无关。如果用标准的TextOutputFormat作为output的输出格式,则默认会用tab分隔,写入输出文件。可以通过属性mapreduce.output.textoutput.format.separator来修改output输出的分隔符。

自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取:
https://www.cnblogs.com/bclshuai/p/11380657.html
8.1.2hadoop Streaming 作业原理和参数设置的更多相关文章
- hadoop作业调优参数整理及原理(转)
1 Map side tuning参数 1.1 MapTask运行内部原理 当map task开始运算,并产生中间数据时,其产生的中间结果并非直接就简单的写入磁盘.这中间的过程比较复杂,并且利用到了内 ...
- hadoop作业调优参数整理及原理【转】
1 Map side tuning参数 1.1 MapTask运行内部原理 当map task开始运算,并产生中间数据时,其产生的中间结果并非直接就简单的写入磁盘.这中间的过程比较复杂,并且利用到了内 ...
- hadoop作业调优参数整理及原理
hadoop作业调优参数整理及原理 10/22. 2013 1 Map side tuning参数 1.1 MapTask运行内部原理 当map task开始运算,并产生中间数据时,其产生的中间结果并 ...
- Spark 以及 spark streaming 核心原理及实践
收录待用,修改转载已取得腾讯云授权 作者 | 蒋专 蒋专,现CDG事业群社交与效果广告部微信广告中心业务逻辑组员工,负责广告系统后台开发,2012年上海同济大学软件学院本科毕业,曾在百度凤巢工作三年, ...
- 老版mapreduce跑streaming作业多路输出的方法
1. 继承MultipleTextOutputFormat实现自己的输出类. 2. 重写generateFileNameForKeyValue方法,返回输出的名字,可通过"/"分割 ...
- <Spark><Spark Streaming><作业分析><JobHistory>
Intro 这篇是对一个Spark (Streaming)作业的log进行分析.用来加深对Spark application运行过程,优化空间的各种理解. Here to Start 从我这个初学者写 ...
- Hadoop streaming 排序、分桶参数设置
编写hadoop任务经常需要用到partition和排序.这里记录一下几个参数. 1. 概念 Partition:分桶过程,用户输出的key经过partition分发到不同的reduce里,因而par ...
- spark作业提交参数设置(转)
来源:https://www.cnblogs.com/arachis/p/spark_parameters.html 摘要 1.num-executors 2.executor-memory 3.ex ...
- Spark Streaming的原理
Spark Streaming应用也是Spark应用,Spark Streaming生成的DStream最终也是会转化成RDD,然后进行RDD的计算,所以Spark Streaming最终的计算是RD ...
随机推荐
- Mysql sql语句技巧与优化
一.常见sql技巧 1.正则表达式的使用 2.巧用RAND()提取随机行 mysql数据库中有一个随机函数rand()是获取一个0-1之间的数,利用这个函数和order by一起能够吧数据随机排序, ...
- Django模板结构优化{% include %}和{% extend %}标签
https://blog.csdn.net/xujin0/article/details/83420633
- Python 多任务(线程) day1
多任务就是可以让一台电脑同时执行多个命令. 以前的单核cpu是怎么做到同时执行多个命令的?(时间片轮转) ——其实以前的单核CPU是让操作系统交替执行命令,每个任务执行0.01秒,这样看起来就像是在同 ...
- 每天进步一点点------SOPC的Avalon-MM IP核(三) LCD1602 IP定制
注:Avalon信号类型命名参考图 /********************************************************************************* ...
- JVM(三、双亲委派机制)
javadoc的解释: ClassLoader的每一个实例都会有一个与之关联的父ClassLoader,当被要求去寻找一个类或者资源的时候,ClassLoader的实例就会对于类或者是资源的寻找委托给 ...
- Spring IoC 源码分析 (基于注解) 之 包扫描
在上篇文章Spring IoC 源码分析 (基于注解) 一我们分析到,我们通过AnnotationConfigApplicationContext类传入一个包路径启动Spring之后,会首先初始化包扫 ...
- Plastic Bottle Manufacturer Tips: Use Caution For Plastic Bottles
Plastic bottles use polyester (PET), polyethylene (PE), polypropylene (PP) as raw materials, after a ...
- AD10如何新建一个集成库
1.新建一个集成库工程 2.添加原理图库 3.添加封装库 4.最关键的一步:对这个工程需要进行编译 5.在界面的右边就能看到自己建的封装库了
- 201771010135 杨蓉庆AND张燕 《面对对象程序设计(java)》第十一周学习总结
1.实验目的与要求 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API: (2) 了解java集合框架体系组成: (3) 掌握ArrayList.LinkList两个类的用 ...
- linux创建用户组、用户
创建用户组 groupadd -g 1024 nameinfo 创建用户 首先创建目录 mkdir -p /home 创建用户 useradd -g nameinfo -u 1024 -d /home ...