您的位置:首页 > 运维架构 > Shell

Hadoop Streaming shell 脚本命令汇总

2013-10-18 23:03 453 查看
    Hadoop Streaming由于编程相对容易,开发效率比较快,在项目中比较采用这种方式进行JOB的开发,在提交JOB的时候,都会把相关的命令整合到一个shell 文件,这里作个汇总,虽然现在没有机会做Hadoop 相关的,记下来相信会有所帮助,无论是自己还是别人。

    在编写JOB相关的脚本中,都会涉及集群输入和输出地址的定义,一般都是按照年月日并且按照文件大小进行切割,如果输入的路径下都是需要的文件,这个时候只需要定义路径的变量即可,可以利用正则匹配的方式来定义变量,如果路径下的文件需要筛选和拼接,可能会稍微麻烦点,但是Hadoop Streaming的命令对拼接的文件个数有限制,比如在map输入的时候,可以利用","将文件进行拼接,但是这里文件个数有限制,太长的话提交的时候会报错,具体数值我记不清了,大概不到2000个文件,一般情况下,当文件个数较少的时候,利用这种方式还是比较快的。下面脚本是实现一个完整的JOB提交。

#!/bin/bash
# Created by @author: xyl

######################################################################
# Hadoop Environment
# STREAMING_JAR: hadoop streaming jar
# HADOOPMAIN: hadoop main program
STREAMING_JAR=/opt/hadoop/contrib/streaming/hadoop-streaming-0.20.2-cdh3u.jar
HADOOPMAIN=/opt/hadoop/bin/hadoop

DATE=`date +%Y%m%d -d "-1day"`
YEAR=${DATE:0:4}
MONTH=${DATE:4:2}
DAY=${DATE:6:2}

######################################################################
# Hadoop Streaming Job Confs
# INPUTMAINPATH: Data Input Path, Usually A Sessionlog Directory
# INPUT: Join The Files in INPUTMAINPATH
INPUTMAINPATH=/user/flume/loginfo/$YEAR/$MONTH/$DAY
INPUT=$( $HADOOPMAIN fs -ls $INPUTMAINPATH/*.lzo | grep -E ".*nginx\.[0-9]*\.lzo$" \
| awk 'BEGIN{s=""}{s=s","$8}END{print substr(s,2)}')

######################################################################
# OUTPUT: Data Output Path In Hadoop
# JOBNAME: Displayed MapReduce's Jobname, Better Add Job Owner's Name
OUTPUT=/user/loganalysis/xyl/${DATE}

JOBNAME="${DATE}-Displaypv""(xyl)"

######################################################################
# Check Whether Output Directory Exists
if $($HADOOPMAIN fs -test -d $OUTPUT)
then
echo "Output Directory" $OUTPUT "already exists."
$HADOOPMAIN fs -rmr $OUTPUT
else
echo "Output Directory will be created!"
fi

#$HADOOPMAIN fs -rmr $OUTPUT
######################################################################
# Main Hadoop Streaming Process

$HADOOPMAIN jar ${STREAMING_JAR} \
-libjars /opt/loganalysis/libs/CustomOutputFormats.jar \
-Dmapred.job.name=$JOBNAME \
-Dmapred.reduce.tasks=1 \
-input ${INPUT} \
-output ${OUTPUT} \
-mapper mapper.py \
-reducer reducer.py \
-file /opt/xyl/hadoop/display/mapper.py \
-file /opt/xyl/hadoop/display/reducer.py \
-outputformat MultiFormats.MultiFilesOutput \
;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop shell mapreduce awk