hadoop集群部署之集群配置(三)

集群节点布置方案

在这里插入图片描述
我会按照以上表格的表格进行集群节点的布置。
关于以上的节点是什么意义,请看第一篇所讲的基础内容,这里只做简单的说明:
HDFS层面
DataNode:具体的存储节点
NameNode:可理解为管理整个存储的目录,也就是哪个文件存到了具体的哪个DataNode上
SecondaryNameNode:对NameNode的备份,防止挂掉

Yarn层面
NodeManager:具体的资源管理节点
ResourceManager:总的资源管理节点

最后再强调一点内容,就是标红色的节点不能布置到同一台服务器上,因为红色的节点相对耗费资源,所以通常都会分开到不同的服务器进行布置。

有了以上的的说明,下面我们只需要按照表格进行集群的配置就行了。

配置文件

关于HDFS,Yarn以及其他任何的配置,都是在hadoop下的etc文件下进行管理,这里有所有的配置文件
在这里插入图片描述

HDFS的配置

按照最开始的表格,分配节点。

核心文件的配置:core-site.xml
打开core-site.xml,修改为:


<configuration>
        <!-- 指定NameNode的地址 -->
        <property>
                <name> fs.defaultFS</name>
                <value>hdfs://hadoop100:8020</value>
        </property>

        <!-- 指定hadoop数据的存储目录 -->
        <property>
                <name> hadoop.tmp.dir</name>
                <value>/opt/module/hadoop-3.2.2/data</value>
        </property>

        <!-- 配置HDFS网页登录使用的静态用户为leon -->
        <property>
                <name> hadoop.http.staticuser.user</name>
                <value>leon</value>
        </property>
</configuration>

下面做个简单说明:
fs.defaultFS是作为hdfs内部的通讯地址为hadoop100:8020,而不是我们网页的通信地址

hadoop.tmp.dir:指定文件存储位置为/opt/module/hadoop-3.2.2/data, 这个data文件夹是我们具体存储数据的地方,目前这个data文件夹还没有建立,也不需要我们自己建立,等我们利用初始化命令时,就会自从创建。

**hadoop.http.staticuser.user:**当我们访问hdfs网页时,默认是用leon用户登录,当然你的是什么用户,你就设置什么用户。

hdfs-site.xml配置
打开hdfs-site.xml,修改为:


<configuration>
        <!-- nn web 端访问地址 -->
        <property>
                <name>dfs.namenode.http-address</name>
                <value>hadoop100:9870</value>
        </property>

        <!-- 2nn web端访问地址 -->
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>hadoop99:9868</value>
        </property>

</configuration>

下面做个简单说明:

dfs.namenode.http-address:这里其实已经就是指定了namenode节点布置在hadoop100服务器上,并且设置了网页访问端口为9870
在这里插入图片描述

dfs.namenode.secondary.http-address:指定了SecondaryNameNode是在hadoop99服务器上,并提供了网页访问端口为9868.
在这里插入图片描述

到这里hdfs已经设置完毕了,可能有人会问为什么没有设置DataNode,你可以认为DataNode是默认所有服务器都要有的,所以并不需要指定。这里有一个问题埋下,那就是既让DataNode要在所有服务器上布置,那系统又是如何知道这所有的服务器到底有多少台?是哪几台呢?

Yarn的配置

同样也是按照最开始的表格,分配节点。

yarn-site.xml文件配置
打开yarn-site.xml,修改为:


<!-- Site specific YARN configuration properties -->

        <!-- 指定MR走shuffle -->
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <!-- 指定ResourceManager的地址-->
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>hadoop98</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.nodemanager.aux-services:**指定MR走shuffle
**yarn.resourcemanager.hostname:**指定ResourceManager节点布置在hadoop98,
**yarn.nodemanager.env-whitelist:**指定一系列环境变量
至于为什么没有配置NodeManager,其实和DataNode节点的问题是一样的,因为真个集群上的所有服务器都要配置,所以并不需要指定,只是有和DataNode同样的疑问?如何知道所有的服务器。

