准备三台虚拟机(hadoop01, hadoop02, hadoop03),虚拟机配置要求,单台虚拟机:内存4G,硬盘50G。要求三台机器可以免密登陆
三台机器的规划
hadoop01 | hadoop02 | hadoop03 | |
---|---|---|---|
HDFS | NameNode、DataNode | DataNode | SecondaryNameNode、DataNode |
YARN | NodeManager | ResourceManager、NodeManager | NodeManager |
所有虚拟机操作
安装必要环境
sudo yum install -y epel-release sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git
修改主机名称
sudo hostnamectl --static set-hostname hadoop01
关闭防火墙
sudo systemctl stop firewalld sudo systemctl disable firewalld
创建用户
sudo useradd fangxi sudo passwd fangxi
重启
reboot
配置fangxi用户具有root权限
vi sudo # 修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示 ## Allow root to run any commands anywhere root ALL=(ALL) ALL fangxi ALL=(ALL) ALL
创建操作文件夹,我在
/opt
下创建的sudo mkdir module sudo mkdir software
修改module、software文件夹的所有者cd
sudo chown fangxi:fangxi /opt/module /opt/software
至此单台虚拟机完成,可以创建快照克隆了。
操作hadoop02机器
安装jdk
下载地址:https://story-has-you.oss-cn-shanghai.aliyuncs.com/jdk-8u212-linux-x64.tar.gz
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/ # 环境变量 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.d/my_env.sh
安装hadoop
下载地址:https://story-has-you.oss-cn-shanghai.aliyuncs.com/hadoop-3.1.3.tar.gz
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module # 环境变量 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.d/my_env.sh
配置免密登录,三台机器都执行
ssh-keygen -t rsa ssh-copy-id 10.211.55.39 ssh-copy-id 10.211.55.40 ssh-copy-id 10.211.55.41
创建一个同步的脚本,以便以后在集群间共享文件
vim xsync
#!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍历集群所有机器 for host in 10.211.55.39 10.211.55.40 10.211.55.41 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 具有执行权限
chmod +x xsync
# 将脚本移动到/bin中,以便全局调用
sudo mv xsync /bin/
# 测试
xsync /bin/xsync
在集群之前拷贝jdk和hadoop
xsync jdk1.8.0_212/ xsync hadoop-3.1.3/
拷贝之后,需要在其他机器上执行
source /etc/profile.d/my_env.sh
至此,三台机器已经全部操作完毕
操作Hadoop01机器配置
配置hadoop,进入 /opt/module/hadoop-3.1.3/etc/hadoop
配置 core-site.xml
<!-- HDFS地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://10.211.55.40:8020</value> </property> <property> <name>hadoop.data.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> <property> <name>hadoop.proxyuser.fangxi.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.fangxi.groups</name> <value>*</value> </property> <property> <name>hadoop.http.staticuser.user</name> <value>fangxi</value> </property>
配置hdfs-site.xml
<property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.data.dir}/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file://${hadoop.data.dir}/data</value> </property> <property> <name>dfs.namenode.checkpoint.dir</name> <value>file://${hadoop.data.dir}/namesecondary</value> </property> <property> <name>dfs.client.datanode-restart.timeout</name> <value>30</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>10.211.55.41:9868</value> </property>
配置yarn-site.xml
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>10.211.55.41</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
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
配置workers,workers配置所有的从机
10.211.55.39 10.211.55.40 10.211.55.41
同步到其他机器
xsync hadoop/
启动集群
在hadoop01上执行
先格式化namenode
hdfs namenode -format
启动集群
start-dfs.sh
在hadoop03上执行, ResourceManager机器上
3. 启动YARN
start-yarn.sh
为了查看程序的历史运行情况,需要配置一下历史服务器(放在hadoop02)。具体配置步骤如下
- 配置mapred-site.xml
<!-- 历史服务器端地址 地址可以任意指定 --> <property> <name>mapreduce.jobhistory.address</name> <value>10.211.55.40:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>10.211.55.40:19888</value> </property>
配置日志的聚集,放在hadoop02
- 配置yarn-site.xml
<property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log.server.url</name> <value>http://10.211.55.40:19888/jobhistory/logs</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
最后全部分发配置
xsync hadoop/
在hadoop02上启动历史服务器
mapred --daemon start historyserver
启动成功之后,访问:http://10.211.55.40:9870/dfshealth.html#tab-overview
,访问:http://10.211.55.41:8088/cluster