编写环境
hadoop-2.6.5
python-2.7.5
xshell连接
金山云平台,一台master,3台selvet
数据类型
g 445
a 1117
b 222
c 333
d 444
e 123
f 345
h 456
map.py
1 #!/usr/bin/env python
2 import sys
3 list1=[]
4 for line in sys.stdin:
5 line=line.strip()
6 words = line.split("\n")
7 list1.append(words[0])
8 for x in range(len(list1)):
9 print list1[x]
reducer.py
按字典值排序
1 #!/usr/bin/env python
2 from operator import itemgetter
3 import sys
4 dick1={}
5 for line in sys.stdin:
6 words = line.split("\n")
7 if words[0][0]=='\t':
8 continue
9 else:
10
11 word =words[0].split(" ")
17 dick1[word[0]]=int((word[1].split("\t"[0]))[0])
18 dick2=sorted(dick1.items(), key=lambda d:d[1], reverse = False)
19 for one in dick2:
20 print one
运行命令
bin/hadoop jar /home/hadoop/hadoop-2.6.5/share/hadoop/tools/lib/hadoop-streaming-2.6.5.jar -file /home/hadoop/hadoop-2.6.5/py/mapper.py -mapper /home/hadoop/hadoop-2.6.5/py/mapper.py -file /home/hadoop/hadoop-2.6.5/py/reducer.py -reducer /home/hadoop/hadoop-2.6.5/py/reducer.py -input usr/README.txt -output usr/out
说明及错误解释
1,如过是win平台上传 .py文件 ./无法运行,报没有文件夹等问题,是此文件的编码有问题,在#!/usr/bin/env python后面的换行是有问题的,解决办法是删除了vim建立新的文件
2,PipeMapRed.waitOutputThreads(): subprocess failed with code 1
你的代码有问题,运行错误
3,PipeMapRed.waitOutputThreads(): subprocess failed with code 2
你的文件对于空格和tab,换行等符号有问题
4,PipeMapRed.waitOutputThreads(): subprocess failed with code 127
没有找到可以执行的python解释器,一般要添加#!/usr/bin/env python
使用#!/usr/bin/python 也是无法运行的,可能是hadoop是使用./运行程序吧
测试时一定要测试 ./ 是否可以运行
5,运行完之后失败请 hadoop fs -rmr 你的文件 将文件夹删除
6,-output 后面是文件夹目录
7,hadoop-streaming-2.6.5.jar 文件在hadoop-2.6.5/share/hadoop/tools/lib
下,在使用bin/hadoop jar 命令时文件以当前的位置为相对位置
如上命令可改为如下:
bin/hadoop jar share/hadoop/tools/lib/hadoop-streaming-2.6.5.jar -file py/mapper.py -mapper py/mapper.py -file py/reducer.py -reducer py/reducer.py -input usr/README.txt -output usr/out
8,如果命令报找不到文件,加 -file 文件位置,无错的话,命令可再简化为:
bin/hadoop jar share/hadoop/tools/lib/hadoop-streaming-2.6.5.jar -mapper py/mapper.py -reducer py/reducer.py -input usr/README.txt -output usr/out
9,一定要检查代码的正确性,map进行数据的清洗和处理,如果格式不清楚,多次reduce -print出格式,
hadoop job
查看输出文件内容