-
准备相关软件及依赖
yum install -y epel-release yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git
-
关闭防火墙及其开机自启
systemctl stop firewalld systemctl disable firewalld
-
创建用户,并修改密码
useradd atguigu passwd atgui
-
配置atguigu用户root权限:到vim /etc/sudoers文件下修改配置
## Allow root to run any commands anywhere root ALL=(ALL) ALL atguigu ALL=(ALL) NOPASSWD:ALL
-
在/opt目录下创建文件夹,修改所属主和组
chown atguigu:atguigu /opt/module chown atguigu:atguigu /opt/software
-
卸载自带的open JDK
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
-
重启
reboot
-
修改各节点静态IP:修改/etc/sysconfig/network-scripts/ifcfg-ens33配置
保证Linux系统ifcfg-ens33文件中IP地址、虚拟网络编辑器地址和Windows系统VM8网络IP地址相同。
DEVICE=ens33 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static NAME="ens33" IPADDR=192.168.1.102 PREFIX=24 GATEWAY=192.168.1.2 DNS1=192.168.1.2
-
修改各节点主机名:修改/etc/hostname文件
#直接修改里面的内容 hadoop102
-
配置主机名映射hosts文件:/etc/hosts
192.168.1.100 hadoop100 192.168.1.101 hadoop101 192.168.1.102 hadoop102 192.168.1.103 hadoop103 192.168.1.104 hadoop104 192.168.1.105 hadoop105 192.168.1.106 hadoop106 192.168.1.107 hadoop107 192.168.1.108 hadoop108
-
重启
reboot
-
卸载现有JDK
rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps
-
将jdk1.8解压到指定路径
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
-
配置JDK环境变量:新建/etc/profile.d/my_env.sh文件,添加以下内容
#!/bin/bash #JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_212 export PATH=$PATH:$JAVA_HOME/bin
生效配置文件
source /etc/profile
-
测试是否安装成功
java -version
-
解压hadoop3.1.3到指定的路径下
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
-
配置Hadoop环境变量:配置/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
**secure copy:**可以实现服务器与服务器之间的数据拷贝。
基本语法:
#命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称 scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
举例
scp -r /opt/module/jdk1.8.0_212 atguigu@hadoop103:/opt/module1.2 rsync远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
**rsync和scp区别:**用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
基本语法
#命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称 rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname -a 归档拷贝 -v 显示复制过程
举例
rsync -av /opt/software/* atguigu@hadoop103:/opt/software1.3 集群分发脚本
my_rsync.sh
#!/bin/bash # 1.若未输入参数 if [ $# -lt 1 ] then echo "请输入要同步的路径或文件!" exit; fi # 2.遍历集群所有节点 for host in hadoop102 hadoop103 hadoop104 do # 3.遍历所有文件 for file in $@ do # 4. 判断要发送的文件是否存在 if [ -e $file ] then # 获取父目录绝对路径 pdir=$(cd -p $(dirname $file); pwd) # 获取当前文件名称 fname=$(basename $file) # 远程在其他节点上创建相同的路径 ssh $host "mkdir -p $pdir" # 同步文件 rsync -av $pdir/$fname $host:$pdir else echo "要同步的文件或路径不存在" fi done done2. 配置集群 2.1 SSH免密登录配置
原理
-
生成公钥和私钥
[atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa
一直敲回车,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
-
将公钥拷贝到目标机器上
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102 [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103 [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104
-
测试
ssh hadoop103
集群部署规划注意
- NameNode和SecondaryNameNode不要安装在同一台服务器
- ResourceManager不要和NameNode、SecondaryNameNode配置在同一台机器上。
配置集群
Hadoop的配置文件都存放在其$HADOOP_HOME/etc/hadoop/路径下
-
配置核心core-site.xml
fs.defaultFS hdfs://hadoop102:9820 hadoop.tmp.dir /opt/module/hadoop-3.1.3/data hadoop.http.staticuser.user atguigu hadoop.proxyuser.atguigu.hosts * hadoop.proxyuser.atguigu.groups * hadoop.proxyuser.atguigu.groups * -
配置HDFS hdfs-site.xml
dfs.namenode.http-address hadoop102:9870 dfs.namenode.secondary.http-address hadoop104:9868 -
配置Yarn yarn-site.xml
yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname hadoop103 yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME yarn.scheduler.minimum-allocation-mb 512 yarn.scheduler.maximum-allocation-mb 4096 yarn.nodemanager.resource.memory-mb 4096 yarn.nodemanager.pmem-check-enabled false yarn.nodemanager.vmem-check-enabled false -
配置MapReduce mapred-site.xml
mapreduce.framework.name yarn -
将配置好的文件分发到其群上的其他节点
my_rsync /opt/module/hadoop-3.1.3/etc/hadoop/
配置历史服务器
了查看程序的历史运行情况,需要配置一下历史服务器。
-
配置mapred-site.xml,添加以下内容
mapreduce.jobhistory.address hadoop102:10020 mapreduce.jobhistory.webapp.address hadoop102:19888 分发配置
my_rsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
-
启动历史服务器
mapred --daemon start historyserver
-
查看历史服务器:通过配置的端口
http://hadoop102:19888/jobhistory
配置日志聚集
应用运行完成以后,会将程序运行日志信息上传到HDFS系统上,方便的查看到程序运行详情来开发调试。
-
配置 yarn-site.xml,添加以下内容
yarn.log-aggregation-enable true yarn.log.server.url http://hadoop102:19888/jobhistory/logs yarn.log-aggregation.retain-seconds 604800 -
关闭NodeManager、ResourceManager(Yarn)和HistoryServer
stop-yarn.sh mapred --daemon stop historyserver
-
启动NodeManager、ResourceManager(Yarn)和HistoryServer
start-yarn.sh mapred --daemon start historyserver
-
查看日志:通过配置的端口
http://hadoop102:19888/jobhistory
集群第一次启动,则需要格式化NN;若集群运行过程报错需要格式化NN,则需要先停止NN和DN进程,然后删除data和logs目录再格式化。
- 因为格式化NN会产生新的集群ID,若不删除原来文件,会导致新的NN和DN的集群ID不一样。
hdfs namenode -format1.2 组件启停
-
分别启停HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
-
分别启停Yarn组件
yarn --daemon start/stop resourcemanager/nodemanager
-
整体启停HDFS组件
start-dfs.sh/stop-dfs.sh
-
整体启停Yarn组件
start-yarn.sh/stop-yarn.sh
#!/bin/bash if [ $# -lt 1 ] then echo "请输入操作命令!" exit fi case $1 in "start") echo " ====== 启动 hadoop集群 ======" echo " ------ 启动 hdfs ------" ssh hadoop102 "$HADOOP_HOME/sbin/start-dfs.sh" echo " ------ 启动 yarn ------" ssh hadoop103 "$HADOOP_HOME/sbin/start-yarn.sh" echo " ------ 启动 historyserver ------" ssh hadoop102 "$HADOOP_HOME/bin/mapred --daemon start historyserver" ;; "stop") echo " ====== 关闭 hadoop集群 ======" echo " ------ 关闭 historyserver ------" ssh hadoop102 "$HADOOP_HOME/bin/mapred --daemon stop historyserver" echo " ------ 关闭 yarn ------" ssh hadoop103 "$HADOOP_HOME/sbin/stop-yarn.sh" echo " ------ 关闭 hdfs ------" ssh hadoop102 "$HADOOP_HOME/sbin/stop-dfs.sh" ;; *) echo "输入参数错误!" ;; esac



