博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在 Hadoop 中使用 Python 进行统计开发
阅读量:7270 次
发布时间:2019-06-29

本文共 2020 字,大约阅读时间需要 6 分钟。

  hot3.png

Hadoop 的 Native 语言是 Java,它也提供其他语言(如 C、Python)的接口。在 Hadoop 下面其他语言是怎么工作的呢?原理是使用 HadoopStreaming 的标准输入 STDIN 和标准输出 STDOUT 来帮我们在 Map 和 Reduce 间传递数据。

Python map/reduce

编写 map.py

#!/usr/bin/env pythonimport sysdef read_inputs(file):    for line in file:    line = line.strip()    yield line.split()def main():    file = sys.stdin  lines = read_inputs(file)  for words in lines:    for word in words:      print("{}\t{}".format(word, 1))if __name__ == "__main__":    main()

测试

echo "Hello world Bye world" | ./map.py Hello   1world   1Bye 1world   1

编写 reduce.py

#!/usr/bin/env pythonimport sysdef read_map_outputs(file):    for line in file:    yield line.strip().split("\t", 1)def main():    current_word = None  word_count   = 0  lines = read_map_outputs(sys.stdin)  for word, count in lines:    try:      count = int(count)    except ValueError:      continue    if current_word == word:      word_count += count    else:      if current_word:        print("{}\t{}".format(current_word, word_count))      current_word = word      word_count = count  if current_word:    print("{}\t{}".format(current_word, word_count))if __name__ == "__main__":    main()

测试

echo "Hello World Bye World Hello" | ./map.py | sort | ./reduce.pyBye 1Hello   2World   2

上面都是使用 Python 自己的特性去进行统计,下面展示使用 Hadoop 的流程来执行

使用 MapReduce 执行 Python 脚本

查找 hadoop-stream 库的位置

find ./ -name "hadoop-streaming*.jar"  ./local/hadoop/share/hadoop/tools/sources/hadoop-streaming-2.7.3-test-sources.jar./local/hadoop/share/hadoop/tools/sources/hadoop-streaming-2.7.3-sources.jar./local/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar

在 HDFS 上建立读入文件夹 input

hadoop -fs mkdir input

将待处理文件放入 HDFS

hadoop -fs put allfiles input

运行命令处理

hadoop jar ~/local/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar -input input -output output -mapper ./map.py -reducer ./reduce.py

处理后的文件

Bye 1Goodbye 1Hadoop  2Hello   2World   2

Python 代码中 map.py 的 print 会将行输入到 Hadoop 中,而 reduce.py 中的 print 会将 hadoop 流中的数据输出到 HDFS 中。

转载于:https://my.oschina.net/lvyi/blog/806564

你可能感兴趣的文章
正向代理、透明代理、反向代理的理解示意图转载
查看>>
MyBatis系列:(9)mybatis-spring-springmvc-oracle/mysql整合
查看>>
[每天一个知识点]24-编程技巧-如何简单计算分页等需要进1的除法
查看>>
[每日短篇] 6 - Spring Boot 的测试时配置
查看>>
extjs 获取from 子组件
查看>>
linux职业规划
查看>>
微信公众平台开发提示"请求url超时"
查看>>
keepalived+haproxy配置
查看>>
linux 常用查看文件命令
查看>>
进程间通信(1)---匿名管道与命名管道
查看>>
BGP选路规则,华为思科选路规则对比
查看>>
模版方法模式
查看>>
Python详解之调试:pdb
查看>>
Java实现图片与Base64编码互转
查看>>
varnish 使用进阶(二)
查看>>
我的友情链接
查看>>
HRMS(人力资源管理系统)-SaaS架构设计-概要设计实践
查看>>
网站如何快速备份?
查看>>
Set集合
查看>>
自定义分页标签模拟谷歌模式
查看>>