另一方面,通过实验目的了解基本的MapReduce编程方法使用MapReduce,了解如何解决常见的数据处理问题,如数据集成、数据重新定位、数据排序和数据挖掘。 二、实验平台操作系统: Ubuntu 18.04 (或Ubuntu 16.04 ) Hadoop版本:3.2.2三、实验内容和要求1 .任务首先在当地完成两个文件:文件a和文件
对于两个输入文件,即文件a和文件b,请创建一个MapReduce程序,合并两个文件,去除重复项以获得新的输出文件c。 作为参考,以下是输入文件和输出文件的示例。
文件a的内容如下。
China is my motherlandI love China文件b的内容如下:
I am from China应该从合并输入文件a和b得到的程序中输出以下形式的结果。
i2i S1 China 3m y1 love 1am1from1motherland 12 .编写map处理逻辑并编写map的Python代码。 mapper.py :
vim mapper.py #!/usr/JD DHC/env python3# encoding=utf-8 importsysforlineinsys.stdin 3360 line=line.strip (words=line.split
编写sudochmod777mapper.py3.Reduce处理逻辑编写Reduce的Python代码时(reducer.py ) :
vim reducer.py #!/usr/JD DHC/env python3# encoding=utf-8 fromoperatorimportitemgetterimportsyscurrent _ word=none current _ count=0 exceptvalueerror 3360 continueifcurrent _ word==word : current _ count=count else 3360 if current _ word 3360 print (当前打印(current _ count=count current _ word=wordifword==current _ word 3360 print (%s (% ) (% s ) ) ) ) ) s )
sudo chmod 777 reducer.py 4.简单测试在本地简单测试,然后运行以下代码:
catab|python3mapper.py|python3reducer.py的输出如下:
最后,介绍如何将python APP应用程序应用于HDFS文件系统。
四.在HDFS上运行Python程序,首先启动Hadoop :
在CD/usr/local/hadoopsjdhc/start-DFS.sh上创建input文件夹以传输我们的数据文件。 请注意这里有你的a、b数据文件的地方。
JD DHC/HD fsdfs-mkdir/inputjdhc/HD fsdfs-copy from local/usr/local/Hadoop/MapReduce/python/a/inputjdhc/inion
使用JD DHC/HD fsdfs-RM-r/output Hadoop提供的Jar包为Python程序提供接口即可。 此处使用的Jar包通常位于此目录中。
找到名为ls/usr/local/Hadoop/share/Hadoop/tools/lib/Hadoop-streaming-x.x.jar的包:
Hadoop @ fzqs-laptop :/usr/local/Hadoop/MapReduce/sample3$ ls/usr/local/Hadoop/share/Hadoop/tols
.
hadoop-streaming-3.2.2.jar
.
调用这个包,把我们本地的Python文件作为参数传递就可以了。 现在注意我的流包是3.2.2,看看你自己的版本号)。
/usr/local/Hadoop/JD DHC/Hadoop jar/usr/local/Hadoop/share/Hadoop/tools/lib/Hadoop-streaming-3.2 -。 映射器. py-mapper/usr/local/Hadoop/MapReduce/sample1/mapper-file/usr/local/Hadoop/MapReduce/sample 1
jddhc/hdfs dfs -cat /output/*的输出正确,执行成功。
五.总结