注:本文是对 https://www.bilibili.com/video/BV1CU4y1N7Sh
的实践。
环境
- CentOS 7.7
- JDK 8
- Hadoop 3.3.0
准备
VMWare的网络设置:略。
准备好3台虚拟机,其IP地址分别为 192.168.88.151
、 192.168.88.152
、 192.168.88.153
,其 hostname
分别为 host1
、 host2
、 host3
。
以第一台VM为例:
[root@node1 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.88.151 netmask 255.255.255.0 broadcast 192.168.88.255
inet6 fe80::5cc6:871d:9fc8:4b58 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:34:0b:53 txqueuelen 1000 (Ethernet)
RX packets 695530 bytes 698868702 (666.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1633377 bytes 4000289117 (3.7 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 3807 bytes 556130 (543.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3807 bytes 556130 (543.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@node1 ~]# hostname
node1.itcast.cn
[root@node1 ~]# hostname -s
node1
编辑 etc/hosts
文件,如下:
[root@node1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.88.151 node1 node1.itcast.cn
192.168.88.152 node2 node2.itcast.cn
192.168.88.153 node3 node3.itcast.cn
安装JDK 1.8(略):
[root@node1 ~]# java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
[root@node1 ~]# echo $JAVA_HOME
/export/server/jdk1.8.0_241
集群时间同步:
ntpdate ntp5.aliyun.com
防火墙关闭:
firewall-cmd --state #查看防火墙状态
systemctl stop firewalld.service #停止firewalld服务
systemctl disable firewalld.service #开机禁用firewalld服务
ssh免密登录(略):
[root@node1 ~]# ssh node2
Last login: Mon Dec 12 10:15:18 2022 from 192.168.88.151
[root@node1 ~]# ssh node3
Last login: Mon Dec 12 10:16:09 2022 from 192.168.88.151
注:以上操作需要在3台VM上都做一遍。
部署
把hadoop的压缩包放到 /export/server
目录并解压。可以用所提供的 hadoop-3.3.0-Centos7-64-with-snappy.tar.gz
,也可以到Hadoop网站上下载最新的(3.3.4)包。以node1为例:
tar -zxvf hadoop-3.3.0-Centos7-64-with-snappy.tar.gz
以下操作是在Hadoop的安装目录( /export/server/hadoop-3.3.0
)进行。
编辑 etc/hadoop/hadoop-env.sh
文件,添加如下内容:
export JAVA_HOME=/export/server/jdk1.8.0_241
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
编辑 etc/hadoop/core-site.xml
文件,在 <configuration>
和 </configuration>
之间添加如下内容:
<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<!-- 设置Hadoop本地保存数据路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hadoop-3.3.0</value>
</property>
<!-- 设置HDFS web UI用户身份 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 整合hive 用户代理设置 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!-- 文件系统垃圾桶保存时间 -->
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
编辑 etc/hadoop/hdfs-site.xml
文件,在 <configuration>
和 </configuration>
之间添加如下内容:
<!-- 设置SNN进程运行机器位置信息 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:9868</value>
</property>
编辑 etc/hadoop/mapred-site.xml
文件,在 <configuration>
和 </configuration>
之间添加如下内容:
<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- MR程序历史服务地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>
<!-- MR程序历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
编辑 etc/hadoop/yarn-site.xml
文件,在 <configuration>
和 </configuration>
之间添加如下内容:
<!-- 设置YARN集群主角色运行机器位置 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 是否将对容器实施物理内存限制 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否将对容器实施虚拟内存限制。 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 开启日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置yarn历史服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://node1:19888/jobhistory/logs</value>
</property>
<!-- 历史日志保存的时间 7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
编辑 etc/hadoop/workers
文件,清除原来的内容,添加如下内容:
node1.itcast.cn
node2.itcast.cn
node3.itcast.cn
把上面的操作在node2和node3上分别再做一遍。或者也可以直接把node1上配置好的hadoop目录复制到node2和node3上的相应目录。
编辑 /etc/profile
文件(注意这次是根目录下的 etc
目录),添加如下内容:
export HADOOP_HOME=/export/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
然后运行 source /etc/profile
命令使之生效。注意3个VM上都要做一遍。
格式化和启停
格式化name node,由于name node部署在node1上,所以只需在node1上运行:
hdfs namenode -format
在刷屏的输出消息里,可以找到这一句:
2022-12-12 10:47:56,576 INFO common.Storage: Storage directory /export/data/hadoop-3.3.0/dfs/name has been successfully formatted.
注:格式化操作只能做一次。
启动/停止HDFS(在node1上运行):
start-dfs.sh
|stop-dfs.sh
start-yarn.sh
|stop-yarn.sh
start-all.sh
|stop-all.sh
启动集群后,可以通过web页面查看:
http://192.168.88.151:9870
通过 Utilities
-> Browse the file system
,可以通过GUI直接操作HDFS的文件系统。
http://192.168.88.151:8088
在这里可以查看Hadoop的任务调度和状态。
集群的角色
通过 jps
查看Java进程,确认各个VM在集群中的角色:
- node1:
[root@node1 ~]# jps
91060 DataNode
126713 Jps
92090 ResourceManager
92284 NodeManager
90863 NameNode
- node2:
[root@node2 server]# jps
91696 SecondaryNameNode
92054 NodeManager
90298 DataNode
128318 Jps
- node3:
[root@node3 server]# jps
90017 DataNode
91745 NodeManager
128577 Jps
如下图所示: