Hadoop集群搭建
一,前期资源准备
这里我使用的资源已上传百度云:点我 提取码:tjs4
本文为记录尚硅谷海哥的教学视屏的笔记,传送门
尚硅谷海哥的教学视屏资源:点我 提取码:ikgg
二,模板虚拟机环境准备
- 使用VMware安装模板虚拟机,IP 地址 192.168.47.100、主机名称 hadoop100、内存 4G、硬盘 20G
修改克隆虚拟机的静态 IP
[root@hadoop100 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
IPADDR=192.168.47.100
GATEWAY=192.168.47.254
DNS1=114.114.114.114
修改主机名称
[root@hadoop100 ~]# vim /etc/hostname
hadoop100
配置 Linux 克隆机主机名称映射 hosts 文件,打开/etc/hosts
[root@hadoop100 ~]# vim /etc/hosts
添加如下内容
192.168.47.100 hadoop100
192.168.47.101 hadoop101
192.168.47.102 hadoop102
192.168.47.103 hadoop103
192.168.47.104 hadoop104
192.168.47.105 hadoop105
192.168.47.106 hadoop106
192.168.47.107 hadoop107
192.168.47.108 hadoop108
- 确保虚拟机可以联网安装 epel-release
[root@hadoop100 ~]# yum install -y epel-release
- 关闭防火墙,关闭防火墙开机自启
[root@hadoop100 ~]# systemctl stop firewalld
[root@hadoop100 ~]# systemctl disable firewalld.service
- 创建 xumx 用户,并修改 xumx 用户的密码
[root@hadoop100 ~]# useradd xumx
[root@hadoop100 ~]# passwd xumx
- 配置 xumx 用户具有 root 权限,方便后期加 sudo 执行 root 权限的命令
[root@hadoop100 ~]# vim /etc/sudoers
修改/etc/sudoers 文件,在%wheel 这行下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
xumx ALL=(ALL) NOPASSWD:ALL
- 在/opt 目录下创建文件夹,并修改所属主和所属组
[root@hadoop100 ~]# mkdir /opt
- 在/opt 目录下创建 module、software 文件夹
[root@hadoop100 ~]# mkdir /opt/module
[root@hadoop100 ~]# mkdir /opt/software
- 修改 module、software 文件夹的所有者和所属组均为 atguigu 用户
[root@hadoop100 ~]# chown xumx:xumx /opt/module
[root@hadoop100 ~]# chown xumx:xumx /opt/software
- 查看 module、software 文件夹的所有者和所属组
[root@hadoop100 ~]# cd /opt/
[root@hadoop100 opt]# ll
总用量 12
drwxr-xr-x. 2 atguigu atguigu 4096 5 月 28 17:18 module
drwxr-xr-x. 2 root root 4096 9 月 7 2017 rh
drwxr-xr-x. 2 atguigu atguigu 4096 5 月 28 17:18 software
- 卸载虚拟机自带的 JDK
[root@hadoop100 ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
- 重启虚拟机
[root@hadoop100 ~]# reboot
三,克隆虚拟机
- 利用模板机 hadoop100,克隆三台虚拟机:hadoop102 hadoop103 hadoop104(注意:克隆时,要先关闭 hadoop100)
- 修改克隆机 IP,以下以 hadoop102 举例说明
修改克隆虚拟机的静态 IP
[root@hadoop100 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
IPADDR=192.168.47.102
GATEWAY=192.168.47.254
DNS1=114.114.114.114
- 修改克隆机主机名,以下以 hadoop102 举例说明
修改主机名称
[root@hadoop100 ~]# vim /etc/hostname
hadoop102
配置 Linux 克隆机主机名称映射 hosts 文件,打开/etc/hosts
[root@hadoop100 ~]# vim /etc/hosts
添加如下内容
192.168.47.100 hadoop100
192.168.47.101 hadoop101
192.168.47.102 hadoop102
192.168.47.103 hadoop103
192.168.47.104 hadoop104
192.168.47.105 hadoop105
192.168.47.106 hadoop106
192.168.47.107 hadoop107
192.168.47.108 hadoop108
- 重启克隆机 hadoop102
[root@hadoop100 ~]# reboot
四,在 hadoop102 安装 JDK
-
用 XShell 传输工具将 JDK 导入到 opt 目录下面的 software 文件夹下面
-
在 Linux 系统下的 opt 目录中查看软件包是否导入成功
[xumx@hadoop102 ~]$ ls /opt/software/
- 解压 JDK 到/opt/module 目录下
[xumx@hadoop102 software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
- 配置 JDK 环境变量
新建/etc/profile.d/my_env.sh 文件
[xumx@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh
添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
source 一下/etc/profile 文件,让新的环境变量 PATH 生效
[xumx@hadoop102 ~]$ source /etc/profile
- 测试 JDK 是否安装成功
[xumx@hadoop102 ~]$ java -version
如果能看到版本信息,则代表 Java 安装成功
四,在 hadoop102 安装 Hadoop
- 用 XShell 文件传输工具将 hadoop-3.1.3.tar.gz 导入到 opt 目录下面的 software 文件夹下面
- 进入到 Hadoop 安装包路径下
[xumx@hadoop102 ~]$ cd /opt/software/
- 解压安装文件到/opt/module 下面
[xumx@hadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
- 查看是否解压成功
[xumx@hadoop102 software]$ ls /opt/module/
hadoop-3.1.3
- 将 Hadoop 添加到环境变量
获取 Hadoop 安装路径
[xumx@hadoop102 hadoop-3.1.3]$ pwd
/opt/module/hadoop-3.1.3
打开/etc/profile.d/my_env.sh 文件
[xumx@hadoop102 hadoop-3.1.3]$ sudo vim /etc/profile.d/my_env.sh
在 my_env.sh 文件末尾添加如下内容:
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
让修改后的文件生效
[xumx@hadoop102 hadoop-3.1.3]$ source /etc/profile
- 测试是否安装成功
[xumx@hadoop102 hadoop-3.1.3]$ hadoop version
Hadoop 3.1.3
- 重启
[xumx@hadoop102 hadoop-3.1.3]$ sudo reboot
五,SSH 无密登录配置
- ssh 连接时出现 Host key verification failed 的解决方法
[xumx@hadoop102 ~]$ ssh hadoop103
如果出现如下内容
Are you sure you want to continue connecting (yes/no)?
输入 yes,并回车
- 退回到 hadoop102
[xumx@hadoop103 ~]$ exit
- 生成公钥和私钥
[xumx@hadoop102 .ssh]$ pwd
/home/xumx/.ssh
[xumx@hadoop102 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
- 将公钥拷贝到要免密登录的目标机器上
[xumx@hadoop102 .ssh]$ ssh-copy-id hadoop102
[xumx@hadoop102 .ssh]$ ssh-copy-id hadoop103
[xumx@hadoop102 .ssh]$ ssh-copy-id hadoop104
这样hadoop102上配置好了xumx账号无密登录到 hadoop102、hadoop103、hadoop104 服务器上。
还需要在 hadoop103 上采用 atguigu 账号配置一下无密登录到 hadoop102、hadoop103、hadoop104 服务器上。
还需要在 hadoop104 上采用 atguigu 账号配置一下无密登录到 hadoop102、hadoop103、hadoop104 服务器上。
还需要在 hadoop102 上采用 root 账号,配置一下无密登录到 hadoop102、hadoop103、hadoop104;
六,编写集群分发脚本 xsync
- 在 hadoop102、hadoop103、hadoop104 都已经创建好的/opt/module、 /opt/software 两个目录,并且已经把这两个目录修改为 xumx:xumx
[xumx@hadoop102 ~]$ sudo chown xumx:xumx -R /opt/module
- 在 hadoop102 上,将 hadoop102 中/opt/module/jdk1.8.0_212 目录拷贝到hadoop103, hadoop104上。
[xumx@hadoop102 ~]$ scp -r /opt/module/jdk1.8.0_212 xumx@hadoop103:/opt/module
[xumx@hadoop102 ~]$ scp -r /opt/module/jdk1.8.0_212 xumx@hadoop104:/opt/module
- 在 hadoop102 上,将 hadoop102 中/opt/module/hadoop-3.1.3 目录拷贝到hadoop103, hadoop104 上。
[xumx@hadoop102 ~]$ scp -r /opt/module/hadoop-3.1.3 xumx@hadoop103:/opt/module
[xumx@hadoop102 ~]$ scp -r /opt/module/hadoop-3.1.3 xumx@hadoop104:/opt/module
- xsync 集群分发脚本
在/home/xumx/bin 目录下创建 xsync 文件
[xumx@hadoop102 opt]$ cd /home/xumx
[xumx@hadoop102 ~]$ mkdir bin
[xumx@hadoop102 ~]$ cd bin
[xumx@hadoop102 bin]$ vim xsync
在该文件中编写如下代码
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
修改脚本 xsync 具有执行权限
[xumx@hadoop102 bin]$ chmod +x xsync
测试脚本
[xumx@hadoop102 ~]$ xsync /home/atguigu/bin
将脚本复制到/bin 中,以便全局调用
[xumx@hadoop102 bin]$ sudo cp xsync /bin/
同步环境变量配置(root 所有者)
[xumx@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh
让环境变量生效
[xumx@hadoop103 bin]$ source /etc/profile
[xumx@hadoop104 bin]$ source /etc/profile
七,集群配置
- 核心配置文件,配置 core-site.xml
[xumx@hadoop102 ~]$ cd /etc/hadoop
[xumx@hadoop102 hadoop]$ vim core-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>xumx</value>
</property>
</configuration>
- HDFS 配置文件,配置 hdfs-site.xml
[xumx@hadoop102 hadoop]$ vim hdfs-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
- YARN 配置文件,配置 yarn-site.xml
[xumx@hadoop102 hadoop]$ vim yarn-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
- MapReduce 配置文件,配置 mapred-site.xml
[xumx@hadoop102 hadoop]$ vim mapred-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 在集群上分发配置好的 Hadoop 配置文件
[xumx@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
- 去 103 和 104 上查看文件分发情况
[xumx@hadoop103 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[xumx@hadoop104 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
- 群起集群
配置 workers
[xumx@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容:
hadoop102
hadoop103
hadoop104
同步所有节点配置文件
[xumx@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
- 启动集群
如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode
[xumx@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
启动 HDFS
[xumx@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
在配置了 ResourceManager 的节点(hadoop103)启动 YARN
[xumx@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
- 结果查看
Web 端查看 HDFS 的 NameNode
浏览器中输入:http://hadoop102:9870 ,查看 HDFS 上存储的数据信息
Web 端查看 YARN 的 ResourceManager
浏览器中输入:http://hadoop103:8088 ,查看 YARN 上运行的 Job 信息
编写集群启停脚本(包含 HDFS,Yarn,Historyserver)myhadoop.sh
[xumx@hadoop102 ~]$ cd /home/xumx/bin
[xumx@hadoop102 bin]$ vim myhadoop.sh
输入如下内容:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop 集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop 集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
保存后退出,然后赋予脚本执行权限
[xumx@hadoop102 bin]$ chmod +x myhadoop.sh
查看三台服务器 Java 进程脚本:jpsall
[xumx@hadoop102 ~]$ cd /home/atguigu/bin
[xumx@hadoop102 bin]$ vim jpsall
输入如下内容
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
保存后退出,然后赋予脚本执行权限
[xumx@hadoop102 bin]$ chmod +x jpsall
分发/home/xumx/bin 目录,保证自定义脚本在三台机器上都可以使用
[xumx@hadoop102 ~]$ xsync /home/xumx/bin/
到此hadoop配置完成。