Hadoop streaming快速入门

目录

概要

HadoopStreaming

主要格式

mapper\reducer

input\output

多路输入

多路输出

file

jobconf

额外配置

分桶、排序

jobtracker       

cacheFile\cacheArchive

后记


概要

Hadoop mapreduce的shell脚本启动方式。免去繁琐的java代码,只需专注于数据如何处理。依旧使用的MapReduce计算框架。

详细MapReduce计算框架讲解请自行百度。

以下内容默认读者了解MapReduce的基本内容和shell脚本的基本内容。

HadoopStreaming

主要格式

hadoop streaming中mapper和reducer的输入输出均为标准输入输出,这意味着任何【可以从标准输入读取数据,输出数据到标准输出】的语言均可作为hadoop streaming的mapper和reducer
大致使用如下:(注意每一行结尾\之前的空格)

${HADOOP_BIN} streaming \
    -mapper $mapper \
    -reducer $reducer \
    -input $input \
    -output $output \
    -file $file \
    -jobconf $config1 \
    -jobconf $config2

${HADOOP_BIN}为hadoop的执行文件(例:/usr/bin/hadoop)。

mapper\reducer

$mapper$reducer可为任意语言编写的从标准输入输出读写内容的脚本:
以python语言为例:

#mapper.py
import sys
for line in sys.stdin:
    line = line.strip()
    if line == '': continue
    if "Hello" in line:
        print line

streaming配置:

...
-mapper "/usr/bin/python2.6 mapper.py" \
...


mapper.py从标准输入(sys.stdin)逐行读取数据,并将其输出到标准输出(print)。reuduce同理。
支持直接运行shell脚本:

#case1######################
-mapper "cat" \
-reducer "uniq" \

#case2######################
-mapper "sh mapper.sh" \
-reducer "sh reducer.sh" \


支持reduce为空,设置如下:(jobconf配置后面有讲)

-reducer None \
#或者###########
-jobconf mapred.reduce.tasks=0 \

input\output
 

$input$output为其在HDFS(分布式文件系统)上的输入路径和输出路径。

多路输入

hadoop streaming支持多路输入(支持通配符等方式),使用格式为:

#方式一#################################################
INPUT="path1","path2/part-*","path3/2019*/part-000[1-9]","path4/{1,2}"...
...
-input $INPUT \
...

#方式二#################################################
INPUT_1="path1"
INPUT_2="path2/part-*"
INPUT_3="path3/2019*/part-000[1-9]"
INPUT_4="path4/{1,2}"
...
-input $INPUT_1 \
-input $INPUT_2 \
-input $INPUT_3 \
-input $INPUT_4 \
...


更为详细的多路输入讲解请见: MapReduce工作笔记——Hadoop Streaming多目录/多路输入(作者:Congying-Wang)

多路输出

目前我并没有找到多目录输出的方式。(如有大神告诉我将不胜感激)

仅有同目录下的多路输出:MapReduce如何使用多路输出(作者:前进的菜鸟

file

$file选项为将本地文件上传到集群,所有在本地引用的文件均需要以此方式配置。

例如:本地有mapper.py、reducer.py、config文件需要在streaming中使用,则需要以下配置:

...
-file "path1/mapper.py" \
-file "path2/reducer.py" \
-file "path3/config" \
...

jobconf

jobconf选项为任务配置选项(在新版本中为-D)
其中包含很多配置,常用参数配置如下:
使用范例:

...
-jobconf mapred.success.file.status=true \
...

常用配置:

jobconf常用配置
参数      说明
mapred.success.file.statustrue|false是否输出_SUCCESS文件
mapred.job.name字符串job名称
mapred.job.priorityVERY_HIGH | HIGH | NORMAL | LOW | VERY_LOWjob优先级
mapred.job.map.capacity数字设置同时最多运行M个map任务
mapred.job.reduce.capacity数字设置同时最多运行N个reduce任务
mapred.map.tasks数字设置map任务个数
mapred.reduce.tasks数字设置reduce任务个数(这个数字有多少就表示分了多少part)
mapred.output.compression.codec压缩包名(例:gz压缩:org.apache.hadoop.io.compress.GzipCodec)压缩方式
mapred.output.compress  true|false是否压缩输出(能极大的节省存储空间)
mapred.task.timeout数字任务没有响应的最大时间
mapred.ignore.badcompresstrue|false忽略输入的压缩文件的解压失败的情况
mapred.use.multimembergziptrue|false对输入解压缩操作
mapred.reduce.slowstart.completed.maps0-1之间浮点数表示reducer在mapper执行到何时时启动,数字显示的是mapper运行百分比

以上配置设置完就可以跑一些简单的hadoop streaming脚本了。

额外配置

还有一些更为详细的配置MapReduce计算框架运行的配置项:


分桶、排序

我也只是不求甚解罢了,就不在此献丑。

详细配置请见:hadoop streaming 按字段排序与输出分割详解(作者: bitcarmanlee

jobtracker       

用于配置jobtracker(应置于第一项,否则会有报错)

${HADOOP_BIN} streaming \
    -jt $jobtracker \        #host:端口
    ...

cacheFile\cacheArchive

用于分发大文件或档案(archive)到计算节点:

#分发大文件
-cacheFile ${myfile}#myfile \

#分发大档案(压缩包)
-cacheArchive ${myarchive}#myarchive \

此处的大文件和大档案均为HDFS集群中文件

这里的大文件、大档案可以在streaming及mapper\reducer中直接调用,#号后面的即时此文件的符号链接
在分发大档案(压缩包)时需要注意如果压缩的是文件夹(如filefold)则调用应为myarchive/filefold/.......
此方法可用于使用自定义的环境运行文件,例如想使用python3,则打包python3文件夹为python3.tar.gz上传HDFS后

...
-mapper "python3/python3/bin/python mapper.sh" \
...
-cacheArchive path/python3.tar#python3 \
...

后记

官方的文档真的真的是一个很好的学习资料:http://hadoop.apache.org/docs/r1.0.4/cn/streaming.html

本人也只是初学,还望各位大神多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值