使用3台虚拟机模拟搭建生产环境
一、模板虚拟机创建
1.修改 IP 和主机名
#使用 root 用户
vim /etc/sysconfig/network-scripts/ifcfg-ens33
#在文件中修改 IP
TYPE="Ethernet" #网络类型(通常是Ethemet)
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" #IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="e83804c1-3257-4584-81bb-660665ac22f6" #随机id
DEVICE="ens33" #接口名(设备,网卡)
ONBOOT="yes" #系统启动的时候网络接口是否有效(yes/no)
#IP地址
IPADDR=192.168.10.100
#网关
GATEWAY=192.168.10.2
#域名解析器
DNS1=192.168.10.2
#重启网卡
systemctl restart network
#修改主机名
vim /etc/hostname
#在文件中修改
hadoop100
#配置IP和主机名的映射
vim /etc/hosts
#添加如下内容
192.168.10.100 hadoop100
2.配置虚拟机
-
检查网络是否通畅:
ping www.baidu.com
-
安装 epel-release(红帽系的软件仓库):
yum install -y epel-release
-
如果Linux安装的是最小系统版,还需要安装如下工具;如果安装的是Linux桌面标准版,不需要执行如下操作
#安装 net-tool:工具包集合,包含ifconfig等命令 [root@xxxxx ~]#yum install -y net-tools #安装 vim 编辑器 [root@xxxxx ~]#yum install -y vim
-
关闭防火墙,关闭防火墙开机自启
systemctl stop firewalld systemctl disable firewalld.service
-
创建普通用户并修改密码
#创建用户:user add [user_name] user add apple #修改密码:passwd [user_name] passwd apple
-
配置普通用户具有 root 权限,方便使用 sudo
vim /etc/sudoers #在文件中修改 #Allow root to run any commands anywhere root ALL=(ALL) ALL #Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL apple ALL=(ALL) NOPASSWD:ALL #一定要放在 %wheel 后
-
在 /opt 目录下创建两个目录并修改所属组和用户
#使用root用户 mkdir /opt/module mkdir /opt/software chown apple:apple /opt/module chown apple:apple /opt/software
-
卸载虚拟机自带的JDK:
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps #rpm -qa:查询所安装的所有rpm软件包 #grep -i:忽略大小写 #xargs -n1:表示每次只传递一个参数 #rpm -e –nodeps:强制卸载软件
-
重启虚拟机:
reboot
3.安装 JDK 和 Hadoop
3.1 安装 JDK
使用普通用户 apple 操作
- 解压安装包到指定目录:
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/ #-C 解压到指定目录
- 配置环境变量:
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
3.2 安装 Hadoop
-
解压安装包到指定目录:
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/ #-C 解压到指定目录
-
配置环境变量:
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
-
运行生效:
source /etc/profile
-
检测是否安装成功:
hadoop version
二、分布式集群搭建
1.三台虚拟服务器节点配置
- 在 VMware 中基于模板虚拟机 hadoop100 克隆出三台节点虚拟机
- 参照
一、模板虚拟机创建
中的修改三台虚拟机的 IP 和主机名vim /etc/hosts 192.168.10.102 hadoop102 192.168.10.103 hadoop103 192.168.10.104 hadoop104
- 在三台节点服务器之间配置 SSH 免密登录
#在 hadoop102 节点配置 #进入用户家目录 cd ~ #进入.ssh目录 cd .ssh #执行公钥和私钥生成命令 ssh-keygen -t rsa #将公钥拷贝发送到当前节点、hadoop103 和 hadoop104 ssh-copy-id hadoop102 ssh-copy-id hadoop103 ssh-copy-id hadoop104 #在 hadoop103 和 hadoop104 节点上按照上述过程分别操作
- 编写在三台节点服务器之间分发文件的脚本命令
#在 hadoop102 节点进入当前用户家目录 cd /home/apple #创建 bin 目录并进入 mkdir bin cd bin #创建分发命令脚本 vim xsync #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 #添加执行权限 chmod +x xsync #将脚本复制到/bin中,以便全局调用 sudo cp xsync /bin/ #使用自定义脚本命令同步环境变量配置到其他节点 sudo ./bin/xsync /etc/profile.d/my_env.sh #使环境变量生效 source /etc/profile
2.Hadoop集群搭建
2.1 集群规划
NameNode 和 SecondaryNameNode 不要配置在同一服务器
ResourceManager 不要和 NameNode、SecondaryNameNode 配置在同一服务器
模块 | hadoop102 | hadoop103 | hadoop104 |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
Yarn | NodeManager | ResourceManager NodeManager | NodeManager |
2.2 搭建操作
- 在 hadoop102 节点上按集群规划进行配置
#进入 hadoop 安装目录下的 core-site.xml 文件 cd /opt/module/hadoop-3.1.3/etc/hadoop vim core-site.xml #添加内容 <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>atguigu</value> </property> </configuration>
#进入 hadoop 安装目录下的 hdfs-site.xml 文件 cd /opt/module/hadoop-3.1.3/etc/hadoop vim hdfs-site.xml #添加内容 <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>
#进入 hadoop 安装目录下的 yarn-site.xml 文件 cd /opt/module/hadoop-3.1.3/etc/hadoop vim yarn-site.xml #添加内容 <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> <!--环境变量的继承,解决版本 bug --> <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>
#进入 hadoop 安装目录下的 mapred-site.xml 文件 cd /opt/module/hadoop-3.1.3/etc/hadoop vim mapred-site.xml #添加内容 <configuration> <!--指定MapReduce程序运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
- 使用自定义分发脚本命令将上述 hadoop 集群的配置分发到 hadoop103 和 hadoop104
cd /opt/module/hadoop-3.1.3 xsync /etc/hadoop/
3.Hadoop集群启动测试
3.1 配置文件添加集群
#在 hadoop102 节点上
cd /opt/module/hadoop-3.1.3/etc/hadoop
vim workers
#添加集群
hadoop102
hadoop103
hadoop104
#分发配置文件
xsync /opt/module/hadoop-3.1.3/etc/hadoop/workers
3.2 启动集群
- 首次启动,需要格式化 NameNode
#在 NameNode 所在的节点 hadoop102 上 hdfs namenode -format
- 启动 NameNode 服务
#hadoop102 cd /opt/module/hadoop-3.1.3/sbin ./start-dfs.sh
- 启动 ResourceManager 服务
#hadoop103 cd /opt/module/hadoop-3.1.3/sbin ./start-yarn.sh
- 查看服务是否启动:
jps
- 在浏览器查看 Web 服务:
http://hadoop102:9870(HDFS)、http://hadoop103:8088 (YARN)
3.3 历史服务器配置
- 开启历史服务器功能
cd /opt/module/hadoop-3.1.3/etc/hadoop 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> #分发配置 xsync /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml
- 开启日志聚集功能
cd /opt/module/hadoop-3.1.3/etc/hadoop vim yarn-site.xml #添加内容 <!--开启日志聚集功能 --> <property> <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> <!--设置日志保留时间为7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> #分发配置 xsync /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml
- 启动历史服务器
cd /opt/module/hadoop-3.1.3/bin mapred --daemon start historyserver
- 在浏览器查看历史服务器 web 端:
http://hadoop102:19888/jobhistory
3.4 自定义相关命令脚本
- 自定义 hadoop 集群启停脚本
#进入用户家目录下的 bin 目录 cd /home/apple/bin #创建集群启停脚本 vim myhadoop.sh #添加内容 #!/bin/bash if [ $# -lt1 ] 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 #分发脚本 xsync /home/apple/bin
- 自定义进程查看脚本
cd /home/apple/bin #创建进程查看脚本 vim jpsall #添加内容 #!/bin/bash for host in hadoop102 hadoop103 hadoop104 do echo =============== $host =============== ssh $host jps done #添加执行权限 chmod 777 jpsall #分发脚本 xsync /home/apple/bin
4. 集群的常用端口号和配置文件
4.1 常用端口号说明
端口名称 | Hadoop2.x | Hadoop3.x |
---|---|---|
NameNode内部通信端口 | 8020/9000 | 8020/9000/9820 |
NameNode HTTP UI | 50070 | 9870 |
Yarn查看执行任务端口 | 8088 | 8088 |
RM内部通信端口 | 8032 | |
历史服务器 Web 端口 | 19888 | 19888 |
历史服务器内部通信端口 | 10020 |
4.2 常用配置文件
Hadoop2.x | Hadoop3.x |
---|---|
core-site.xml | core-site.xml |
hdfs-site.xml | hdfs-site.xml |
yarn-site.xml | yarn-site.xml |
mapred-site.xml | mapred-site.xml |
slaves | workers |