hadoop平台使用python编写mapreduce排序小程序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w1573007/article/details/71124210

编写环境

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
这里写图片描述
查看输出文件内容
这里写图片描述

猜你喜欢

转载自blog.csdn.net/w1573007/article/details/71124210