分布式集群hadoop搭建
目的:
本文描述了如何安装、配置和管理有实际意义的Hadoop集群
基础环境配置
配置主机名
1 | [root@192 ~]# hostname |
修改hosts文件
1 | [root@vm1 ~]# cat /etc/hosts |
安装JDK
查看实时已经安装JDK
1 | [root@vm1 software]# java -version |
解压文件
在解压的时候 -C 是解压到指定目录中1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19[root@vm1 software]# pwd
/software
[root@vm1 software]# ll
total 514044
-rw-r--r--. 1 root root 334559382 Mar 29 20:35 hadoop-3.1.1.tar.gz
-rw-r--r--. 1 root root 191817140 Mar 29 20:35 jdk-8u201-linux-x64.tar.gz
[root@vm1 software]# tar -zxvf jdk-8u201-linux-x64.tar.gz -C /opt/
[root@vm1 software]#
[root@vm1 software]# cd /opt/jdk1.8.0_201/
[root@vm1 jdk1.8.0_201]# pwd
/workspace/jdk1.8.0_201
[root@vm1 jdk1.8.0_201]#
[root@vm1 jdk1.8.0_201]# vim /etc/profile
[root@vm1 jdk1.8.0_201]# source /etc/profile
[root@vm1 jdk1.8.0_201]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
[root@vm1 jdk1.8.0_201]#
说明
1 | 配置环境变量: |
配置免密登录
免密登录原理
1 | 图片................... |
生成公钥和私钥
1 | [root@vm1 ~]$ ssh-keygen |
实操过程
需要免密登录的服务器:
192.168.175.129
192.168.175.130
192.168.175.131
1 | [root@vm1 ~]# ssh-keygen |
编写集群分发脚本
scp可以实现服务器与服务器之间的数据拷贝
1 | // 假设远程服务器IP地址为 192.168.1.100 |
rsync远程同步工具
1 | rsync远程同步工具,主要用于备份和镜像。具有速度快、 避免复制相同内容和支持符号链接的优点。 |
自动化批量安装JDK
在vm1服务器上准备自动化脚本1
2
3
4
5
6
7[root@vm1 bat]# pwd
/workspace/bat
[root@vm1 bat]# ll
total 8
-rwxrwxrwx. 1 root root 288 Mar 31 05:38 boot.sh
-rwxrwxrwx. 1 root root 334 Mar 31 05:38 install.sh
[root@vm1 bat]
jdkboot.sh
1 |
|
jdkinstall.sh
1 |
|
关闭防火墙
1 | systemctl stop firewalld # 停止firewall |
配置hadoop集群
下载hadoop
1 | 1.下载地址 |
安装hadoop
1 | [root@vm1 software]# pwd |
将hadoop添加到环境变量
1 | [root@vm1 ~]# vim /etc/profile |
1 | 配置环境变量: |
集群部署规划
集群 | vm1 | vm2 | vm3 |
---|---|---|---|
hdfs | NameNode, DataNode | DataNode | SecondaryNameNode,DataNode |
yarn | NodeManager | ResourceManager,NodeManager | NodeManager |
给vm2配置免密登录
因为vm服务器需要作为ResourceManager的主节点,需要免密登录到vm1,vm2,vm3这3台服务器
首先 ssh-keygen 生成公钥和私钥,然后执行脚本1
2
3
4
5
6
7
8[root@vm2 ~]# pwd
/root
[root@vm2 ~]# ll
total 187340
-rw-------. 1 root root 1255 Nov 3 23:38 anaconda-ks.cfg
-rwxrwxrwx. 1 root root 553 Apr 2 07:51 sshboot.sh
[root@vm2 ~]#
[root@vm2 ~]# ./sshboot.sh
脚本内容1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SERVERS="vm1 vm2 vm3"
PASSWORD=123qwe!@#
## 实现免密登录的函数
auto_ssh_copy_id() {
expect -c "set timeout -1;
spawn ssh-copy-id $1;
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*assword:* {send -- $2\r;exp_continue;}
eof {exit 0;}
}";
}
ssh_copy_id_to_all() {
for SERVER in $SERVERS
do
auto_ssh_copy_id $SERVER $PASSWORD
done
}
## 调用免密登录配置函数,实现母机器到子机器的免密登录配置
ssh_copy_id_to_all
修改配置文件
修改hadoop-3.1.1/etc/hadoop里面的文件
core-site.xml
1 | <configuration> |
[hdfs] hadoop-env.sh
1 | export JAVA_HOME=/opt/jdk1.8.0_201 |
[hdfs] hdfs-site.xml
hadoop-3.1.1 默认端口9870
1 | <configuration> |
[hdfs] workers
hadoop-3.1.1将slaves文件更改为workers,删除localhost1
2
3vm1
vm2
vm3
[yarn] yarn-env.sh
1 | export JAVA_HOME=/opt/jdk1.8.0_201 |
[yarn] yarn-site.xml
1 | <configuration> |
[mapreduce] mapred-env.sh
1 | export JAVA_HOME=/opt/jdk1.8.0_201 |
[mapreduce] mapred-site.xml
1 | <configuration> |
hadoop同步到其他服务器
hdboot.sh
1 |
|
hdinstall.sh
1 |
|
集群启动
启动NameNode节点,在vm1服务器上启动
如果集群是第一次启动,需要在格式化namenode
因为vm1是namenode,vm2、vm3都是datanode,所以只需要对vm1进行初始化操作,也就是对hdfs进行格式化。
执行初始化脚本,也就是执行命令:hdfs namenode -format
等待一会后,不报错返回 “Exiting with status 0” 为成功,“Exiting with status 1”为失败
1 | [root@vm1 hadoop-3.1.1]# pwd |
启动HDFS
1.启动集群脚本
在nameNode节点启动集群脚本
1 | [root@vm1 hadoop-3.1.1]# pwd |
2.启动是出现错误
1 | [root@vm1 hadoop-3.1.1]# pwd |
3.出现错误,解决办法:
是因为缺少用户定义造成的,所以分别编辑开始和关闭脚本
1 | vim sbin/start-dfs.sh |
4.编辑好之后,分发到其他服务器
1 | scp /opt/hadoop-3.1.1/sbin/start-dfs.sh root@vm2:/opt/hadoop-3.1.1/sbin/ |
检查启动的HDFS实时和规划部署的一致
1 | [root@vm1 hadoop-3.1.1]# sbin/start-dfs.sh |
浏览器查看HDFS页面管理界面
关闭防火墙
1 | systemctl stop firewalld |
http://192.168.175.129:9870/dfshealth.html#tab-overview
停止HDFS
1 | [root@vm1 hadoop-3.1.1]# pwd |
hadoop多次格式化导致节点不能启动问题
遇到的问题:
hadoop 多次格式化format namenode 导致节点不能启动,出现这个问题的原因是多次格式化会导致节点的clusterID不一致。
解决办法:
1.先停止所有启动的服务
/opt/hadoop-3.1.1/sbin/stop-all.sh
2.删除core-site.xml 和hdfs-site.xml文件中配置的文件夹. 注意:这一步在三台机器上都要做
rm -r /opt/hadoop-3.1.1/tmp, rm -r /opt/hadoop-3.1.1/logs
启动yarn(启动ResourceManager和NodeManager)
1.启动脚本,在vm2服务器上启动
1 | [root@vm2 hadoop-3.1.1]# sbin/start-yarn.sh |
2.出错是因为缺少用户定义造成的,所以分别编辑开始和关闭脚本
1 | vim sbin/start-yarn.sh |
3.编辑好之后,分发到其他服务器
1 | scp /opt/hadoop-3.1.1/sbin/start-yarn.sh root@vm1:/opt/hadoop-3.1.1/sbin/ |
4.启动yarn
1 | [root@vm2 hadoop-3.1.1]# vim sbin/start-yarn.sh |
5.启动验证
1 | [root@vm2 hadoop-3.1.1]# jps |
浏览器查看YARN的管理界面
http://192.168.175.130:8088/cluster
同时启动HDFS和ResourceManager,NodeManager
1.vm1服务器上启动
1 | [root@vm1 hadoop-3.1.1]# sbin/start-all.sh |
2.启动验证
1 | [root@vm1 hadoop-3.1.1]# jps |
3.停止服务
1 | [root@vm1 hadoop-3.1.1]# sbin/stop-all.sh |