并⾏计算实验报告:使⽤Hadoop进⾏WordCount 并⾏计算实验报告:使⽤Hadoop进⾏WorldCount
实验环境
宿主机:
操作系统:Manjaro 20.0.3 Lysia
内核:x86_64 Linux 5.7.0-3-MANJARO
CPU:Intel Core i5-8400 @ 6x 4GHz
GPU:GeForce GTX 1080 Ti
内存:16GB
虚拟机1:
操作系统:Manjaro 20.0.3 Lysia
内核:x86_64 Linux 5.6.15-1-MANJARO
CPU:Intel Core i5-8400 @ 2.808GHz
GPU:llvmpipe (LLVM 10.0.0, 256 bits)
内存:2GB
虚拟机2:
操作系统:Manjaro 20.0.3 Lysia
内核:x86_64 Linux 5.6.15-1-MANJARO
CPU:Intel Core i5-8400 @ 2.808GHz
GPU:llvmpipe (LLVM 10.0.0, 256 bits)
内存:2GB
Hadoop环境搭建与实验测试
在Manjaro Linux中使⽤包管理⼯具yay安装Hadoop
$ yay -S Hadoop
对Hadoop进⾏单机部署和测试
1. 随机⽣成包含如下内容的3个⽂件保存⾄~/Desktop/hadoop/input/,作为输⼊
~/Desktop/input/hadoop/1.in:
jydyuignjk jydyuignjk ymsnsjjsbb tkozsuesbv
~/Desktop/input/hadoop/2.in:
tkozsuesbv ymsnsjjsbb tkozsuesbv ymsnsjjsbb
~/Desktop/input/hadoop/3.in:
ymsnsjjsbb jydyuignjk jydyuignjk tkozsuesbv
2. 进⼊Hadoop的安装⽬录
$ cd /usr/lib/hadoop
3. 使⽤Hadoop运⾏./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar中的wordcount模块
$ hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar \
wordcount ~/Desktop/hadoop/input ~/Desktop/hadoop/output
(注:运⾏hadoop需⾸先将$JAVA_HOME设置为Java的安装⽬录)
在~/Desktop/output/中得到两个输出⽂件,⼀个名为_SUCCESS的空⽂件,和⼀个名为part-r-00000的⽂本⽂件,part-r-00000⾥的内容为:
jydyuignjk 4
tkozsuesbv 4
ymsnsjjsbb 4
于是在单机部署下使⽤Hadoop完成了WordCount任务
对Hadoop进⾏伪分布式部署和测试
1. 使⽤Oracle VM VirtualBox创建两个相同的虚拟机并组建内⽹
虚拟机配置已在实验环境中列出,⽽在⽹卡设置时,我们需要使虚拟机不仅能够访问外⽹,同时还能与Host机和另⼀台虚拟机进⾏内⽹通信,有两种⽅法可以实现:
1. 为虚拟机设置⼀张桥接⽹卡
2. 为虚拟机设置两张⽹卡,⼀张NAT⽹卡,⼀张Host-Only⽹卡,其中NAT⽹卡⽤于虚拟机连接外⽹,Host-Only⽹
卡⽤于主机与虚拟机、虚拟机与虚拟机之间的互连
由于在设置桥接⽹卡后,内⽹设备间的通信数据都要经过路由器转发,经过测试效率较低,因此这⾥采⽤了设置两张⽹卡的⽅式:
⾸先在主机⽹络管理器中,创建⼀张虚拟⽹卡,这⾥设置的参数为:
IPv4地址: 192.168.99.100
IPv4⽹络掩码: 255.255.255.0
随后在虚拟机中会到两个有线⽹络,将NAT⽹络的IPv4地址设置为⾃动获取,将Host-Only⽹卡的IPv4地址设置
为192.168.99.x,其中x为在内⽹中不重复的值,在这⾥,两台虚拟机的IPv4地址分别被设置为
了192.168.99.101和192.168.99.102.
接着测试⽹络的连通性,将虚拟机中的⽹络连接切换为Host-Only连接,接着使⽤ping来测试:
宿主机:
$ ping 192.168.99.101
$ ping 192.168.99.102
虚拟机1:
$ ping 192.168.99.100
$ ping 192.168.99.102
虚拟机2:
$ ping 192.168.99.100
$ ping 192.168.99.101
经测试,均能连通,内⽹组建完成。
然后在每个机器上均创建名为hadoop的账户
useradd hadoop
接下来使⽤ssh-keygen⽣成密钥,并⽤ssh-copy-id⽅便地保存密钥,使得宿主机和虚拟机、虚拟机和虚拟机的hadoop账户之间可以⽆需密码进⾏ssh登录。
之间可以⽆需密码进⾏ssh登录。
hadoop分布式集搭建 最后对宿主机和虚拟机均使⽤如下命令关闭防⽕墙,就可以开始配置Hadoop集了:
systemctl stop iptables
2. 启动Hadoop服务并进⾏测试
⾸先在⽂件/etc/hadoop/workers中添加两个虚拟机的内⽹IPv4地址:
192.168.99.101
192.168.99.102
然后修改⼀下配置⽂件/etc/l,增加如下配置,这⾥使⽤了端⼝9000⽤作数据传输:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
以及/etc/l:
<configuration>
<property>
<name&plication</name>
<value>1</value>
</property>
</configuration>
接下来在宿主机上对Hadoop分布式⽂件系统进⾏格式化:
$ hadoop namenode -format
最后就可以启动Hadoop了,只需在宿主机上执⾏:
$ /lib/hadoop/sbin/start-dfs.sh
这时候,Hadoop分布式集就已经构建完毕了。
可以执⾏jps来查看运⾏的Hadoop进程:
宿主机:
$ jps
34272 Jps
32681 NameNode
32845 SecondaryNameNode
虚拟机1:
$ jps
13768 Jps
13614 DataNode
虚拟机2:
$ jps
12509 DataNode
12606 Jps
使⽤http协议访问宿主机的9870端⼝,即192.168.99.100:9870,就进⼊了集后台,可以看到集中有2个数据节点,IPv4地址分别为192.168.99.101与192.168.99.102,即为组建内⽹时设置的值:
在集的⽂件系统中创建input⽂件夹:
$ /lib/hadoop/bin/hdfs dfs -mkdir input
随机⽣成总⼤⼩约1G的3个⽂本⽂件,内容格式与单机测试时的格式相同,存⾄本地的./input/,然后使⽤如下命令上传⾄Hadoop集:
$ /lib/hadoop/bin/hdfs dfs -put ./input/* input
这时再次访问集后台,可以看到数据节点的存储空间已被占⽤了⼀部分:
这时就可以以分布式的⽅式进⾏WordCount了:
$ hadoop jar /lib/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar\
wordcount input output
计算完成后,通过如下命令显⽰结果:
$ /lib/hadoop/bin/hdfs dfs -cat output/*
显⽰的结果为:
gcmjplyxwc 29997181
igwzvrjcmd 30002820
tbtwrtsxji 29999999
⾄此就完成了使⽤Hadoop进⾏WordCount的实验。
总结
通过这次实验,可以发现使⽤Hadoop框架是可以⾮常⽅便地搭建⼀个分布式计算集的,多个节点间唯⼀需要满⾜的条件就是可以通过⽹络互连。搭建好Hadoop集后,便可以⽅便地执⾏分布式任务。Hadoop集的⽂件系统也是⾮常强⼤的,在上⾯上传1G⼤⼩的⽂件可以看出:Hadoop在后端⾃动地将⽂件分布式地存储于两个节点,可是对于⽤户来说,却好像是在操作同⼀个节点上的⽂件系统。当然,环境的搭建和简单程序的运⾏只是学习Hadoop的开端,我会更加深⼊地学习Hadoop的应⽤与优化,并深⼊了解其底层实现⽅法。相信通过学习Hadoop这样⼀个优秀的框架,会对我理解分布式架构有很⼤的帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论