Hadoop其七,MapReduce的收尾,Yarn的介绍,和历史日志

目录

一、MapReduce收尾

二、Yarn介绍

三、Yarn的历史日志配置【可选项】

1、jobHistory

2、timeline(时间轴服务)--了解


一、MapReduce收尾

1、如果启动集群发现某个节点的服务没有启动,如何解决?

如果启动集群,发现某个节点比如bigdata02中的datanode没有启动,怎么办?

方案:查看日志,看错误是什么?

2、修改完成后,可以单独启动某个服务:

复制代码
hadoop-daemon.sh start namenode	
新的命令是什么? hdfs --daemon start namenode
hadoop-daemon.sh start secondarynamenode
hadoop-daemon.sh start datanode

yarn --daemon start resourcemanger
yarn --daemon start nodemanger

3、main方法后面的 args数组有何作用?

复制代码
package com.bigdata.day12.workcount;

import java.util.Arrays;

/**
 * @Author laoyan
 * @Description TODO
 * @Date 2022/8/3 9:47
 * @Version 1.0
 */
public class Demo01 {

    public static void main(String[] args) {
        System.out.println(Arrays.toString(args));
        System.out.println(args[0]);
        System.out.println(args[1]);
    }
}

服务器上怎么办?没有idea

需要使用jar命令:

复制代码
hadoop jar wc.jar com.bigdata.day12.workcount.Demo01 /input /output

通过以上方式给args传递数据。
如果是纯java项目如何运行你的jar包?
java -jar xxxxx.jar  Main方法的全路径  Main方法的参数

4、目前学了哪些端口,分别是什么?

复制代码
3306   mysql连接的端口
22     windows连接linux,进行sftp访问的端口
9870   hdfs页面访问的端口号  http://192.168.32.128:9870
9820   hdfs的通讯端口        hdfs://192.168.32.128:9820  
       两个地方见过:java操作hdfs的时候,昨天mapreduce访问hdfs的时候
8088   yarn平台通过web访问的端口号  http://192.168.32.128:8088

二、Yarn介绍

1、理论

