当前位置: 首页 > 后端技术 > Python

教你用Python写HadoopMapReduce程序

时间:2023-03-25 23:33:32 Python

摘要:HadoopStreaming使用MapReduce框架,可以用来编写处理海量数据的应用程序。本文分享自华为云社区《Hadoop Streaming:用 Python 编写 Hadoop MapReduce 程序》,作者:林冬莲。随着数字媒体、物联网等的出现,每天产生的数字数据量呈指数级增长。这种情况对创建下一代工具和技术来存储和操作这些数据提出了挑战。这就是HadoopStreaming的用武之地!下面给出的图表描述了从2013年开始全球每年生成的数据的增长情况。IDC预计,到2025年,每年产生的数据量将达到180Zettabytes!据IBM称,每天产生近25PB的数据,全球90%的数据是在过去两年中产生的!存储如此庞大的数据量是一项具有挑战性的任务。Hadoop可以比传统的企业数据仓库更高效地处理大量结构化和非结构化数据。它将这些庞大的数据集存储在分布式计算机集群中。HadoopStreaming使用MapReduce框架,可以用来编写处理海量数据的应用程序。由于MapReduce框架是基于Java的,您可能想知道如果开发人员没有Java经验,他/她如何工作。好吧,开发人员可以在没有太多Java知识的情况下用他们喜欢的语言编写映射器/缩减器应用程序,使用HadoopStreaming而不是切换到Pig和Hive等新工具或技术。什么是Hadoop流?HadoopStreaming是Hadoop发行版中包含的实用程序。它可用于执行大数据分析程序。Hadoop流可以用Python、Java、PHP、Scala、Perl、UNIX等语言执行。该实用程序允许我们使用任何可执行文件或脚本作为映射器和/或缩减器来创建和运行Map/Reduce作业。例如:$HADOOP_HOME/bin/hadoopjar$HADOOP_HOME/hadoop-streaming.jar-inputmyInputDirs-输出我的输入目录-文件夹/垃圾箱/猫-减速器/bin/wc参数据说明:PythonMapReduce:mapper.代码py#!/usr/bin/pythonimportsys#WordCountExample#输入来自标准输入STDINforlineinsys.stdin:line=line.strip()#removeleadingandtrailingwhitespaceswords=line.split()#splitthelineintowordsandreturnsasalistforwordinwords:#writetheresultstostandardoutputSTDOUTprint'%s%s'%(word,1)#发出wordreducer.py#!/usr/bin/pythonimportsysfromoperatorimportitemgetter#使用字典将单词映射到它们的计数current_word=Nonecurrent_count=0word=None#inputcomesfromSTDINforlineinsys.stdin:line=line.strip()word,count=line.split('',1)try:count=int(count)exceptValueError:continueifcurrent_word==word:current_count+=countelse:ifcurrent_word:print'%s%s'%(current_word,current_count)current_count=countcurrent_word=wordifcurrent_w复制代码ord==word:print'%s%s'%(current_word,current_count)运行:创建一个包含以下内容的文件并命名为word.txtcatmouseliondeertigerlionelephantliondeermapper.pyandreducer.pyscript放入与上述文件相同的文件夹中。打开终端并导航到文件所在的目录。命令:ls:列出目录中的所有文件cd:更改目录/文件夹以查看文件的内容。命令:catfile_namemapper.py的内容命令:catmapper.pyreducer.py的内容命令:catreducer.py我们可以在本地文件(例如:word.txt)上运行mapper和reducer。为了在Hadoop分布式文件系统(HDFS)上运行Map和Reduce,我们需要HadoopStreamingjar。因此,在我们在HDFS上运行脚本之前,让我们在本地运行它们以确保它们正常工作。运行映射器命令:catword.txt|pythonmapper.py运行reducer.py命令:catword.txt|python映射器.py|排序-k1,1|pythonreducer.py我们可以按预期看到Works的mapper和reducer,所以我们不会面临任何进一步的问题。在Hadoop上运行Python代码在我们在Hadoop上运行MapReduce作业之前,将本地数据(word.txt)复制到HDFS示例:hdfsdfs-putsource_directoryhadoop_destination_directory命令:hdfsdfs-put/home/edureka/MapReduce/word。txt/user/edureka复制jar文件的路径根据HadoopStreamingjar路径的jar版本:/usr/lib/hadoop-2.2.X/share/hadoop/tools/lib/hadoop-streaming-2.2。X.jar因此,在您的终端上找到HadoopStreamingjar并复制路径。命令:ls/usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar运行MapReduce作业命令:hadoopjar/usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar-file/home/edureka/mapper.py-mappermapper.py-file/home/edureka/reducer.py-reducerreducer.py-input/user/edureka/word-output/user/edureka/WordcountHadoop提供了一个用于统计和信息的基本Web界面。在Hadoop集群运行的情况下,在浏览器中打开http://localhost:50070。这是HadoopWeb界面的屏幕截图。现在浏览文件系统并找到生成的wordcount文件以查看输出。下面是截图。我们可以使用以下命令在终端上看到输出命令:hadoopfs-cat/user/edureka/Wordcount/part-00000您现在已经学习了如何使用HadoopStreaming执行用Python编写的MapReduce程序!点击关注,第一时间了解华为云的新鲜技术~