安装部署

准备

1、创建安装目录

mkdir -p /e3base/e3-info/yarn/data1/local
mkdir -p /e3base/e3-info/yarn/data1/pids
mkdir -p /e3base/e3-info/yarn/data1/logs

2、YARN配置

hadoop的配置文件均处于/e3base/hadoop/etc/hadoop目录下。而对于YARN的安装部署文件也是在此目录之中,在该目录下对如下配置文件进行配置。

# 第一步,环境变量的配置
    # Hadoop环境变量的配置
    # hadoop
    export HADOOP_HOME=$IN_HOME/hadoop
    export PATH=$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH
  
# 第二步,yarn-env.sh文件配置(此处的配置与HDFS的配置一样)
    export JAVA_HOME=/e3base/jdk
    export HADOOP_HOME=/e3base/hadoop
    export E3_INFO_HOME=/e3base/e3-info
    export YARN_PID_DIR=$E3_INFO_HOME/hadoop/pids
    export YARN_LOG_DIR=$E3_INFO_HOME/hadoop/logs
    
# 第三步,yarn-site.xml文件配置
    <property>
        # 高可用ZK通信地址
        <name>yarn.resourcemanager.zk-address</name>       <value>dchao:11001,dchao01:11001,dchao02:11001</value>
    </property>
    <property>
        # YARN主管理节点地址
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>dchao01</value>
    </property>
    <property>
        # YARN备管理节点地址
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>dchao02</value>
    </property>
<property>
        # local使用来存储
     <name>yarn.nodemanager.local-dirs</name>
     <value>/e3base/e3-info/yarn/local</value>
 </property>
 <property>
        # 存储yarn上运行的日志
     <name>yarn.nodemanager.log-dirs</name>
     <value>/e3base/e3-info/yarn/logs</value>
 </property>
<!-- cpu and memory -->
    <property>
        # 最小内存分配资源
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>1024</value>
    </property>
    <property>
        # 最大分配的内存资源
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>1024</value>
    </property>
    <property>
        # 最小预分配的CPU资源
        <name>yarn.scheduler.minimum-allocation-vcores</name>
        <value>1</value>
    </property>
    <property>
        # 最大预分配的CPU资源
        <name>yarn.scheduler.maximum-allocation-vcores</name>
        <value>1</value>
    </property>
    <property>
        # 注意这里是nodemanager
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>1024</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>
        <value>1</value>
    </property>

# 第四步,fair-scheduler.xml配置文件
<?xml version="1.0"?>
<allocations>
  <queue name="root">
    <minResources>1024 mb, 1 vcores</minResources>
    <maxResources>1024 mb, 1 vcores</maxResources>
    <maxRunningApps>100</maxRunningApps>
    <weight>2.0</weight>
    <schedulingPolicy>fair</schedulingPolicy>
    <minSharePreemptionTimeout>2</minSharePreemptionTimeout>
    <aclSubmitApps>e3base e3base</aclSubmitApps>
    <aclAdministerApps>e3base e3base</aclAdministerApps>
    <queue name="default">
      <minResources>1024 mb, 1 vcores</minResources>
      <maxResources>1024 mb, 1024 vcores</maxResources>
      <schedulingPolicy>fair</schedulingPolicy>
      <aclSubmitApps>*</aclSubmitApps>
      <aclAdministerApps>*</aclAdministerApps>
    </queue>
  </queue>
</allocations>
注意:
    1、如默认default队列的资源量与root队列资源量相等,则上述文件的红色部分的值两处是一样的<maxResources>xxx mb, yyy vcores</maxResources>。
        xxx= yarn.nodemanager.resource.memory-mb* nodemanager的个数。
        yyy= yarn.nodemanager.resource.cpu-vcores * nodemanager的个数。
    2、default队列的资源量原则上要小于等于root队列资源量。

# 第五步,配置mapred-env.sh文件
export HADOOP_HOME=/e3base/hadoop
export E3_INFO_HOME=/e3base/e3-info
# HADOOP_MAPRED_LOG_DIR:MapReduce日志存放路径
export HADOOP_MAPRED_LOG_DIR=$E3_INFO_HOME/hadoop/logs

# 第六步,配置mapred-site.xml文件
<property>
    # MapReduce运行模式
    <name>mapreduce.framework.name</name>
     <value>yarn</value>
 </property>
 <property>
    # jobhistory服务主机名
    <name>mapreduce.jobhistory.hostname</name>
    <value>dchao02</value>
