软件准备
节点规划
实验步骤
5.1 节点准备
Step 1 连接到虚拟机
Step 2 修改主机名和ip地址映射
Step 3 配置服务器互信
Step 4 创建目录
Step 5 安装JDK
Hadoop集群安装
Step1 准备hadoop组件
Step 2 将Hadoop分发到每个节点
Step 3 格式化namenode,并启动hadoop
Step 4 验证Hadoop基本功能
软件 |
版本 |
下载地址 |
jdk |
1.8以上 |
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html |
hadoop |
2.8.5 |
|
MobaXterm(或其他ssh工具) |
NA |
NA |
安装包可以在线下载,也可以从博主资源下载
节点规划
IP |
主机名 |
虚拟机网络配置 |
操作系统 |
节点功能 |
192.168.56.100 |
hadoopnode1 |
网卡1:Host-Only <br />网卡2:网络地址转换(NAT) |
Centos 7 |
namenode |
192.168.56.101 |
hadoopnode2 |
同上 |
同上 |
datanode |
< style="text-align:left;">192.168.56.102 | hadoopnode3 |
同上 |
同上 |
datanode |
192.168.56.103 |
hadoopnode4 |
同上 |
同上 |
datanode |
实验步骤
5.1 节点准备
Step 1 连接到虚拟机
1)启动4台虚拟机
2)使用ssh工具连接到第一台虚拟机
此处使用的时MobaXterm,你也可以使用其他ssh工具,比如Xshell,putty等,输入主机ip:192.168.56.100,指定用户名root,点击ok开始连接。
输入密码后连接成功:
Step 2 修改主机名及ip地址映射
需要将各节点的主机名进行修改,并在hosts中将主机名和ip地址进行映射,以方便hadoop使用主机名找到各个节点,以下是规划好的主机名及对应IP:
内网IP |
主机名 |
备注 |
192.168.0.100 |
hadoopnode1 |
|
192.168.0.101 |
hadoopnode2 |
|
192.168.0.102 |
hadoopnode3 |
|
192.168.0.103 |
hadoopnode4 |
1)修改主机名
可以通过如下命令查看主机名:
[root@hadoopnode1 ~]# hostname
hadoopnode1
如果不符合预期,可以使用vi命令修改:
[root@hadoopnode1 ~]# vi /etc/hostname
2)编辑主机名和ip映射
可以使用vi命令编辑/etc/hosts:
[root@hadoopnode1 ~]# vi /etc/hosts
修改成如下内容:
3)关闭防火墙
在hadoopnode1节点上运行如下命令关闭并禁用防火墙:
[root@hadoopnode1 ~]# systemctl stop firewalld
[root@hadoopnode1 ~]# systemctl disable firewalld
运行结果:
[root@hadoopnode1 ~]# systemctl stop firewalld
[root@hadoopnode1 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@hadoopnode1 ~]#
4)同步修改其他节点
重复1)4)步重复修改hadoopnode24节点。
Step 3 配置服务器互信
为了各节点间不必输入密码登录各服务器,需要配置4台服务器互信,也就是ssh的免密钥登录。
1)在各个节点生成密钥对
在hadoopnode1节点上执行ssh-keygen -t rsa,连续回车生成/root/.ssh/id_rsa.pub文件:
[root@hadoopnode1 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:ECzA0508+TS+oYK4DqRhRLHzEM6kzOh0rj8KJr2VdCk root@hadoopnode1
The key's randomart image is:
+---[RSA 2048]----+
| *oo +.o |
|X = o B.o |
|o@ o ..= . |
|+ * o+ |
|.= +E o.So |
|=oo..+. . |
|=+. o. |
|* .+ |
|.oo.. |
+----[SHA256]-----+
[root@hadoopnode1 ~]#
生成的公钥和私钥:
[root@hadoopnode1 ~]# ll /root/.ssh
总用量 12
-rw-------. 1 root root 1675 3月 10 14:46 id_rsa
-rw-r--r--. 1 root root 398 3月 10 14:46 id_rsa.pub
-rw-r--r--. 1 root root 528 3月 10 11:05 known_hosts
[root@hadoopnode1 ~]#
idrsa为私钥,idrsa_pub为公钥
[root@hadoopnode1 ~]# ssh hadoopnode2
The authenticity of host 'hadoopnode2 (192.168.56.101)' can't be established.
ECDSA key fingerprint is SHA256:kA4cBykuv++T2CylCNc2gScLjS+T0kca4l7PeE61J8c.
ECDSA key fingerprint is MD5:bc:da:95:e2:8d:f6:8f:6d:ea:49:97:7e:90:88:9a:ae.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoopnode2' (ECDSA) to the list of known hosts.
root@hadoopnode2's password:
Last login: Tue Mar 10 10:47:04 2020 from 192.168.56.100
[root@hadoopnode2 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Eg3wRsarxBT2KYpPh5D+tvK9Cr1cl9mUx2XXBJ3svB8 root@hadoopnode2
The key's randomart image is:
+---[RSA 2048]----+
| +++ ooo|
| . ..=.+ +o|
|o o. *.. oo..|
|.o ooo.. o o .o |
|..+.... So o .|
| oo.. .= . E |
| ..+ . + . o|
| .+ = . .|
| o*.o. |
+----[SHA256]-----+
[root@hadoopnode2 ~]# ll /root/.ssh
总用量 8
-rw-------. 1 root root 1679 3月 10 14:56 id_rsa
-rw-r--r--. 1 root root 398 3月 10 14:56 id_rsa.pub
[root@hadoopnode2 ~]# exit
登出
Connection to hadoopnode2 closed.
[root@hadoopnode1 ~]#
由于各节点第一次配置免密钥登录,因此还是要输入密码
公钥和私钥在/root/.ssh目录下,注意验证两个文件是否存在
2)收集各节点公钥并合并到公钥受信列表(authorized_keys)
在每台集群上(hadoopnode1~4)分别运行cat /root/.ssh/id_rsa.pub命令,分别将里面的文件内容复制到一个临时的记事本文件中。
如下是复制出来的内容:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4RKbuWjyQ8GnThjTeAY6TM3dVlI9e0BFtjTDpX/Rn3G47xJ8fpxa8XnDlj7zuTdFSJchqlcOkHZilKQDRejttMUC08j3KkiVBcg0Z8sLs9wwSUl2rFeUd47FTT1Xi7SL1fKEhVRnGZmn8838/Mn3QahUDXm5cFI8AxhAXKtvFoudj6tkEr/9Lx836WrDcPWqDM6plPL+tGgdzpVlCj021fLBrTOIA6BDjDqMUUPT3Fh3MzRPPbtW0uRDlKMbeIXBlcpCYDgB6XtKzO0vgF+eHc4HlYDlcBy3jKVso7DFjuQILXjg4B5hr6n9yV2T6hU2E7VEUx04NZJhptWrubh5t root@hadoopnode1 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8D1n4OQuKIfn1Up0KmVM4IiGZtRk5dpvoDtm8orZ8s35W2oE3NUH1AV0ZX+vDb2zqMJtapXaCUNcN3xBzI6Dv2DMgv861IvzPGItJsHhnbmcXzP+HynxZ23/zE588MLQroQIO2+igerMGuF6Ptk35R4OdlU2wukNXwv9zLhGiqHialrxkXDTp1J+MMpHqY3PUebJt2i12kTub7h8l2cNbctfV9TVb97qul70v9PBAL85JWmWnpRfMmnMwtIKiFqssAQurCTwvZntcc7tuaXogpOjP0TX2rGpLRlP6lUSmoHq3ImXyfGYMgAsgIDLm7YkKwMUspYq7ohbhqvvhxNaR root@hadoopnode2 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDmJ/LCkA3ZySPi9h2Cbne3JgdqRjdS8a4vF3bu8g93nZmBZwhGr6zoflw3fjBfJq0xaAiYqoxseC1t5RZRiTa+o/75rErr2uHFuUqmlC0jlcEO1IKBXehdMvxFOFdkuPU7t5XOSe6ENC01k0imYPj9E9eMtXKjJ230vb7sbbHDjKS2qdiQtyBrRoNWr7pzaZaz4F7m2W5AHGq1C6rAZhUOK2fikyTM57gx53S+8QZvhZ8MSKvAFivdAIixivflJyxa875sUbAkReGytjWb4stmjRhEsOi5Nu4IaqdlqbBJ7egJVixyC/khjIdzZY5s982psqz9/zm9l6ZlbfbE3TFx root@hadoopnode3 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDonngfRZYviK5xr7gumY2zhmGivoFgiB5aTQ9ddINrrIZr2BQz2dkwoMnlX8x8ElsQ/HZ0x6xUNQGUpxlblumseTWSP368OaX+Uk0UK6KTcHOpADOV6yGyV5GSt4Er+2uyOWXknjc5eHPDHMJjxg2o3CjA9nAtlVxpZkiNCXD3Lvp5kW91w8Au4T5JYnKTJHyIFeuQTyMHPTTppiJDgYbtbrMRuhketKAEtqXGdbIGrKwLiz4ftVfY1+DaMBgJoAQQpghxopDiYqpKDnKoUdqTISZMk/Dv6oSw+frkWI1QFMd2+LGCfcmbbo6d5nT8+yeQJFSjW2RE8hK4z2uOH+0T root@hadoopnode4
上面的文件就是4台机器的公钥内容。需要把这些内容放到每台机器的authorized_keys文件中(默认和密钥对在同一个文件夹中,如不存在,需要自己建立)。
首先在hadoopnode1节点上通过如下命令建立受信列表文件:
[root@hadoopnode1 ~]# vi /root/.ssh/authorized_keys
将前面收集的内容拷贝到vi编辑器中,并保存退出:
3)将authorized_keys分发到各个节点
在hadoopnode1节点上运行如下命令,将authorized_keys文件分发到hadoopnode2~4节点:
[root@hadoopnode1 ~]# scp /root/.ssh/authorized_keys root@hadoopnode2:/root/.ssh/authorized_keys
root@hadoopnode2's password:
authorized_keys 100% 1592 2.1MB/s 00:00
[root@hadoopnode1 ~]# scp /root/.ssh/authorized_keys root@hadoopnode3:/root/.ssh/authorized_keys
root@hadoopnode3's password:
authorized_keys 100% 1592 2.1MB/s 00:00
[root@hadoopnode1 ~]# scp /root/.ssh/authorized_keys root@hadoopnode4:/root/.ssh/authorized_keys
root@hadoopnode4's password:
authorized_keys 100% 1592 1.9MB/s 00:00
[root@hadoopnode1 ~]#
4)验证服务器互信,确保无密码登录各节点
在每个节点上运行ssh hadoopnode1~4命令,第一次访问会需要输入yes,但不再需要输入密码。各个节点可以无密码跳转到目的节点。
下面仅演示在hadoopnode1上登录hadoopnode2~4各节点的过程:
[root@hadoopnode1 ~]# ssh hadoopnode2
Last login: Tue Mar 10 16:09:51 2020 from hadoopnode1
[root@hadoopnode2 ~]# exit
登出
Connection to hadoopnode2 closed.
[root@hadoopnode1 ~]# ssh hadoopnode3
Last login: Tue Mar 10 16:10:15 2020 from hadoopnode1
[root@hadoopnode3 ~]# exit
登出
Connection to hadoopnode3 closed.
[root@hadoopnode1 ~]# ssh hadoopnode4
Last login: Tue Mar 10 16:10:25 2020 from hadoopnode1
[root@hadoopnode4 ~]# exit
登出
Connection to hadoopnode4 closed.
[root@hadoopnode1 ~]#
Step 4 创建目录
先在hadoopnode1节点上,执行如下命令创建安装过程中需要使用的目录:
[root@hadoopnode1 ~]# mkdir -p /home/extend_tools
[root@hadoopnode1 ~]# mkdir -p /home/modules/data/buf/
[root@hadoopnode1 ~]# mkdir -p /home/test_tools/
[root@hadoopnode1 ~]# mkdir -p /home/nm/localdir/
[root@hadoopnode1 ~]# ll /home
总用量 0
drwxr-xr-x. 2 root root 6 3月 13 09:23 extend_tools
drwxr-xr-x. 3 root root 18 3月 13 09:23 modules
drwxr-xr-x. 3 root root 22 3月 13 09:24 nm
drwxr-xr-x. 2 root root 6 3月 13 09:23 test_tools
Step 5 安装JDK
1)通过java -version命令可以检测系统中是否安装了JDK
[root@hadoopnode1 ~]# java -version
-bash: java: 未找到命令
2)通过ftp工具将下载好的jdk安装包上传到hadoopnode1的/home/extend_tools目录下
将下载的linux版本64位jdk上传到/home/extend_tools目录:
3)解压jdk并移到安装目录下
root@hadoopnode1 ~]# cd /home/extend_tools/
[root@hadoopnode1 extend_tools]# tar zxvf jdk-8u241-linux-x64.tar.gz
[root@hadoopnode1 extend_tools]# mv jdk1.8.0_241/ /usr/local
[root@hadoopnode1 extend_tools]# ll /usr/local
drwxr-xr-x. 2 root root 6 4月 11 2018 bin
drwxr-xr-x. 2 root root 6 4月 11 2018 etc
drwxr-xr-x. 2 root root 6 4月 11 2018 games
drwxr-xr-x. 2 root root 6 4月 11 2018 include
drwxr-xr-x. 7 10143 10143 245 12月 11 18:39 jdk1.8.0_241
drwxr-xr-x. 2 root root 6 4月 11 2018 lib
drwxr-xr-x. 2 root root 6 4月 11 2018 lib64
drwxr-xr-x. 2 root root 6 4月 11 2018 libexec
drwxr-xr-x. 2 root root 6 4月 11 2018 sbin
drwxr-xr-x. 5 root root 49 3月 8 21:13 share
drwxr-xr-x. 2 root root 6 4月 11 2018 src
4)设置环境变量
使用vi编辑/etc/profile文件:
[root@hadoopnode1 extend_tools]# vi /etc/profile
在文件末尾添加如下两行内容:
export JAVA_HOME=/usr/local/jdk1.8.0_241
export PATH=$JAVA_HOME/bin:$PATH
5)使环境变量生效并验证
[root@hadoopnode1 extend_tools]# source /etc/profile
[root@hadoopnode1 extend_tools]# 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)
6)在其他节点上安装JDK
由于各节点环境都类似,可以直接进行循环拷贝,如果环境不同需要在hadoopnode24上重复执行1)5)步。
先分发jdk目录:
for i in {2..4};do scp -r /usr/local/jdk1.8.0_241 root@hadoopnode${i}:/usr/local/;done
再分发配置文件:
for i in {2..4};do scp /etc/profile root@hadoopnode${i}:/etc/;done
通过ssh逐一登录各节点,使环境生效,并验证jdk安装是否成功:
下面以登录hadoopnode2节点为例,其他节点类似:
[root@hadoopnode1 extend_tools]# ssh hadoopnode2
Last login: Fri Mar 13 10:23:40 2020 from hadoopnode1
[root@hadoopnode2 ~]# source /etc/profile
[root@hadoopnode2 ~]# 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@hadoopnode2 ~]# exit
登出
Connection to hadoopnode2 closed.
[root@hadoopnode1 extend_tools]#
Hadoop集群安装
Step1 准备hadoop组件
在hadoopnode1节点上准备Hadoop组件:
1)在hadoopnode1节点上解压hadoop
首先使用ftp工具将下载好的hadoop压缩包上传到/home/extend_tools目录下:
进入/home/extend_tools目录,运行如下命令进行解压:
[root@hadoopnode1 ~]# cd /home/extend_tools/
[root@hadoopnode1 extend_tools]# ls
hadoop-2.8.5.tar.gz jdk-8u241-linux-x64.tar.gz
[root@hadoopnode1 extend_tools]# tar zxvf hadoop-2.8.5.tar.gz
将hadoop解压到安装位置/home/modules:
[root@hadoopnode1 ~]# cd /home/extend_tools/
[root@hadoopnode1 extend_tools]# ls
hadoop-2.8.5 hadoop-2.8.5.tar.gz jdk-8u241-linux-x64.tar.gz
[root@hadoopnode1 extend_tools]# mv hadoop-2.8.5 /home/modules/
[root@hadoopnode1 extend_tools]# ls /home/modules/
data hadoop-2.8.5
2)配置hadoop所使用的JDK
在hadoopnode1节点上使用vi编辑hadoop-env.sh将里面的JAVA_HOME替换为实际使用的JDK:
[root@hadoopnode1 extend_tools]# vi /home/modules/hadoop-2.8.5/etc/hadoop/hadoop-env.sh
将其中的export JAVA_HOME一行换成实际安装的JDK位置:
3)编辑core.site.xml文件
在hadoopnode1节点上编辑core.site.xml文件:
[root@hadoopnode1 extend_tools]# vi /home/modules/hadoop-2.8.5/etc/hadoop/core-site.xml
在configuration节点中添加如下内容:
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoopnode1:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/modules/hadoop-2.8.5/tmp</value>
</property>
4 )编辑hdfs-site.xml文件
在hadoopnode1节点上编辑hdfs-site.xml文件:
[root@hadoopnode1 extend_tools]# vi /home/modules/hadoop-2.8.5/etc/hadoop/hdfs-site.xml
在configuration节点中添加如下内容:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoopnode1:50090</value>
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>hadoopnode1:50091</value>
</property>
5)编辑yarn-site.xml文件
在hadoopnode1节点上使用vi编辑yarn-site.xml文件:
[root@hadoopnode1 extend_tools]# vi /home/modules/hadoop-2.8.5/etc/hadoop/yarn-site.xml
在configuration节点中添加如下内容:
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/home/nm/localdir</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoopnode1</value>
</property>
6) 编辑mapred-site.xml文件
在hadoopnode1节点上,mapred-site.xml文件并不存在,需要从模板文件复制出来:
[root@hadoopnode1 extend_tools]# cp /home/modules/hadoop-2.8.5/etc/hadoop/mapred-site.xml.template /home/modules/hadoop-2.8.5/etc/hadoop/mapred-site.xml
然后使用vi进行编辑:
[root@hadoopnode1 extend_tools]# vi /home/modules/hadoop-2.8.5/etc/hadoop/mapred-site.xml
在configuration节点中添加如下内容:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoopnode1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoopnode1:19888</value>
</property>
<property>
<name>mapred.task.timeout</name>
<value>1800000</value>
</property>
7)编辑slaves文件
在hadoopnode1上使用vi编辑slaves文件:
[root@hadoopnode1 extend_tools]# vi /home/modules/hadoop-2.8.5/etc/hadoop/slaves
将原有的localhost等内容删除,将datanode节点添加到该文件中:
hadoopnode2 hadoopnode3 hadoopnode4
8)设置Hadoop环境变量
在hadoopnode1节点上,使用vi编辑hadoop相关环境变量:
vi /etc/profile
在文件末尾添加如下内容:
export HADOOP_HOME=/home/modules/hadoop-2.8.5 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH export HADOOP_CLASSPATH=/home/modules/hadoop-2.8.5/share/hadoop/tools/lib/*:$HADOOP_CLASSPATH
使环境变量生效:
source /etc/profile
Step 2 将Hadoop分发到各个节点
1)将hadoopnode1上的hadoop分发到各个节点
在hadoopnode1上执行如下脚本:
for i in {2..4};do scp -r /home/modules/hadoop-2.8.5 root@hadoopnode${i}:/home/modules/hadoop-2.8.5;done
2)将环境变量配置同步到各节点,并使配置生效
将/etc/profile分发到各节点:
for i in {2..4};do scp /etc/profile root@hadoopnode${i}:/etc;done
分别通过ssh连接到各节点,使配置生效:
[root@hadoopnode1 ~]# ssh hadoopnode2
Last login: Sat Mar 14 18:25:04 2020 from 192.168.56.1
[root@hadoopnode2 ~]# source /etc/profile
[root@hadoopnode2 ~]# exit
登出
Connection to hadoopnode2 closed.
[root@hadoopnode1 ~]# ssh hadoopnode3
Last login: Fri Mar 13 17:38:50 2020
[root@hadoopnode3 ~]# source /etc/profile
[root@hadoopnode3 ~]# exit
登出
Connection to hadoopnode3 closed.
[root@hadoopnode1 ~]# ssh hadoopnode4
Last login: Fri Mar 13 17:38:21 2020
[root@hadoopnode4 ~]# source /etc/profile
[root@hadoopnode4 ~]# exit
登出
Connection to hadoopnode4 closed.
[root@hadoopnode1 ~]#
Step 3 格式化namenode,并启动hadoop
1)格式化namenode
在hadoopnode1上格式化namenode:
hdfs namenode -format
如出现如下类似信息,则表示格式化成功:
20/03/14 19:10:02 INFO common.Storage: Storage directory /home/modules/hadoop-2.8.5/tmp/dfs/name has been successfully formatted.
2)启动dfs,yarn
在hadoopnode1上运行如下命令:
start-dfs.sh
start-yarn.sh
3)查看hadoop进程
在hadoopnode1节点上运行jps命令可以看到NameNode, SecondaryNameNode, ResourceManager 3个进程:
[root@hadoopnode1 ~]# jps 5313 ResourceManager 5586 Jps 4969 NameNode 5161 SecondaryNameNode [root@hadoopnode1 ~]#
在其他节点上运行jps命令会看到NodeManager 和 Datanode 2个进程:
[root@hadoopnode2 ~]# jps 4032 Jps 3802 DataNode 3901 NodeManager
Step 4 验证Hadoop基本功能
1)创建目录
在hadoopnode1上创建目录并查看:
[root@hadoopnode2 ~]# hdfs dfs -mkdir /test_folder [root@hadoopnode2 ~]# hdfs dfs -ls / Found 1 items drwxr-xr-x - root supergroup 0 2020-03-14 19:55 /test_folder
2)查看hadoop web ui
通过浏览器访问hadoopnode1的8088端口:
在浏览器地址栏中输入:http://192.168.56.100:8088