测试环境
信息 | 内容 |
主机版本 | centos7 |
机器数量 | 3台 |
Hadoop版本 | 3.3.4 |
安装包解压路径 | /home/tools/hadoop/ |
hosts配置
主机ip地址 | 对应主机host |
192.168.57.188 | node1 |
192.168.57.189 | node2 |
192.168.57.190 | node3 |
一. 前置环境准备
- 安装JDK1.8(Hadoop支持1.8)
- 创建非root用户(这里用的myuser),配置三台服务器之间的免密登录
- 配置三台服务器使时间同步
安装工具
yum -y install ntp ntpdate
同步网络时间
ntpdate cn.pool.ntp.org
定时同步任务
crontab -e
*/30 * * * * ntpdate cn.pool.ntp.org > /dev/null 2>&1
二. 单主节点集群
1.解压安装包得到一个安装文件如下
2.修改配置文件路径为
cd /home/tools/hadoop/hadoop-3.3.4/etc/hadoop
需要修改的配置文件有5个
core-site.xml
hdfs-site.xmlyarn-site.xml
mapred-site.xml
hadoop-env.sh
配置文件修改后的内容如下
core-site.xml
<configuration>
<property><!--指定NameNode的地址-->
<name>fs.defaultFS</name>
<value>hdfs://node1:9820</value>
</property>
<property><!--指定Hadoop的数据目录-->
<name>hadoop.tmp.dir</name>
<value>/home/tools/hadoop/hadoop-3.3.4/data/temp</value>
</property>
<property><!--设置该myuser用户允许通过代理访问的主机节点-->
<name>hadoop.proxyuser.myuser.hosts</name>
<value>*</value>
</property>
<property><!--设置该myuser用户允许通过代理用户所属组-->
<name>hadoop.proxyuser.myuser.groups</name>
<value>*</value>
</property>
<property><!--设置HDFS网页登录使用的静态用户为myuser-->
<name>hadoop.http.staticuser.user</name>
<value>myuser</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property><!--NameNode的web访问地址-->
<name>dfs.namenode.http-address</name>
<value>node1:9870</value>
</property>
<property><!--备份NameNode的web访问地址-->
<name>dfs.namenode.secondary.http-address</name>
<value>node3:9870</value>
</property>
<property><!--副本hdfs备份数-->
<name>dfs.replication</name>
<value>1</value>
</property>
<property><!--块大小-->
<name>dfs.blocksize</name>
<value>67108864</value>
</property>
<property><!--NameNode文件保存路径-->
<name>dfs.namenode.name.dir</name>
<value>file:/home/tools/hadoop/hadoop-3.3.4/data/namenode</value>
</property>
<property><!--DataNode保存路径地址-->
<name>dfs.datanode.data.dir</name>
<value>file:/home/tools/hadoop/hadoop-3.3.4/data/datanode</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<property> <!--运行的任务超过内存的最大限制,可以将其任务停止-->
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property><!--指定MR走shuffle-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property><!--指定资源调度resourcemanager节点-->
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<property><!--一个job任务使用容器的最小内存-->
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>128</value>
</property>
<property><!--一个job任务使用容器的最大内存-->
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<property><!--yarn允许管理的物理内存大小-->
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property><!--yarn对物理内存的限制检查-->
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property><!--yarn对虚拟内存的限制检查-->
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>控制台输入hadoop classpath,将返回的内容Hadoop classpath路径写在这里</value>
</property>
<property><!--日志聚集功能,默认关闭-->
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property><!--日志聚集地址-->
<name>yarn.log.server.url</name>
<value>http://node1:19888/jobhistory/logs</value>
</property>
<property><!--日志保留时间 7日-->
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property><!--指定mapreduce使用yarn运行-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property><!--指定历史任务日志服务器地址-->
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>
<property><!--指定历史任务日志服务器web地址-->
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>
</configuration>
hadoop-env.sh
export JAVA_HOME=/tools/jdk/jdk1.8.0_261
export HADOOP_HOME=/home/tools/hadoop/hadoop-3.3.4
配置完成之后创建保存数据的目录
mkdir -p /home/tools/hadoop/hadoop-3.3.4/data/temp
mkdir -p /home/tools/hadoop/hadoop-3.3.4/data/namenode
mkdir -p /home/tools/hadoop/hadoop-3.3.4/data/datanode
3.分发安装包
将配置好的包分发到所有服务器中(如果目标服务器目录不存在,需要在目标服务器上创建目录)
scp -r /home/tools/hadoop/hadoop-3.3.4 node2:/home/tools/hadoop/
scp -r /home/tools/hadoop/hadoop-3.3.4 node3:/home/tools/hadoop/
在三台服务器中分别执行,给用户赋值安装包目录权限(如果数据目录在外部 也需要给数据目录赋值权限)
chown -R myuser:myuser /home/tools/hadoop/hadoop-3.3.4
分发和目录权限赋值可以直接使用脚本完成,脚本send.sh如下
#!/bin/bash
# 需要分发的服务器列表
hosts=(node2 node3)
# 需要发送的安装包目录
path=/home/tools/hadoop/hadoop-3.3.4
# 当前用户
user=myuser
parentDir=`dirname $path`
chown -R $user:$user $path
sum=${#hosts[*]}
index=0
for host in ${hosts[@]}
do
echo 剩余服务器 $(($sum-$index))
sleep 1
index=$(($index+1))
#创建目录
ssh $host "mkdir -p $parentDir"
#推送文件
scp -r $path $host:$parentDir
ssh $host "chown -R $user:$user $path"
done
分发命令
sh send.sh
执行结果如下
4.启动集群
切换myuser用户并且三台服务器之间已经配置了免密登录
在主节点NameNode中格式化集群 | hdfs namenode -format |
快速启动(版本3的datanode和nodemanagers不能全部启动,只能启动当前机器,所以需要去其他机器上挨着启动):
启动HDFS | <Hadoop_Home>/sbin/start-dfs.sh |
启动Yarn | <Hadoop_Home>/sbin/start-yarn.sh |
详细启动
启动NameNode | hdfs --workers --daemon start namenode |
启动DataNode | hdfs --workers --daemon start datanode |
启动副本NameNode | hdfs --workers --daemon start secondary |
启动ResourceManager | yarn --daemon start resourcemanager |
启动NodeManager | yarn --daemon start nodemanager |
启动MR历史日志服务 | mapred --daemon start historyserver |
三. HA集群