注:以上并没有设置yarn的网页访问地址,但是其实是有的,默认为8088
在这里插入图片描述

MapReduce的配置

mapred-site.xml文件配置
打开mapred-site.xml,修改为:


<configuration>

        <!-- 指定MapReduce程序运行在Yarn上 -->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

下面做个简单说明:
**mapreduce.framework.name:**这里其实及时指定mapreduce是建立在yarn之上,是通过yarn进行具体的计算分配和控制。

works配置

遗留问题的陈述和解决
在hdfs和 yarn的配置中,关于DataNode和NodeManager,虽然不用特意配置,因为它是默认要布置到所有服务器上的,但是一个集群到底有几台服务器呢?3台?五台?,如果是3台,是哪三台呢?
所以虽然不指定DataNode和NodeManager的布置位置,但是一定要指定这个集群包含那几台服务器。

workers文件配置
打开workers文件,修改为:

hadoop100
hadoop99
hadoop98

只要在这里指定集群包含那几台服务器,就解决以上遗留的问题了。

集群初始化

遗留问题陈述和解决
在之前配置hdfs时,指定了具体的文件存储在data文件夹中,但是这个文件夹之前是没有的,在之前我说,是不用我们自己创立的,所以这里的初始化就是解决创建data文件夹的问题。

在hadoop100上运行初始化

hdfs namenode format

初始化结束后,会自动创建data文件夹和logs文件夹,

历史服务器配置

首先说明一下,最开始我们表格中只有hdfs和yarn,我们在集群的配置中,其实配置那两个也就够了。
为什么还要配置历史服务器呢,其实就是为了问题出现时,能够从历史服务器中找到问题所在。
mapred-site.xml文件配置
打开mapred-site.xml,添加如下内容:


        <!-- 历史服务器端地址 -->
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>hadoop100:10020</value>
        </property>
        <!-- 历史服务器web端地址 -->
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>hadoop100:19888</value>
        </property>

下面做个简单说明:
mapreduce.jobhistory.address:指定历史服务器的内部通信地址为hadoop100:10020
mapreduce.jobhistory.webapp.address:指定历史服务器的网页通信地址为hadoop100:19888,以后就可以登录这个地址,在网页上查看历史信息,
在这里插入图片描述
或者你也可以在yarn的网页上进行访问,当我们每提交一个任务时,运行完成后就会看到历史的按钮
在这里插入图片描述

**问题:**假如我们运行时出现错误,这时候我们已经配置了历史服务器,所以就可以打开历史服务器的地址,去查看问题所在,但是这时候,我们只是配置了历史服务器,但是这些错误是要在运行日志中的,这些日志是在每一台服务器中产生的,我们要能查看到这些日志,就需要对这些日志进行收集,然后才能进行查看。

日志的据集配置

yarn-site.xml文件配置
打开yarn-site.xml,添加如下内容:


        <!-- 开启日志聚集功能 -->
        <property>
                <name>yarn.log-aggregation-enable</name>
                <value>true</value>
        </property>
        <!-- 设置日志聚集服务器地址-->
        <property>
                <name>yarn.log.server.url</name>
                <value>http://hadoop100:19888/jobhistory/logs</value>
        </property>
        <!-- 设置日志保留时间为7天-->
        <property>
                <name>yarn.log-aggregation.retain-seconds</name>
                <value>604800</value>
        </property>

下面做个简单说明:
yarn.log-aggregation-enable:开启日志聚集功能
yarn.log.server.url:设置日志聚集服务器地址为/hadoop100:19888/jobhistory/logs,以后就可以用在这地址,在网页上查看到日志
在这里插入图片描述
在这里插入图片描述

文件同步

以上几个小节,所有的配置都是在hadoop100上完成,我们需要同步到其他的两台服务器上,利用hadoop集群部署之ssh免密登录安装(二)中讲的同步分发文件进行同步到其他两台服务器

