Streaming开发实例 --map脚本内容 #!/usr/bin/python import sys for eachLine in sys.stdin: #从标准输入获取数据 eachLine = eachLine.strip() Seg = eachLine.split(‘|’) #用\t来分割开各个字段 if len(Seg) == 19 and Seg[1] == rpt_cad and Seg[6] != : ad_id = Seg[6] print ‘%s\t%d’ % (ad_id, 1) #将map结果送到标准输出 else: pass 文件名:cat ad_day_pv_map.py Streaming开发实例 --reduce脚本内容 #!/usr/bin/python LastLine = LastCount = 0 import sys for eachLine in sys.stdin: #从标准输入获取数据 eachLine = eachLine.strip() Seg = eachLine.split(‘\t’) #用\t来分割开key和value if len(Seg) == 2 and Seg[0] != : ad_id = Seg[0] if ad_id == LastLine: LastCount = LastCount + 1 #对于同一个key的值进行累加操作 else: if LastLine != : print ‘%s\t%d’ % (LastLine, LastCount) #将结果送到标准输出 LastLine = ad_id LastCount = 1 else: pass print %s\t%d % (LastLine, LastCount) 文件名:ad_day_pv_red.py Streaming开发实例 --脚本的运行 #!/bin/bash EXEC_PATH=$(dirname “$0”) #获取当前路径 HPHOME=/home/hadoop/hadoop-0.20.2-cdh3u0 #Hadoop安装的路径 JAR_PACKEGE=$HPHOME/contrib/streaming/hadoop-streaming-0.20.2-cdh3u0.jar #向Hadoop集群提交job所需的jar文件 IN_PATH= /data/test_in #输入数据的路径 OUT_PATH= /data/test_out #输出数据的路径 MAP_FILE=$EXEC_PATH/ad_day_pv_map.py #指定的map文件 RED_FILE=$EXEC_PATH/ad_day_pv_red.py #指定的reduce文件 QUEUE_NAME=platform #输出文件夹不能事先存在,因此先删除一下 $ HPHOME/bin/hadoop fs -rmr $OUT_PATH #下面开始执行Job提交 $ HPHOME/bin/hadoop jar $JAR_PACKEGE \ -numReduceTasks 4 \ -input $IN_PATH \ -output $OUT_PATH \ -jobconf =$QUEUE_NAME \ -file $MAP_FILE \ -mapper $MAP_FILE \ -file $RED_FILE \ -reducer $RED_FILE $ HPHOME/bin/hadoop fs -ls $OUT_PATH #查看输出文件夹的情况 Streaming开发注意事项 1.程序本身的健壮性 2.注意-mapper和-reducer的路径要用绝对路径 3.map/reduce脚本要有可执行属性。 4.map/reduce脚本的简单语法层面的调试: cat input.txt|./map.py|sort|./red.py 5. map/reduce脚本的线上小部分数据进行简单测试。 6.关注hadoop的Job输出结果和Job运行界面。 7.保存Job输出结果的完美解决方案(nohup 命
原创力文档

文档评论(0)