</property>
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>${mapreduce.jobhistory.hostname}:13021</value>
</property>
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>${mapreduce.jobhistory.hostname}:13022</value>
</property>
参数说明:
    1、mapreduce.framework.name: MapReduce运行模式(默认配置为yarn)

    2、mapreduce.jobhistory.hostname: jobhistory服务主机名

    3、mapreduce.jobhistory.address: MapReduce JobHistory Server通信地址,地址形式为 主机地址:端口。

    4、mapreduce.jobhistory.webapp.address: MapReduce JobHistory Server Web UI地址。通过web页面查看MR执行状态的地址

分发

之前配置HDFS时候,已经创建好文件夹,且安装过hadoop,先在向集群中的其他主机进行分发,只需要将修改的文件进行分发即可。

for i in dchao0{1..2};do scp -r /e3base/hadoop/etc/hadoop $i:/e3base/hadoop/etc/;done;
# 注意
    1、进行分发的之后,目标机器中的地址是分发文件的上一级
    2、我们想要在一个循环中分发多个文件,只能是写多个scp进行分发,不可以在一个scp中写多个文件
    3、粗暴的方式,直接将多个文件的上一级文件分发过去即可

启动

大数据集群的启动,最初是的任务就是zookeeper,其次是hdfs,然后是yarn。

zookeeper启动:每台机器都需要启动,启动命令:zkServer.sh start

hdfs启动:只有在第一次的时候需要进行初始化,只进行一次。后续就不需要了。启动命令:start-dfs.sh

yarn启动:启动命令:start-yarn.sh

查看状态

在启动完之后,可以查看。所有的服务有没有启动成功。
yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2

组件理解

YARN架构

YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成,

ResourceManager

1、处理客户端请求

2、监控NodeManager

3、启动、监控ApplicationMaster

4、资源的分配与调度

NodeManager

1、管理单个结点上的资源

2、处理来自ResourceManager的命令

3、处理来自ApplicationMaster的命令

Application

1、负责数据的切分

2、为应用程序申请资源并分配给内部的任务

3、任务的监控与容错

Container

Container是YARN中资源的抽象,封装了某个结点上多维度资源(内存、CPU、网络、磁盘)

YARN工作机制

0、Mr程序提交到客户端所在的结点

1、向ResourceManager申请一个Application

2、ResourceManager返回一个资源提交路径以及application_id

3、提交任务所需的资源

4、资源提交完毕,申请运行MrAppMaster

5、ResourceManager将用户的请求,初始化成一个Task

6、Task排进FIFO调度队列,等待NodeManager领取Task

7、领取到Task的NodeManager会创建容器Container(CPU+ram)

8、下载jos资源到本地

9、Container向ResourceManager申请Map Master容器

10、NodeManager领取到任务,创建Container

11、第一次创建的Container向后续创建的Container发送程序启动脚本

12、第一次创建的Container再次向ResourceManager申请容器用来运行Reduce Task

13、第二次申请下的Container向第三次申请的Container获取相应的分区的数据

14、当程序执行完毕后,第一次申请下的Container会向ResourceManager申请注销自己

问题

在安装yarn的时候,除了配置上的一些改变,基本上没有什么问题。需要注意的地方有:

1、yarn-env.sh文件配置中,配置yarn启动的日志等记录文件

export YARN_PID_DIR=$E3_INFO_HOME/e3-info/yarn/data1/pids
export YARN_LOG_DIR=$E3_INFO_HOME/e3-info/yarn/data1/logs

注意:
    在脚本中,有两个等号的地方

2、yarn-site.xml文件,注意配置文件中的目录文件写成绝对路径。以及内存、CPU资源的分配

1、注意全路径的书写
<property>
        # 存储yarn上运行的日志
     <name>yarn.nodemanager.log-dirs</name>
     <value>/e3base/e3-info/yarn/logs</value>
 </property>
 2、注意内存大小的分配,单位是M
<property>
        # 分配内存的大小
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>1024</value>
</property>
3、注意CPU资源的分配,理解的数字是 几核
<property>
        # 分配是几核
    <name>yarn.scheduler.minimum-allocation-vcores</name>
    <value>1</value>
</property>

出现的问题

image.png

# 报错日志信息
2021-09-10 12:17:08,763 INFO org.apache.hadoop.service.AbstractService: Service RMActiveServices failed in state STARTED
org.apache.hadoop.service.ServiceStateException: org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for /rmstore
# 分析解决
在配置文件中,存在ZKRMStateStore<的一个配置,注释掉即可

image.png

End

本文标题:Yarn

本文链接:https://www.tzer.top/archives/120.html

除非另有说明,本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

声明:转载请注明文章来源。

最后修改:2021 年 09 月 18 日
如果觉得我的文章对你有用,请随意赞赏