CentOS7安装Hadoop集群

写在前面

  1. hadoop集群需要配置主机互信,配置方法见《CentOS7配置互信,实现SSH免密登录 》
  2. 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节点中

  1. 修改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>
  1. 修改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>
  1. 修改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冲突,需要注意下,启动的时候会影响NodeManagerResourceManager两个服务,本人采用如下方式处理

<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有个坑,见随笔的踩坑记录

  1. 修改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>
  1. 配置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

启动集群

  1. 如果是第一次启动,需要先格式化NameNode(在hadoop102节点)

注意:格式化NameNode,会产生新的集群ID,导致NameNode和DataNode的集群ID不一致,集群找不到以往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化
格式化命令:hdfs namenode -format

  1. 启动hadoop集群
    myhadoop.sh start

查看运行状态

jpsall

脚本见《“尚硅谷”的jpsall脚本》

结果正常如下,为433的架构
image

相关页面

hdfs页面:http://hadoop102:9870
yarn页面:http://hadoop103:8088
历史服务器:http://hadoop102:19888

posted @ 2022-04-06 17:58  CodingBugs  阅读(618)  评论(0编辑  收藏  举报