1.1 安装环境
操作系统deepin 15.11, VMware Workstation,hadoop 3.1.3 版本。在deepin 操作系统中安装 VMware Workstation,在 VMware Workstation中安装两个deepin系统,采用两个节点作为集群环境,一个作为Master节点,一个作为Slave 节点。
1.2 hadoop的安装准备
在Master节点和Slave节点都需要进行如下准备工作,主要是配置hadoop用户,安装SSH server和安装Java 环境。
- 在安装虚拟机系统时,每个系统都创建hadoop用户。
- 选择一个节点作为Master, ctrl+alt+t打开终端,通过命令行方式进行安装,更新apt,执行如下命令。
sudo apt-get update
- 安装vim ,用于后续修改配置文件。
sudo apt-get install vim
- 安装SSH并登录主机。
sudo apt-get install openssh-server
ssh localhost
- 配置SSH无密码登录,由于hadoop 远程登录只能无密码登录,因此需要配置无密登录。
退出登录: exit
cd ~/.ssh/
sh-keygen -t rsa
cat ./id_rsa.pub >> ./authorized_keys
- 安装Java 环境,采用jdk-8u162-linux-x64.tar.gz,在Documents/目录下。
cd /usr/lib
sudo mkdir jvm
cd ~/Documents/
sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm
- 配置环境变量,在配置文件开头位置添加如下内容。
打开配置文件:
cd ~
vim ~/.bashrc
添加内容:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
- 查看jdk是否安装成功。
Java -version
1.3 安装Hadoop
在Master 节点安装hadoop ,并把/usr/local/中的hadoop 文件夹复制到其他Slave节点的/usr/local目录下。
- hadoop-3.1.3.tar.gz 在目录~/Documents/下,安装到/usr/local目录下。
cd ~/Documents/
sudo tar zxf hadoop3.1.3.tar.gz -C /usr/local
- 修改文件夹名,并修改文件的权限。
cd /usr/local/
sudo mv ./hadoop-3.1.3/ ./hadoop
sudo chown -R hadoop ./hadoop
- 查看是否安装成功。
cd /usr/local/hadoop
./bin/hadoop version
1.4 Hadoop集群配置
- 网络配置,配置每个节点的网络,采用桥接来实现节点之间的互联,通过NAT模式连接网络。
1)通过Edit->Virtual Netwrok Editor,点击Add Network添加一个网络,设置连接方式为桥接。
2)设置vmnet8中的子网号为192.168.138.0,子网掩码255.255.255.0和网关192.168.138.133,点击NAT Setting即可设置网关。
- 配置需要每个节点主机的IP 地址,在子网192.168.138.0下,设置IP地址,Master 节点的IP为:192.168.138.128, Slave节点的IP 为:192.168.138.131。
1)通过ifconfig来查看网卡的IP地址,如下图所示,ens33即为桥接网卡。
2)节点计算机静态IP 配置,执行如下命令打开配置文件。
Master节点:
sudo vim /etc/network/interfaces
添加内容:
auto ens33
iface ens33 inet static
address 192.168.138.128
通过如下命令使设置生效,出现OK字样则成功:
sudo /etc/init.d/networking restart
Slave节点:
用同样的方法设置,添加的内容为:
auto ens33
iface ens33 inet static
address 192.168.138.131
- 修改主机名,将Master节点的主机名为Master,将Slave节点的主机名改为Slave,分别在两个节点中执行如下命令。
sudo vim /etc/hostname - 在Master节点和Slave节点修改自己节点的IP 映射,添加如下相同内容。
执行如下命令,注释掉文件中除127.0.0.1 localhost 的其他的IP 地址映射。
sudo vim /etc/hosts
添加IP映射:
192.168.138.128 Master
192.168.138.131 Slave
- 重启每个节点,完成主机名更新。
- 测试每个节点是否能Ping 通,通过如下命令测试。
ping Master -c 3
ping Slave -c 3
- SSH无密吗登录节点,配置Master 节点可以远程登录其他Slave节点。由于修改过主机名,所以需要删除原来的SSH 公钥。在Master节点执行如下命令生成公钥。
cd ~/.ssh
rm ./id_rsa*
ssh-keygen -t rsa
- 让Master 节点能无密登录SSH 本机,在Master节点执行如下命令.
cat ./id_rsa.pub >> ./authorized_keys
- 通过远程拷贝文件,将主机Master ssh公钥传输到Slave 节点。
scp ~/.ssh/id_rsa.pub hadoop@Slave:/home/hadoop/
- 在Slave 节点将 ssh 公钥加入授权,执行如下命令,需要删除原先SSH公钥。
mkdir ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub
11. 在Master 节点上测试远程登录Slave 节点,可以看到主机名改变为Slave。
ssh Slave
12. 在Master节点配置hadoop 的PATH 变量,则可以直接使用hadoop,hdfs 相关命令而不需要转到相关目录。
打开配置文件:
vim ~/.bashrc
添加内容:
export PATH=$PATH:/usr/local/hadoop/bin:/usr/loacl/hadoop/sbin
使配置生效:
source ~/.bashrc
- 在Master节点修改配置目录/usr/local/hadoop/etc/hadoop目录下的5个配置文件。
- workers 文件
Master作为NameNode,Slave作为 DataNode。将DataNode的主机名写入workers 文件,删除localhost。添加如下内容。
Slave
- core-site.xml
修改标签中的内容如下。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
- hdfs-site.xml
修改标签中的内容如下。
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
- mapred-site.xml
修改标签中的内容如下。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
</configuration>
- yarn-site.xml
修改标签中的内容如下。
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 在Master节点通过远程拷贝Master 节点的/usr/loacl/hadoop目录到其他Slave 节点。首先先删除之前的临时文件和日志。
cd /usr/local
sudo rm -r ./hadoop/tmp
sudo rm -r ./hadoop/logs/*
tar -zcf ~/hadoop.master.tar.gz ./hadoop
cd ~
scp ./hadoop.master.tar.gz Slave:/home/hadoop
- 在Slave 节点解压文件。
sudo rm -r /usr/local/hadoop
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop
- 在Master 节点执行 NameNode 的格式化。
hdfs namenode -format
17. 在Master 节点上启动hadoop 集群,执行如下命令。
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
18. 通过jps 查看集群的节点启动的进程信息,分别在Master 和 Slave 节点执行jps。
Master 节点:
Slave 节点:
- 在Master节点查看集群的DataNode 是否正常启动。
hdfs dfsadmin -report
通过网页查看Slave 节点的相关信息:
- 关闭hadoop集群。
stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver
或者通过如下命令关闭集群。
stop-all.sh
1.5 总结
问题1:
- Master 节点NameNode 没有启 动,DataNode节点却启动了;
- 执行hdfs dfsadmin -report命令出现如下信息:
report:Call From Master/192.168.138.128 to Master:9000 failed on connection exception: java.net.ConnectException:拒绝连接;For more details see :http://wiki.apache.org/hadoop/ConnectionRefused
解决:分析发现,我没有配置slaves文件,在hadoop3.1.3版本中,不存在slaves文件,通过网络查询资料以及和同学交流,我发现slaves文件更改成了workes文件,因此配置workes文件;由于前后操作不当,因此导致了此问题。通过如下方式解决:
关闭集群,删除临时文件和日志,重新执行hdfs namenode -format.
问题2:
- 当关机重启后,集群无法启动,无法ping 通 ;
解决:分析发现各节点的IP发生了变化,导致 集群无法启动,是由于采用了NAT 进行网络连接,NAT模式在每次重启计算机会动态分配IP 地址;采用桥接来实现各节点的连通,配置静态IP.
参考文献
1.厦门大学数据库实验室,http://dblab.xmu.edu.cn/blog/install-hadoop-cluster/