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任务
相关推荐
莫叫石榴姐5 分钟前
SQL进阶技巧:如何根据工业制程参数计算良品率?
数据库·python·sql·机器学习·数据分析·线性回归
黑客老李21 分钟前
面试经验分享 | 杭州某安全大厂渗透测试岗二面
大数据·服务器·数据库·经验分享·安全·面试·职场和发展
zmd-zk42 分钟前
shuffle——spark
大数据·分布式·python·学习·spark
数新网络42 分钟前
《深入浅出Apache Spark》系列⑤:Spark SQL的表达式优化
大数据·sql·spark
dashexiaobudian1 小时前
海外媒体宣发对品牌出海的多维影响-大舍传媒
大数据·人工智能·搜索引擎·区块链
lovelin+v175030409662 小时前
智能化API:如何重塑企业业务流程与用户体验
大数据·人工智能·爬虫·python·api
SeaTunnel2 小时前
Apache SeaTunnel 集群部署详细教程
大数据
sinat_307021532 小时前
大数据法律法规——《网络安全等级保护条例》(山东省大数据职称考试)
大数据·安全
小白学大数据3 小时前
ScrapySharp下载器:配置代理以访问受限网站
开发语言·网络·python·数据分析·php