1.虚拟机环境搭建
1)安装必要环境包
sudo yum install -y epel-release
sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static
2)修改克隆虚拟机的静态IP
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
NAME="ens33"
IPADDR=192.168.58.100
PREFIX=24
GATEWAY=192.168.58.2
DNS1=192.168.58.2
3)查看Linux虚拟机的虚拟网络编辑器,编辑->虚拟网络编辑器->VMnet8
4)查看Windows系统适配器VMware Network Adapter VMnet8的IP地址
5)保证Linux文件中IP地址、Linux虚拟网络编辑器地址和Windows系统VM8网络IP地址相同。
6)修改主机名
sudo vim /etc/hostname
设置为hadoop100
7)配置主机名称映射,打开/etc/hosts
添加如下内容
192.168.58.100 hadoop100
192.168.58.101 hadoop101
192.168.58.102 hadoop102
192.168.58.103 hadoop103
192.168.58.104 hadoop104
192.168.58.105 hadoop105
192.168.58.106 hadoop106
192.168.58.107 hadoop107
192.168.58.108 hadoop108
i.修改window10的主机映射文件(hosts文件)
C:\Windows\System32\drivers\etc\hosts
右键记事本打开添加如下内容,切记不可有空格
192.168.58.100 hadoop100
192.168.58.101 hadoop101
192.168.58.102 hadoop102
192.168.58.103 hadoop103
192.168.58.104 hadoop104
192.168.58.105 hadoop105
192.168.58.106 hadoop106
192.168.58.107 hadoop107
192.168.58.108 hadoop108
atguigu ALL=(ALL) NOPASSWD:ALL
8)干掉防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
9)创建用户
useradd atguigu
passwd atguigu
10)重启虚拟机reboot
11)配置zhangsan拥有root权限
在root用户下输入命令
visudo
set:nu
找到91行下添加
atguigu ALL=(ALL) NOPASSWD:ALL
:wq 保存退出
su atguigu
切换到atguigu用户
12)在/opt目录下创建两个文件夹,并修改文件夹拥有者
sudo mkdir /opt/module /opt/software
sudo chown atguigu:atguigu /opt/module /opt/software
13)安装JDK
1.卸载现有的jdk
rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps
2.将jdk包导入到/opt/software文件夹下
3.解压jdk到/opt/module目录下
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
4.配置环境变量
#新建/etc/profile.d/my_env.sh文件
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
:wq保存退出
5.重启xshell窗口,让环境变量生效
6.测试jdk安装是否成功
java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
返回以上内容则安装成功
2.安装Hadoop
1.导入hadoop安装包到/opt/software/
2.解压安装文件到/opt/module下面
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
3. 将Hadoop添加到环境变量
sudo vim /etc/profile.d/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
4.测试安装是否成功
hadoop version
3.克隆3台虚拟机
准备3台客户机(关闭防火墙、静态ip、主机名称)
4.xsync集群分发脚本
cd /home/atguigu
mkdir bin
cd 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
1.修改脚本 xsync 具有执行权限
[atguigu@hadoop102 bin]$ chmod +x xsync
2.测试脚本
[atguigu@hadoop102 ~]$ xsync /home/atguigu/bin
3.将脚本复制到/bin中,以便全局调用
[atguigu@hadoop102 bin]$ sudo cp xsync /bin/
4.同步环境变量配置(root所有者)
[atguigu@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh
注意点:在sudo情况下使用xsync需搭配绝对路径使用
sudo ./bin/xsync /etc/profile.d/my_env.sh
5.配置免密
1.生成公钥和私钥
ssh-keygen -t rsa
按三下回车生成密钥
2.将公钥拷贝到要免密登录的目标机器上
在根目录下
ll -a
cd .ssh/
#生成公钥
ssh-copy-id hadoop102
#分发公钥
ssh-copy-id hadoop103
#分发公钥
ssh-copy-id hadoop104
cd.. 返回上级
xsync .ssh/ 分发钥匙
6.集群配置
集群部署规划
注意:NameNode和SecondaryNameNode不要安装在同一台服务器
注意:ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上
hadoop102 | hadoop103 | hadoop104 | |
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
(1)核心配置文件
cd $HADOOP_HOME/etc/hadoop
vim core-site.xml
配置core-site.xml
<configuration>
<property>
#配置hdfs默认的nomenode地址
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<property>
#配置hadoop数据存放路径为/opt/module/hadoop-3.1.3/data
<name>hadoop.data.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<property>
#HIVE兼容配置
<name>hadoop.proxyuser.atguigu.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.atguigu.groups</name>
<value>*</value>
</property>
</configuration>
配置hdfs-site.xml
vim hdfs-site.xml
<configuration>
<property>
#namenode存储数据的路径在hadoop.data.dir/name
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.data.dir}/name</value>
</property>
<property>
#datanode存储数据的路径在hadoop.data.dir/data
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.data.dir}/data</value>
</property>
<property>
#namesecondary存储数据的路径在hadoop.data.dir/namesecondary
<name>dfs.namenode.checkpoint.dir</name>
<value>file://${hadoop.data.dir}/namesecondary</value>
</property>
<property>
#HIVE兼容配置
<name>dfs.client.datanode-restart.timeout</name>
<value>30</value>
</property>
<property>
#配置2NN地址
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
配置yarn-site.xml
vim yarn-site.xml
<property>
#配置mapreduce使用shuffle
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
#配置resourcemanager所在节点
<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>
配置mapred-site.xml
vim mapred-site.xml
<property>
#配置mapreduce运行在yarn上
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
配置workers
vim workers
hadoop102
hadoop103
hadoop104
#配置hadoop从机
分发配置好的site文件到其它两台虚拟机hadoop103、hadoop104
cd ..
pwd
/opt/module/hadoop-3.1.3/etc
xsync /etc/
如果集群是第一次启动,需要格式化NameNode
hdfs namenode -format
namenode节点配置在了hadoop102所以在102上进行格式化
分别启动
hadoop102
start-dfs.sh
hadoop103
start-yarn.sh
配置历史服务器
配置mapred-site.xml
vim mapred-site.xml
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
配置日志的聚集
配置yarn-site.xml
vim yarn-site.xml
<property>
#ture开启日志聚集功能
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
#日志服务器地址
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
#日志保存时间1周
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
分发配置
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
启动历史服务器
mapred --daemon start historyserver
7.集群启停脚本
cd /home/atguigu/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
更改权限
chmod +x myhadoop.sh
查看三台服务器Java进程脚本:jpsall
vim jpsall
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
更改权限
chmod +x jpsall
分发脚本
xsync /home/atguigu/bin/
8.时间同步
1.查看是否安装ntpd
rpm -qa | grep ntp
2.查看ntpd运行状态
sudo systemctl status ntpd
ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
3.关闭所有节点上的ntpd
sudo systemctl stop ntpd
sudo systemctl disable ntpd
4.将hadoop102配置为时间服务器
sudo vim /etc/ntp.conf
将17行备注#取消,将网段改为虚拟机网段
17 #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
17 restrict 192.168.58.0 mask 255.255.255.0 nomodify notrap
将21-24行加上注释
21 server 0.centos.pool.ntp.org iburst
22 server 1.centos.pool.ntp.org iburst
23 server 2.centos.pool.ntp.org iburst
24 server 3.centos.pool.ntp.org iburst
21 #server 0.centos.pool.ntp.org iburst
22 #server 1.centos.pool.ntp.org iburst
23 #server 2.centos.pool.ntp.org iburst
24 #server 3.centos.pool.ntp.org iburst
增加两条属性
server 127.127.1.0
fudge 127.127.1.0 stratum 10
:wq保存退出
5.修改ntpd服务
sudo vim /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes
增加一条属性
# Command line options for ntpd
OPTIONS="-g"
SYNC_HWCLOCK=yes
6.重启ntpd
systemctl start ntpd
7.将ntpd设为开机自启
systemctl enable ntpd
8.hadoop103、hadoop104定期去hadoop102拉取时间(需在root用户下)每一分钟同步一次
crontab -e
*/1 * * * * /usr/sbin/ntpdate hadoop102