Hadoop Streaming shell 脚本命令汇总

    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 \ ;

你可能感兴趣的:(mapreduce,hadoop,shell,awk)