xsync /opt/module/hadoop-3.2.2

集群启动

以上已经对配置文件做了修改,也已经同步到集群内的所有服务器上,所以下面就是如何启动了。

所有关于集群的启停命令,都是在hadoop下的sbin文件夹下
在这里插入图片描述

1.启动hdfs(你NameNode布置在哪一台服务器上,就在哪个服务器上启动,我这里是hadoop100)

leon@hadoop100:/opt/module/hadoop-3.2.2/sbin$ start-dfs.sh

2.启动yarn(你ResourceManager布置在哪一台服务器上,就在哪个服务器上启动,我这里是hadoop98)

leon@hadoop98:/opt/module/hadoop-3.2.2/sbin$ start-yarn.sh

3.启动历史服务(通常在NameNode配置的服务器上进行启动)

leon@hadoop100:/opt/module/hadoop-3.2.2/sbin$ mapred --daemon start historyserver

这样真个集群就启动起来了,就已经可以使用啦。

问题补充

停止命令

1.hdfs的服务停止

dfs.sh/stop dfs.sh

2.yarn服务停止

yarn.sh/stop yarn.sh

3.历史服务器停止

mapred --daemon stop historyserver

又是并不需要整个集群进行启停,这个浪费时间,因为有时会出现某个服务器上的某个节点崩溃,那我们只需要跳转到具体服务器,启动具体的(hdfs或者yarn)节点。

4.分别启停HDFS组件

hdfs daemon start/stop namenode/datanode/secondarynamenode

4.分别启停Yarn组件

yarn daemon start/stop resourcemanager/nodemanager

编写启停脚本

前面讲的,需要每条指令输入进行启停控制,为了方便,这里写一个脚本,方便运行,以后就只需要运行一个脚本,就实现所有服务的启停。

将文件myhadoop放到之前xsync的同一个目录(/home/bin/)

        echo " ========================================= 启动hadoop集群 ================================================"
        echo "--------------------------------------------- 启动hdfs -------------------------------------------------"
        ssh hadoop100 "/opt/module/hadoop-3.2.2/sbin/start-dfs.sh"
        echo "------------------------------------------- 启动yarn ------------------------------------------------------"
        ssh hadoop98 "/opt/module/hadoop-3.2.2/sbin/start-yarn.sh"
        echo "------------------------------------- 启动historyserver ------------------------------------------------------"
        ssh hadoop100 "/opt/module/hadoop-3.2.2/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " ========================================= 关闭hadoop集群 ================================================"
        echo "----------------------------------------- 关闭historyserver ---------------------------------------------"
        ssh hadoop100 "/opt/module/hadoop-3.2.2/bin/mapred --daemon stop historyserver"
        echo "------------------------------------------- 关闭yarn ------------------------------------------------------"
        ssh hadoop98 "/opt/module/hadoop-3.2.2/sbin/stop-yarn.sh"
        echo "------------------------------------- 关闭hdfs ------------------------------------------------------"
        ssh hadoop100 "/opt/module/hadoop-3.2.2/sbin/stop-dfs.sh"
;;
*)
        echo "Input Args Error..."
;;
esac

以上脚本不做过多的陈述,就是将所有的指令放到一个文件中,以后:
启动真个集群服务myhadoop start
停止真个集群服务myhadoop stop

JAVA_HOME未找到

这个问题有的人会出现,有的人不会出现,如果出现了,那就修改etc文件夹下的hadoop-env.sh文件,添加一行

export JAVA_HOME=/opt/module/jdk1.8.0_301

这样问题就解决了。

关于hadoop的集群配置就到这里了,当然对于hadoop生态来说,这只是基础,后续的hive,spark都是在这个基础上建立的,后面再慢慢记录。

Guess you like

Origin blog.csdn.net/weixin_41885239/article/details/119424166