前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hadoop Streaming:用 Python 编写 Hadoop MapReduce 程序

Hadoop Streaming:用 Python 编写 Hadoop MapReduce 程序

作者头像
玖柒的小窝
修改2021-09-22 10:58:09
6090
修改2021-09-22 10:58:09
举报
文章被收录于专栏:各类技术文章~各类技术文章~

随着数字媒体、物联网等发展的出现,每天产生的数字数据量呈指数级增长。这种情况给创建下一代工具和技术来存储和操作这些数据带来了挑战。这就是 Hadoop Streaming 的用武之地!下面给出的图表描绘了从 2013 年起全球每年产生的数据增长情况。 IDC 估计,到 2025 年,每年产生的数据量将达到 180 Zettabytes!

data-by-2025-hadoop-streaming
data-by-2025-hadoop-streaming

IBM 表示,每天有近 2.5 千万字节的数据被创建,其中 90% 的世界数据是在过去两年中创建的!存储如此庞大的数据量是一项具有挑战性的任务。Hadoop 可以比传统的企业数据仓库更有效地处理大量结构化和非结构化数据。它跨分布式计算机集群存储这些庞大的数据集。Hadoop Streaming 使用 MapReduce 框架,该框架可用于编写应用程序来处理海量数据。

由于 MapReduce 框架基于 Java,您可能想知道如果开发人员没有 Java 经验,他/她如何工作。好吧,开发人员可以使用他们喜欢的语言编写 mapper/Reducer 应用程序,而无需掌握太多 Java 知识,使用Hadoop Streaming而不是切换到 Pig 和 Hive 等新工具或技术。

什么是 Hadoop 流?

Hadoop Streaming 是 Hadoop 发行版附带的实用程序。它可用于执行大数据分析程序。Hadoop 流可以使用 Python、Java、PHP、Scala、Perl、UNIX 等语言执行。该实用程序允许我们使用任何可执行文件或脚本作为映射器和/或化简器来创建和运行 Map/Reduce 作业。例如:

$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar

-input myInputDirs

-输出我的输出目录

-文件夹/垃圾箱/猫

-减速器/bin/wc

参数说明:
参数-描述-hadoop-streaming
参数-描述-hadoop-streaming

Python MapReduce 代码:

代码语言:javascript
复制
mapper.py
#!/usr/bin/python
import sys
#Word Count Example
# input comes from standard input STDIN
for line in sys.stdin:
line = line.strip() #remove leading and trailing whitespaces
words = line.split() #split the line into words and returns as a list
for word in words:
#write the results to standard output STDOUT
print'%s    %s' % (word,1) #Emit the word
1-python-mapreduce-code-hadoop-streaming
1-python-mapreduce-code-hadoop-streaming

reducer.py

代码语言:javascript
复制
#!/usr/bin/python
import sys
from operator import itemgetter
# using a dictionary to map words to their counts
current_word = None
current_count = 0
word = None
# input comes from STDIN
for line in sys.stdin:
line = line.strip()
word,count = line.split('   ',1)
try:
count = int(count)
except ValueError:
continue
if current_word == word:
current_count += count
else:
if current_word:
print '%s   %s' % (current_word, current_count)
current_count = count
current_word = word
if current_word == word:
print '%s   %s' % (current_word,current_count)
2-mapreduce-01-hadoop-streaming
2-mapreduce-01-hadoop-streaming

跑:

  1. 创建一个包含以下内容的文件并将其命名为 word.txt。

猫鼠狮鹿虎狮象狮鹿

  1. 将 mapper.py 和 reducer.py 脚本复制到上述文件所在的同一文件夹中。
2-mapper-reducer-scripts-hadoop-streaming
2-mapper-reducer-scripts-hadoop-streaming
  1. 打开终端并找到文件所在的目录。 命令:ls:列出目录中的所有文件cd:更改目录/文件夹
3-directory-hadoop-streaming
3-directory-hadoop-streaming
  1. 查看文件的内容。 命令:cat?file_name
4-cat-hadoop-streaming
4-cat-hadoop-streaming

