Hadoop-Streaming

Hadoop Streaming提供了一个便于进行MapReduce编程的工具包,使用它可以基于一些可执行命令、脚本语言或其他编程语言来实现Mapper和 Reducer,从而充分利用Hadoop并行计算框架的优势和能力,来处理大数据

Hadoop Streaming原理

mapper和reducer会从标准输入中读取用户数据,一行一行处理后发送给标准输出。Streaming工具会创建MapReduce作业,发送给各个tasktracker,同时监控整个作业的执行过程。
如果一个文件(可执行或者脚本)作为mapper,mapper初始化时,每一个mapper任务会把该文件作为一个单独进程启动,mapper任务运行时,它把输入切分成行并把每一行提供给可执行文件进程的标准输入。 同时,mapper收集可执行文件进程标准输出的内容,并把收到的每一行内容转化成key/value对,作为mapper的输出。 默认情况下,一行中第一个tab之前的部分作为key,之后的(不包括tab)作为value。如果没有tab,整行作为key值,value值为null。

Hadoop Streaming用法

options:
(1) -input:输入文件路径
(2) -output:输出文件路径
(3) -mapper:用户自己写的mapper程序,可以是可执行文件或者脚本
(4) -reducer:用户自己写的reducer程序,可以是可执行文件或者脚本
(5) -file:打包文件到提交的作业中,可以是mapper或者reducer要用的输入文件,如配置文件,字典等。
(6) -numReduceTasks:reduce任务数
(7) -inputformat:输入数据格式
(8) -partitioner:用户自定义的partitioner程序
(9) -combiner:用户自定义的combiner程序
-D:作业的一些属性 具体有:
-D mapred.map.tasks: map task数目
-D mapred.reduce.tasks:reduce task数目
-D stream.map.output.field.separator key\value 分割方式
-D stream.num.map.output.key.fields
-D stream.reduce.output.field.separator
-D stream.num.reduce.output.key.fields
-D map.output.key.field.separator=, 对key分割
-D num.key.fields.for.partition=1 分组字段,取第一个字段
-D mapreduce.output.fileoutputformat.compress=true \ 输出数据需要压缩
-D mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec \ 压缩格式,lzo

eg:python版本

#!/bin/bash
EXEC_PATH=$(dirname "$0")
HPHOME=/opt/cloudera/parcels/CDH
JAR_PACKAGE=/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-streaming.jar
IN_PATH0=/bigdata/xxx/201609*/*
IN_PATH1=/bigdata/xxx/20161[0-1]*/*
OUT_PATH=/user/xxx/
MAP_FILE=${EXEC_PATH}/step2_map.py
RED_FILE=${EXEC_PATH}/step2_red.py
$HPHOME/bin/hadoop fs -rm -r  $OUT_PATH
$HPHOME/bin/hadoop jar $JAR_PACKAGE \
-D stream.map.input.ignoreKey=true \
-D map.output.key.field.separator=, \       
-D num.key.fields.for.partition=1 \  #定义分组字段,以逗号切分map输出字段,然后提取第一个字段为分组字段
-numReduceTasks 1 \
-input $IN_PATH0 \
-input $IN_PATH1 \
-output $OUT_PATH \
-inputformat com.hadoop.mapred.DeprecatedLzoTextInputFormat \  #lzo压缩
-mapper $MAP_FILE \
-reducer $RED_FILE \
-file $MAP_FILE \
-file $RED_FILE \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner
$HPHOME/bin/hadoop fs -ls $OUT_PATH
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值