Mapreduce Hadoop流 编程入门

待处理文件hello.txt,内容如下: 
john 91
mem 21
ave 33
sily 42
fdk 51
ksed 67
umkt 75
svv 28
john 11
mem 34
ave 33
sily 424
fdk 2115
ksed 7896
umkt 5237
svv 1238
john 111
mem 7832
ave 6773
sily 1234
fdk 523
ksed 667
umkt 117
svv 800
john 1111
mem 8900
ave 90
sily 48
fdk 37
ksed 52
umkt 10
svv 21
john 4
mem 23432
ave 210
sily 677
fdk 455
ksed 322
umkt 100
svv 723
这个文件没有具体的实际意义,找出相同名称对应的最大值。
我们将这个文件传到hdfs上去,
Hadoop dfs -put /home/hello.txt /home/
然后编写map.py脚本
#!/usr/bin/env Python
import re
import sys


for line in sys.stdin:
  val = line.strip()
  arr = val.split(" ")
  if len(arr) >= 2:
    print "%s %s" % (arr[0], arr[1])


接下来是reduce.py的脚本
#!/usr/bin/env python
import re
import sys


(last_key, max_val) = (None, 0)
for line in sys.stdin:
  val = line.strip()
  arr = val.split(" ")
  if len(arr) >= 2:
    if last_key and last_key != arr[0]:
      print "%s %s" % (last_key, max_val)
      (last_key, max_val) = (arr[0], int(arr[1]))
    else:
      (last_key, max_val) = (arr[0], max(max_val, int(arr[1])))
if last_key:
  print "%s %s" % (last_key, max_val)

然后执行map reduce任务找出相同名下的最大值:
hadoop jar /usr/java/hadoop020/build/contrib/streaming/hadoop-streaming-0.20.jar -input /home/hello.txt -output /home/output -mapper "python /home/map.py" -reducer "python /home/reduce.py" -file /home/map.py -file /home/reduce.py

看看结果:
ave 6773
fdk 2115
john 1111
ksed 7896
mem 23432
sily 1234
svv 1238
umkt 5237

在这里我还是要推荐下我自己建的大数据学习交流qq裙:522189307 , 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴。上述资料加群可以领取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值