> mapper.py 的内容

?? 命令:cat mapper.py

5-cat-mapper-hadoop-streaming
5-cat-mapper-hadoop-streaming

>reducer.py 的内容

命令:cat?reducer.py

6-cat-reducer-hadoop-streaming
6-cat-reducer-hadoop-streaming
7-cat-reducer-hadoop-streaming
7-cat-reducer-hadoop-streaming

我们可以在本地文件(例如:word.txt)上运行 mapper 和 reducer。为了在 Hadoop 分布式文件系统 (HDFS) 上运行 Map 和 Reduce,我们需要Hadoop Streaming jar。所以在我们在 HDFS 上运行脚本之前,让我们在本地运行它们以确保它们工作正常。

>运行映射器

命令:cat word.txt | python mapper.py

7-python-mapper-hadoop-streaming
7-python-mapper-hadoop-streaming

>运行reducer.py

命令: cat word.txt | python mapper.py | sort -k1,1 | python reducer.py

8-run-reducer-hadoop-streaming
8-run-reducer-hadoop-streaming

我们可以看到映射器和减速器按预期工作,因此我们不会面临任何进一步的问题。

在 Hadoop 上运行Python 代码

在我们在 Hadoop 上运行 MapReduce 任务之前,将本地数据(word.txt)复制到 HDFS

> 示例:hdfs dfs -put source_directory hadoop_destination_directory

命令:hdfs dfs -put /home/edureka/MapReduce/word.txt??? /user/edureka

9-python-code-on-hadoop-streaming
9-python-code-on-hadoop-streaming

复制jar文件的路径

基于jar版本的Hadoop Streaming jar路径为:

/usr/lib/hadoop-2.2.X/share/hadoop/tools/lib/hadoop-streaming-2.2.X.jar

因此,在您的终端上找到 Hadoop Streaming jar 并复制路径。

命令:

ls /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar

10-jar-hadoop-streaming
10-jar-hadoop-streaming

运行 MapReduce 作业

命令:

hadoop jar /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar -file /home/edureka/mapper.py -mapper mapper.py -file /home/ edureka/reducer.py -reducer reducer.py -input /user/edureka/word -output /user/edureka/Wordcount

11 个字数的hadoop-streaming
11 个字数的hadoop-streaming
13-word-count-hadoop-streaming
13-word-count-hadoop-streaming

Hadoop 为统计和信息提供了一个基本的 Web 界面。当 Hadoop 集群运行时,在浏览器中打开 http://localhost:50070。这是 Hadoop Web 界面的屏幕截图。

15-hadoop-web-interface-hadoop-streaming
15-hadoop-web-interface-hadoop-streaming

现在浏览文件系统并找到生成的 wordcount 文件以查看输出。下面是截图。

16 字计数器文件hadoop 流
16 字计数器文件hadoop 流

我们可以使用这个命令在终端上看到输出

命令:hadoop fs -cat /user/edureka/Wordcount/part-00000

17-output-hadoop-streaming
17-output-hadoop-streaming

您现在已经学会了如何使用 Hadoop Streaming 执行用 Python 编写的 MapReduce 程序!

本文系外文翻译,前往查看

如有侵权,请联系?cloudcommunity@tencent.com?删除。

本文系外文翻译前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 Hadoop 流?
    • 参数说明:
      • Python MapReduce 代码:
      相关产品与服务
      云 HDFS
      云 HDFS(Cloud HDFS,CHDFS)为您提供标准 HDFS 访问协议,您无需更改现有代码,即可使用高可用、高可靠、多维度安全、分层命名空间的分布式文件系统。 只需几分钟,您就可以在云端创建和挂载 CHDFS,来实现您大数据存储需求。随着业务需求的变化,您可以实时扩展或缩减存储资源,CHDFS 存储空间无上限,满足您海量大数据存储与分析业务需求。此外,通过 CHDFS,您可以实现计算与存储分离,极大发挥计算资源灵活性,同时实现存储数据永久保存,降低您大数据分析资源成本。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com