复制代码
    Apache YARN(Yet another Resource Negotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于一个分布式的操作系统平台,而MapReduce等计算程序则相当于运行于操作系统之上的应用程序。
	YARN被引入Hadoop2,最初是为了改善MapReduce的实现,但是因为具有足够的通用性,同样可以支持其他的分布式计算模式,比如Spark,Tez等计算框架。
复制代码
大数据技术大致分为四代:
1、MapReduce                (淘汰)
2、MapReduce的升级版(Tez)  (淘汰)
3、Spark(一系列的技术)  目前正在流行  运行比较快
4、Flink   正在悄悄的流行起来,代表未来(流行起来了,阿里巴巴购买的)-- 实时即未来

2、组成部分

复制代码
ResourceManager:
是在系统中的所有应用程序之间管理资源的最终权威,即管理整个集群上的所有资源分配,内部含有一个Scheduler(资源调度器)
NodeManager:
是每台机器的资源管理器,也就是单个节点的管理者,负责启动和监视容器(container)资源使用情况,并向ResourceManager及其 Scheduler报告使用情况.
container:
即集群上的可使用资源,包含cpu、内存、磁盘、网络等(虚拟机,或者Docker)
AppMaster(项目经理):
实际上是框架的特定的库,每启动一个应用程序,都会启动一个AM,它的任务是与ResourceManager协商资源,并与NodeManager一起执行和监视任务。

3、Yarn的工作流程(重点)--重要程度和mr是一样的

复制代码
1. 调用waitForCompletion方法每秒轮询作业的进度,内部封装了submit()方法,用于创建JobCommiter实例,并且调用其的submitJobInternal方法。提交成功后,如果有状态改变,就会把进度报告到控制台。错误也会报告到控制台。

2. JobCommiter实例会向ResourceManager申请一个新应用ID,用于MapReduce作业ID。这期间JobCommiter也会进行检查输出路径的情况,以及计算输入分片。

3. 如果成功申请到ID,就会将运行作业所需要的资源(包括作业jar文件,配置文件和计算所得的输入分片元数据文件)上传到一个用ID命名的目录下的HDFS上。此时副本个数默认是10.

4. 准备工作已经做好,再通知ResourceManager调用submitApplication方法提交作业。

5. ResourceManager调用submitApplication方法后,会通知Yarn调度器(Scheduler),调度器分配一个容器,在节点管理器的管理下在容器中启动 application master进程。

6. application master的主类是MRAppMaster,其主要作用是初始化任务,并接受来自任务的进度和完成报告。

7. 然后从HDFS上接受资源,主要是split。然后为每一个split创建MapTask以及参数指定的ReduceTask,任务ID在此时分配

8. 然后Application Master会向资源管理器请求容器,首先为MapTask申请容器,然后再为ReduceTask申请容器。

9. 一旦ResourceManager中的调度器(Scheduler),为Task分配了一个特定节点上的容器,Application Master就会与NodeManager进行通信来启动容器。

10. 运行任务是由YarnChild来执行的,运行任务前,先将资源本地化(jar文件,配置文件,缓存文件)

11. 然后开始运行MapTask或ReduceTask。

12. 当收到最后一个任务已经完成的通知后,application master会把作业状态设置为success。然后Job轮询时,知道成功完成,就会通知客户端,并把统计信息输出到控制台

三、Yarn的历史日志配置【可选项】

1、jobHistory

为什么要配置日志呢?原因是因为我们的任务不一定每次都是成功的,如果失败了,需要查阅日志,发现日志有没有配置。

复制代码
我们在YARN运行MapReduce的程序的时候,任务会被分发到不同的节点,在不同的Container内去执行。如果一个程序执行结束后,我们想去查看这个程序的运行状态呢?每一个MapTask的执行细节?每一个ReduceTask的执行细节?这个时候我们是查看不到的,因此我们需要开启记录历史日志的服务。

我的日志是分散在多台电脑上的,如果任务失败了,每个节点只记录自己的那一部分,我们需要去各个节点上查阅日志,效率太低了,将这些日志聚合在一起就好了。所以我们还需要配置日志聚合服务。

复制代码
历史日志服务开启之后,Container在运行任务的过程中,会将日志记录下来,保存到当前的节点。例如: 在bigdata02节点上开启了一个Container去执行MapTask,那么此时就会在bigdata02的$HADOOP_HOME/logs/userlogs中记录下来日志。我们可以到不同的节点上去查看日志。虽然这样可以查看,但是很不方便!因此,我们一般还会开启另外的一个服务: 日志聚合。顾名思义,就是将不同节点的日志聚合到一起保存起来。

配置:

复制代码
<!-- 添加如下配置 -->

<!-- 历史任务的内部通讯地址 -->
<property>
  <name>MapReduce.jobhistory.address</name>
  <value>bigdata01:10020</value>
</property>

<!--历史任务的外部监听页面-->
<property>
  <name>MapReduce.jobhistory.webapp.address</name>
  <value>bigdata01:19888</value>
</property>

<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=/opt/installs/hadoop</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=/opt/installs/hadoop</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=/opt/installs/hadoop</value>
</property>

<!-- 添加如下配置 -->

<!-- 是否需要开启日志聚合 -->
<!-- 开启日志聚合后,将会将各个Container的日志保存在yarn.nodemanager.remote-app-log-dir的位置 -->
<!-- 默认保存在/tmp/logs -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>

<!-- 历史日志在HDFS保存的时间,单位是秒 -->
<!-- 默认的是-1,表示永久保存 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

<property>
    <name>yarn.log.server.url</name>
    <value>http://bigdata01:19888/jobhistory/logs</value>
</property>

将mapred-site.xml 和yarn-site.xml 分发到其他两台上。

复制代码
cd /usr/local/hadoop/etc/hadoop/
xsync.sh mapred-site.xml yarn-site.xml

重启yarn服务:

复制代码
stop-dfs.sh
start-dfs.sh
还要记得启动history服务:
mapred --daemon start historyserver
复制代码
运行一个yarn的任务,随便一个即可:

hadoop jar /opt/installs/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /home/wc.txt /home/output4

访问我的yarn平台:http://192.168.32.128:8088

会看到一个运行的任务,点击这个任务就可以查看日志了:

点完之后,发现不管用,你可以查看一下你的URL是什么?

因为windows电脑上,压根不知道bigdata01 对应的IP是多少。所以访问不了。

在Linux上我们知道bigdata01对应的IP是多少,因为我们配置了hosts文件。

此时需要修改windows上的 hosts文件。为了更加方便的修改windows上的hosts,可以使用一个工具:

SwitchHosts。

先关闭电脑上的各种杀毒软件,因为有一种病毒是专门修改hosts文件的。

右键,以管理员身份运行这个软件。否则修改不了。

修改完之后,就可以点击logs 链接了。

也可以直接修改host文件,地址在:

复制代码
C:\Windows\System32\drivers\etc

2、timeline(时间轴服务)--了解

配置日志信息。

JobHistory服务,只针对于MR应用程序,Spark,Tez等这样的服务,是无法看到日志的。

这个工具或者服务,不仅可以查看MapReduce,还可以查看Spark应用程序的日志。

复制代码
目前位置,Timeline Server有V1、V1.5、V2三种版本,其中V2的版本正在测试中,功能尚不完善,且后端依赖HBase。所以目前我们以V1.5的版本为例。

<property>
<name>yarn.timeline-service.enabled</name>
<value>true</value>
</property>

<property>
<name>yarn.resourcemanager.system-metrics-publisher.enabled</name>
<value>true</value>
</property>

<property>
<name>yarn.timeline-service.generic-application-history.enabled</name>
<value>true</value>
</property>

<property>
<name>yarn.timeline-service.hostname</name>
<value>bigdata01</value>
</property>

<property>
<name>yarn.timeline-service.bind-host</name>
<value>bigdata01</value>
</property>

<property>
<name>yarn.timeline-service.http-cross-origin.enabled</name>
<value>true</value>
</property>

<property>
<name>yarn.timeline-service.ttl-enable</name>
<value>true</value>
</property>

<!-- 保存35天 -->
<property>
<name>yarn.timeline-service.ttl-ms</name>
<value>3024000000</value>
</property>

<!-- 设置log server地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://bigdata01:8188/applicationhistory/logs</value>
</property>

将yarn-site.xml 分发到其他两台电脑上。

复制代码
重启yarn服务:
stop-yarn.sh
start-yarn.sh
// 记得启动我们的时间轴服务:
yarn --daemon start timelineserver

访问地址:http://192.168.32.128:8188

如何查看日志呢?

复制代码
记得演示一个mapreduce任务
相关推荐
EasyNTS12 分钟前
ONVIF/RTSP/RTMP协议EasyCVR视频汇聚平台RTMP协议配置全攻略 | 直播推流实战教程
大数据·网络·人工智能·音视频
Start_Present12 分钟前
Pytorch 第十四回:神经网络编码器——变分自动编解码器
pytorch·python·深度学习·神经网络·数据分析
Apache Flink19 分钟前
Lalamove基于Flink实时湖仓演进之路
大数据·flink
范桂飓31 分钟前
案例分析:东华新径,拉动式生产的智造之路
大数据·人工智能
杨超越luckly1 小时前
HTML应用指南:利用GET请求获取全国汉堡王门店位置信息
大数据·前端·信息可视化·数据分析·html
中科岩创1 小时前
高支模自动化监测解决方案
大数据·网络·物联网·自动化
D愿你归来仍是少年2 小时前
基于Python脚本实现Flink on YARN任务批量触发Savepoint的实践指南
大数据·运维·flink
腾讯云开发者2 小时前
支付系统设计入门:核心账户体系架构
大数据·人工智能
IT成长日记2 小时前
【Hadoop入门】Hadoop生态之Oozie简介
大数据·hadoop·分布式
界面开发小八哥2 小时前
支持iOS与Android!SciChart开源金融图表库助力高效开发交易应用
android·ios·数据分析·数据可视化·图表工具·scichart