Hadoop Steaming开发之WordCount

简单的WordCount栗子--类似于编程语言中的hello world

1.shell脚本run.sh

 1 HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
 2 STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
 3 
 4 INPUT_FILE_PATH="/input.txt"
 5 OUTPUT_PATH="/output"
 6 
 7 $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH    #如果输出文件目录存在就先删除
 8 
 9 # Step 1.
10 $HADOOP_CMD jar $STREAM_JAR_PATH \
11     -input $INPUT_FILE_PATH \               #-input:指定输入文件hdfs路径,支持通配符*,支持指定多个文件或目录, 可多次使用
12     -output $OUTPUT_PATH \                  #-output:指定输出文件的hdfs路径, 路径不能存在,执行作业用户必须有创建该目录的权限,只能用一次
13     -mapper "python map.py" \               #自己写的mapper程序
14     -reducer "python red.py" \              #自己写的reducer程序
15     -file ./map.py \                        #-file:分发文件到计算节点,1.map和reduce的执行文件;2.map和reduce要用的输入文件.如果要用的文件太大,需要用hdfs存储,类似的配置有-cacheFile,-cacheArchive分别用于向计算节点分发hdfs文件和hdfs压缩文件
16     -file ./red.py \
17 -jobconf mapred.job.name="WordCount" #设置作业的名称

2.map.py

1 #!/usr/local/bin/python
2 
3 import sys
4 
5 for line in sys.stdin:
6     ss = line.strip().split(' ')
7     for s in ss:
8         if s.strip() != "":
9             print "%s\t%s" % (s, 1)      #标准输出用\t分割,会自动识别为key,value

3.red.py

 1 #!/usr/local/bin/python
 2 
 3 import sys
 4 
 5 current_word = None
 6 count_pool = []
 7 sum = 0
 8 
 9 for line in sys.stdin:
10     word, val = line.strip().split('\t')
11 
12     if current_word == None:
13         current_word = word
14 
15     if current_word != word:
16         for count in count_pool:
17             sum += count
18         print "%s\t%s" % (current_word, sum)
19         current_word = word
20         count_pool = []
21         sum = 0
22 
23     count_pool.append(int(val))
24 
25 for count in count_pool:
26     sum += count
27 print "%s\t%s" % (current_word, str(sum))

启动hadoop集群后, 运行shell脚本: 

 以下是Tracking URL中的部分内容:

查看输出到hdfs的目录/output

运行以下命令查看结果中排名前十的单词

 

转载于:https://www.cnblogs.com/CoolJayson/p/7469225.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值