环境信息
1. 硬件:
内存ddr3 4G及以上的x86架构主机一部
系统环境:windows
2. 软件:
运行vmware或者virtualbox
Hadoop 集群
3. 其他: 无
步骤与方法
1.安装MapReduce并配置运行环境
1.在此主要介绍在master服务器下,使用eclipse进行MapReduce开发。
2.首先安装eclipse命令如下:apt-get install eclipse
3.下载eclipse开发hadoop2.20MapReduce插件hadoop-eclipse-plugin-2.2.0.jar提供一个网址免费下载链接:http://download.csdn.net/detail/jintiaozhuang/7684553
4.将下载好的插件放入eclipse安装目录下的dropins文件夹中。
5.放置好之后,重启eclipse,按照1、2、3进行操作,如下图
6.紧接着如下图进行如下操作:
7.以上步骤完成后,会在eclipse左边出现DFSXX目录可以进行如下操作:
此时将可以看到HDFS文件存储结构,并可以尝试进行上传,下载创建等操作如能正常操作则至此Hadoop MapReduce开发平台搭建完毕。
2. 使用Eclipse创建MapReduce工程
1.首先在浏览器下载eclipse,解压eclipse安装包
首先将eclipse安装包复制到/opt下:
cp/home/hadoop/Downloads/eclipse-jee-neon-1a-linux-gtk-x86_64.tar.gz /opt/
2.接着解压:
tar -zxvf eclipse-jee-neon-1a-linux-gtk-x86_64.tar.gz
3.使用符号连接目录
ln -s /opt/eclipse/eclipse /usr/bin/eclipse
4.创建一个桌面启动器
vim /usr/share/applications/eclipse.desktop
添加如下代码:
1. [Desktop Entry]
2. Encoding=UTF-8
3. Name=Eclipse
4. Comment=Eclipse
5. Exec=/usr/bin/eclipse
6. Icon=/opt/eclipse/icon.xpm
7. Categories=Application;Development;Java;IDE
8. Version=1.0
9. Type=Application
10. Terminal=0
5.下载Hadoop-Eclipse插件,要注意hadoop版本的对应
下载网址为
http://download.csdn.net/detail/tondayong1981/9668289
6.将插件放在解压后的eclipse的plugins目录下
7.重启eclipse,然后打开Windows-Preferences,在窗口左侧的Hadoop Map/Reduce选项设置hadoop的安装路径
8.Eclipse上,打开Windows-Perspective-Open Perspective-Other,选择MapReduce,点击OK,然后在General处配置MapReduce的Location name(此处我填的是myhadoop)、Map/Reduce Master(此处我填的是Host:master,Port:9001)以及DFS Master(此处我填的是Port:9000)。只要保证Map/Reduce Master和DFS Mastrer,Host和Port配置成与core-site.xml的设置一致即可。
9.上述配置完毕后会在eclipse左侧Project Explorer处有DFS Locations显示
3. 理解分析WordCount分布式程序
运行环境:
CentOS-7.6-Minimal * 3 由Vmware平台搭建
三台主机对应IP地址:192.168.239.100 hadoop100
192.168.239.101 hadoop101
192.168.239.102 hadoop102
环境:hadoop-3.3.1 + JDK-8-251
三台虚拟机上节点分配:
hadoop100:DataNode NameNode NodeManager
hadoop200: ResourceManager NodeManager DataNode
hadoop300:NodeManager DataNode JobHistoryServer
程序的开发验证由PC机实现
Intellij IDEA 2018.4 + hadoop-2.7.7 + JDK-8-251 + Maven-3.3.9
这里我们对词频做出统计,我自己的刚开始是找的demo跑的,后来发现hadoop源码里面给出了这个算法的实现,不过自己网页的代码和源码里的代码是一致的运行的方式也大同小异。
原始数据:
word word
ss ss
ls
期望结果
cls 2
ss 2
word 2
(1)启动Hadoop
11. cd hadoop-3.3.1/
12. ./sbin/start-all.sh
1
2
(2) Mapper
① 将MapperTask传过来的原始文本内容转化成String
13. 第一行:word word
1
② 根据空格将每一行的String切分成独立的单词
③ 将单词输出为
14.
1
(3)Reducer
① 汇总接收的单词,计数每个单词”1“的数量
② 输出<单词,key的总次数(累加)>
15. 输出:word,2
(4)Driver
① 获取配置信息,configuration不设定为默认值,创建job对象实例
② 指定本程序的jar包所在的本地路径
③ 关联Mapper和Reducer的业务类
④ 设置Mapper和Reducer的输出格式
⑤ 指定job的输入原始文件所在目录,输出文件所在目录
⑥ 提交job,提交成功打印数字0,否则打印1
数据与程序清单
在Hadoop集群上运行wordcount
1) 源码
16. public class WordCount {
17.
18. public static class TokenizerMapper
19. extends Mapper
2) 测试数据
1. import random
2. import string
3.
4. f1 = open('1.txt', 'x')
5. for x in range(10000):
6. string0 = str(''.join(random.sample(
7. ['z', 'n', 'm', 'l', 'k', 'j', 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a'], 4)))
8. f1.write(string0)
9. if x % random.randint(1, 50) == 0:
10. f1.write(' ')
11. continue
12. if x != 9999:
13. f1.write('\n')
14. f1.close()
3) 上传自己的txt文件到hdfs
1. $ hadoop fs -put /home/hadoop1/data/input/1.txt hdfs://192.168.239.100:9000/input
2. #或者
3. $ hadoop fs -put /home/hadoop1/data/input/1.txt /input
4. #查看上传结果
5. $ hadoop fs -ls /input
6.
7. #另:hdfs常用命令
8. hdfs dfs -copyFromLocal #local/data /hdfs/data:将本地文件上传到 hdfs 上(原路径只能是一个文件)
9. hdfs dfs -put /tmp/ /hdfs/ #和 copyFromLocal 区别是,put 原路径可以是文件夹等
10. hadoop fs -ls / #查看根目录文件
11. hadoop fs -ls /tmp/data #查看/tmp/data目录
12. hadoop fs -cat /tmp/a.txt #查看 a.txt,与 -text 一样
13. hadoop fs -mkdir dir #创建目录dir
14. hadoop fs -rmr dir:#删除目录dir
4) 执行mapreduce
1. #执行自己打包的demo
2. $ hadoop jar WordCount_1-1.0-SNAPSHOT.jar com/hadoop1/wordcount.WdDriver /input/1.txt /out
3. #在此之后,自己写的代码都需要如此执行,该执行方式的说明:
4. #com/hadoop1/wordcount.WdDriver 对应的类是WdDriver,所在包:com.hadoop1.wordcount
5. $ hadoop jar
6.
7. #执行官方源码中的WordCount
8. $ hadoop jar /opt/module/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input/1.txt /out
5) 查看运行结果
1. $ hadoop fs -ls /out
2. $ hadoop fs -cat /out/part-r-00000
出现的问题及解决方法
出现问题:未找到hadoop命令
Javajdk未找见,需要重新安装JDK
解决方案1: javaJDK指向出现问题,进入root后重新配置javaJDK,再从重新启动配置文件,问题解决。
结果、结果分析
编程实现如输⼊/输出内容。
输入:
1. Hello Hadoop BigData
2. Hello Hadoop MapReduce
3. Hello Hadoop HDFS
4. BigData Perfect
输出:
1. BigData 2
2. MapReduce 1
3. Hello 3
4. Hadoop 3
5. HDFS 1
16. public class WordCount {
17.
18. public static class TokenizerMapper
19. extends Mapper