CentOS7安装Hadoop集群
写在前面
- hadoop集群需要配置主机互信,配置方法见《CentOS7配置互信,实现SSH免密登录 》
- hadoop不应该以root用户运行,会报错,但是有解决方案,应该指定一个非root账户来运行,在core-site.xml中体现
软件下载
这里附上hadoop-3.1.3.tar.gz
百度云下载地址,其它版本自行下载
解压缩
tar xzvf hadoop-3.1.3.tar.gz -C /opt/module
软件安装在哪里凭个人喜好
配置Hadoop环境变量
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 PAHT=$PATH:$HADOOP_HOME/sbin
刷新环境变量
source /etc/profile
验证
hadoop
会出来一堆命令,则安装成功
修改Hadoop配置
配置项均在
/opt/module/hadoop-3.1.3/etc/hadoop
下,均在下列文件中的configuration
节点中
- 修改core-site.xml
<!-- 指定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网页登录使用的静态用户为root -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>hadoop</value>
</property>
<!-- 配置该hadoop(superUser)允许通过代理访问的主机节点 -->
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<!-- 配置该hadoop(superUser)允许通过代理用户所属组 -->
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
<!-- 配置该hadoop(superUser)允许通过代理的用户 -->
<property>
<name>hadoop.proxyuser.hadoop.users</name>
<value>*</value>
</property>
- 修改hdfs-site.xml
<!-- 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>
- 修改yarn-site.xml
<!-- 指定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>
<!-- 环境变量的继承 -->
<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>
<!-- yarn容器允许分配的最大最小内存-->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<!-- yarn容器允许管理的物理内存大小-->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<!-- 关闭yarn对物理内存和虚拟内存的限制检查-->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!--开启日志聚集功能-->
<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>
这里yarn默认使用的两个端口8030和8040和
StarRock
冲突,需要注意下,启动的时候会影响NodeManager
和ResourceManager
两个服务,本人采用如下方式处理
<property>
<name>yarn.nodemanager.localizer.address</name>
<value>${yarn.nodemanager.hostname}:8041</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8034</value>
</property>
提供yarn所有配置说明
这边这样配置注意集成Spark有个坑,见随笔的踩坑记录
- 修改mapred-site.xml
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
- 配置workers文件
hadoop102
hadoop103
hadoop104
分发到集群的其它节点
xsync hadoop-3.1.3
xsync /etc/profile.d/my_env.sh
source /etc/profile
分发脚本见集群分发脚本
hadoop群起脚本
#!/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
启动集群
- 如果是第一次启动,需要先格式化NameNode(在hadoop102节点)
注意:格式化NameNode,会产生新的集群ID,导致NameNode和DataNode的集群ID不一致,集群找不到以往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化
格式化命令:hdfs namenode -format
- 启动hadoop集群
myhadoop.sh start
查看运行状态
jpsall
结果正常如下,为433的架构
相关页面
hdfs页面:http://hadoop102:9870
yarn页面:http://hadoop103:8088
历史服务器:http://hadoop102:19888