
第一种方法,我们可以在MapReduce任务查看页面找到这些日志
1在MapReduce任务查看页面找到任务,点击进入
2在任务详情页最下面由执行了该任务的节点
3在节点的web地址后面加上logs/userlogs就能看到application列表,选择自己要找的
4依次查看container
5从container进去之后就是最终要找的日志了
stderr:输出Systemerr输出的信息;
stdout:输出Systemout输出的信息
syslog:输出日志工具(比如Slf4j,log4j)输出的信息
可以看出通过管理页面查找sysout日志是十分麻烦的,而且mapper和reducer的日志不在一起,如果有多个reducer的话查看起来更是不方便
我们的代码(mapper,reducer)是放到了Yarn上面去执行,Yarn的日志存放地址是在yarn-envsh中配置的,如下
我们可以去节点上面查找;为了方便快捷 直接用脚本搞定
scanMRLogsh
if [ $# -le 0 ]
then
echo 缺少参数
exit 1
fi
# 从Hadoop的配置文件获取所有datanode
for n in `cat ${HADOOP_HOME}/etc/hadoop/slaves`
do
echo ===========查看节点 $n============
# 下面的 ~/logs/yarn 是在yarn-sitexml中设定的日志目录
ssh $n "cat ~/logs/yarn/userlogs/${1}/container_/out"
done
查看的时候只需要一行命令搞定,mapper,reducer里面的输出就都能看到了
# 命令中的appId从MRWeb管理端就能看到
sh testsh application_1479689852668_0197
其实网上就有,可以借鉴董西成的博客,下面是内容: Hadoop HDFS只有服务日志,与Hadoop MapReduce的服务日志类似; Hadoop MapReduce日志分为两部分,一部分是服务日志,一部分是作业日志,具体介绍如下: 1 Hadoop 1x版本 Hadoop 1x中MapRe。
在命令行查看任务日志
设置 yarnlog-aggregation-enable 为 true ,默认为 false 。日志聚合是 yarn 提供的日志中央化管理功能,收集每个容器的日志并将这些日志移动到文件系统中,比如 HDFS 上,方便用户查看日志。
yarnnodemanagerlogretain-seconds: 保存在本地节点的日志的留存时间, 默认值是 10800,单位:秒,即 3 小时。当开启日志聚合功能后,该配置无效。
yarnnodemanagerdeletedebug-delay-sec:默认值为 0,表示在开启日志聚合功能的情况下,应用完成后,进行日志聚合,然后 NodeManager 的 DeletionService 立即删除应用的本地日志。如果想查看应用日志,可以将该属性值设置得足够大(例如,设置为 600 = 10 分钟)以允许查看这些日志。
如何收集SparkSteaming运行日志实时进入kafka中
我是攻城师
用过sparkstreaming的人都知道,当使用sparkstreaming on yarn模式的时候,如果我们想查看系统运行的log,是没法直接看的,就算能看也只是一部分。
这里的log分:
(1)Spark本身运行的log
(2)代码里面业务产生的log
spark on yarn模式,如果你的Hadoop集群有100台,那么意味着你的sparkstreaming的log有可能会随机分布在100台中,你想查看log必须登录上每台机器上,一个个查看,如果通过Hadoop的8088页面查看,你也得打开可能几十个页面才能看到所有的log,那么问题来了?
能不能将这个job运行所有的log统一收集到某一个目录里面呢? 如果收集到一起的话排查log就非常方便了。
答案是很遗憾,在sparkstreaming里面没法做到,因为sparkstreaming程序永远不停机,就算你开启hadoop的log聚合也没用,只有当sparkstreaming程序停掉,hadoop的log聚合才能把所有的log收集到一个目录里面,所以其他的非sparkstreaming程序,比如MR,Spark 运行完后,如果开启log聚合,hadoop会负责把运行在各个节点上的log给统一收集到HDFS上,这样的话我们查看log就非常方便了。
现在的问题是sparkstreaming不能停机,那么还能集中收集log到指定的地方吗?答案是可以的,我们使用log4j收集日志然后异步发送至kafka里面,最后再通过logstash收集kafka里面的日志进入es即可,这样一条龙服务打通之后,出现任何异常都可以非常快和方便的在es中排查问题,效率提升。至于使用logstash从kafka收集到es里面,不是本文的重点,有兴趣的参考散仙前面的文章:>
在古老的 Hadoop10 中,MapReduce 的 JobTracker 负责了太多的工作,包括资源调度,管理众多的 TaskTracker 等工作。这自然是不合理的,于是 Hadoop 在 10 到 20 的升级过程中,便将 JobTracker 的资源调度工作独立了出来,而这一改动,直接让 Hadoop 成为大数据中最稳固的那一块基石。,而这个独立出来的资源管理框架,就是 Yarn 。
在详细介绍 Yarn 之前,我们先简单聊聊 Yarn ,Yarn 的全称是 Yet Another Resource Negotiator,意思是“另一种资源调度器”,这种命名和“有间客栈”这种可谓是异曲同工之妙。这里多说一句,以前 Java 有一个项目编译工具,叫做 Ant,他的命名也是类似的,叫做 “Another Neat Tool”的缩写,翻译过来是”另一种整理工具“。
Yarn原理图:
YARN 总体上是 master/slave 结构,在整个资源管理框架中,ResourceManager 为 master,NodeManager 是 slave。
YARN的基本组成结构,YARN 主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等几个组件构成。
ResourceManager是Master上一个独立运行的进程,负责集群统一的资源管理、调度、分配等等;
NodeManager是Slave上一个独立运行的进程,负责上报节点的状态;
ApplicationMaster相当于这个Application的监护人和管理者,负责监控、管理这个Application的所有Attempt在cluster中各个节点上的具体运行,同时负责向Yarn ResourceManager申请资源、返还资源等;
Container是yarn中分配资源的一个单位,包涵内存、CPU等等资源,YARN以Container为单位分配资源;
CDH上Yarn的组件信息:
jobhistory组件详细的记录了各类job运行的日志,需要查找报错信息一般是这边查看
Application在Yarn中的执行过程,整个执行过程可以总结为三步:
1Hadoop权威指南
2 >
1,yarn top: 类似linux里的top命令,查看正在运行的程序资源使用情况
2, yarn queue -status 队列名 :查看指定queue使用情况
3,yarn application -list -appStates ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUNNING,FINISHED,FAILED,KILLED
yarn application -list -appTypes [SUBMITTED, ACCEPTED, RUNNING] : 查看app状态
yarn application -movetoqueue application_name -queue 队列名 :移动app到对应的队列
yarn application -kill application_name : kill掉app
yarn application -status application_name :查看app状态
4,yarn applicationattempt -list application_name : 查看app尝试信息
5,yarn classpath --glob : 打印类路径
6,yarn container -list appattempt_name : 打印正在执行任务的容器信息
yarn container -status container_name : 打印当前容器信息
7,yarn jar [mainClass] args : 提交任务到yarn
8,yarn logs -applicationId application_name: 查看app运行日志
9,yarn node -all -list : 查看所有节点信息
10,yarn daemonlog -getlevel n0:8088 rgapachehadoopyarnserverresourcemanagerrmappRMAppImpl : 查看守护进程日志级别
11,yarn resourcemanager [-format-state-store] : RMStateStore的格式化 如果过去的应用程序不再需要,则清理RMStateStore
12, Usage: yarn rmadmin
-refreshQueues 重载队列的ACL,状态和调度器特定的属性,ResourceManager将重载mapred-queues配置文件
-refreshNodes 动态刷新dfshosts和dfshostsexclude配置,无需重启NameNode。
dfshosts:列出了允许连入NameNode的datanode清单(IP或者机器名)
dfshostsexclude:列出了禁止连入NameNode的datanode清单(IP或者机器名)
重新读取hosts和exclude文件,更新允许连到Namenode的或那些需要退出或入编的Datanode的集合。
-refreshUserToGroupsMappings 刷新用户到组的映射。
-refreshSuperUserGroupsConfiguration 刷新用户组的配置
-refreshAdminAcls 刷新ResourceManager的ACL管理
-refreshServiceAclResourceManager 重载服务级别的授权文件。
-getGroups [username] 获取指定用户所属的组。
-transitionToActive [–forceactive] [–forcemanual] 尝试将目标服务转为 Active 状态。如果使用了–forceactive选项,不需要核对非Active节点。如果采用了自动故障转移,这个命令不能使用。虽然你可以重写–forcemanual选项,你需要谨慎。
-transitionToStandby [–forcemanual] 将服务转为 Standby 状态 如果采用了自动故障转移,这个命令不能使用。虽然你可以重写–forcemanual选项,你需要谨慎。
-failover [–forceactive] 启动从serviceId1 到 serviceId2的故障转移。如果使用了-forceactive选项,即使服务没有准备,也会尝试故障转移到目标服务。如果采用了自动故障转移,这个命令不能使用。
-getServiceState 返回服务的状态。(注:ResourceManager不是HA的时候,时不能运行该命令的)
-checkHealth 请求服务器执行健康检查,如果检查失败,RMAdmin将用一个非零标示退出。(注:ResourceManager不是HA的时候,时不能运行该命令的)
-help [cmd]显示指定命令的帮助,如果没有指定,则显示命令的帮助。
==========================================
yarn application
1、-list 列出所有 application 信息
示例:yarn application -list
2、-appStates <States> 跟 -list 一起使用,用来筛选不同状态的 application,多个用","分隔;
所有状态:ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUNNING,FINISHED,FAILED,KILLED
示例:yarn application -list -appStates RUNNING
3、-appTypes <Types> 跟 -list 一起使用,用来筛选不同类型的 application,多个用","分隔;
如 MAPREDUCE
示例:yarn application -list -appTypes MAPREDUCE
4、-kill <Application ID> 杀死一个 application,需要指定一个 Application ID
示例:yarn application -kill application_name
5、-status <Application ID> 列出 某个application 的状态
示例:yarn application -status application_name
6、-movetoqueue <Application ID> 移动 application 到其他的 queue,不能单独使用
7、-queue <Queue Name> 与 movetoqueue 命令一起使用,指定移动到哪个 queue
示例:yarn application -movetoqueue application_name -queue other
右键 我的电脑/计算机/这台电脑>属性;进入高级系统设置>启动和故障恢复里的设置;取消勾选 将事件写入系统日志;在发生系统错误的时候,就不会有日志产生了。注:过多的系统日志说明电脑当前由于 硬件 or 软件 错误处在异常状态,关闭系统日志并不能根除 运行卡顿 的问题,推荐使用安全软件的系统修复功能,查看是否系统存在异常;另外推荐进入 控制面板\所有控制面板项\管理工具,点击 事件查看器,查看 错误 项的日志描述的是哪方面问题,方便对症下药。
在实际系统中,资源本身是多维度的,包括CPU、内存、网络I/O和磁盘I/O等,因此,如果想精确控制资源分配,不能再有slot的概念,最直接的方法就是是让任务直接向调度器申请自己需要的资源(比如某个任务可申请1GB 内存和1个CPU),而调度器则按照任务实际需求为其精细地分配对应的资源量,不再简单的将一个Slot分配给它,Hadoop 20正式采用了这种基于真实资源量的资源分配方案。
Hadoop 20最基本的设计思想是将JobTracker的两个主要功能,即资源管理和作业调度/监控分成两个独立的进程。全局的ResourceManager(RM)和与每个应用相关的ApplicationMaster(AM)。
ResourceManager(RM) :负责对各NM上的资源进行统一管理和调度。对AM申请的资源请求分配相应的空闲Container。将AM分配空闲的Container运行并监控其运行状态。主要由两个组件构成:调度器和应用程序管理器。
调度器(Scheduler) :调度器根据容量、队列等限制条件,将系统中的资源分配给各个正在运行的应用程序。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位是Container,从而限定每个任务使用的资源量。Shceduler不负责监控或者跟踪应用程序的状态,也不负责任务因为各种原因而需要的重启(由ApplicationMaster负责)。
调度器是可插拔的,例如CapacityScheduler、FairScheduler。
应用程序管理器(Applications Manager) :应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动AM、监控AM运行状态并在失败时重新启动等,跟踪分给的Container的进度、状态也是其职责。
NodeManager(NM) :NM是每个节点上的资源和任务管理器。它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;同时会接收并处理来自AM的Container 启动/停止等请求。
ApplicationMaster(AM) :用户提交的应用程序均包含一个AM,负责应用的监控,跟踪应用执行状态,重启失败任务等。AM是应用框架,它负责向RM协调资源,并且与NM协同工作完成Task的执行和监控。MapReduce就是原生支持的一种框架,可以在YARN上运行Mapreduce作业。有很多分布式应用都开发了对应的应用程序框架,用于在YARN上运行任务,例如Spark,Storm等。
Container :是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container 表示的。YARN会为每个任务分配一个Container且该任务只能使用该Container中描述的资源。
1)用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动AM的命令、用户程序等。
2)ResourceManager为该应用程序分配第一个Container,并与对应的Node Manager通信,要求它在这个Container中启动应用程序的AM。
3)AM首先向RM注册,这样用户可以直接通过RM查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
4)AM采用轮询的方式通过RPC协议向RM申请和领取资源。
5)一旦AM申请到资源后,便与对应的NM通信,要求它启动任务。
6)NM为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
7)各个任务通过某个RPC协议向AM汇报自己的状态和进度,以让AM随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向AM查询应用程序的当前运行状态。
8)应用程序运行完成后,AM向RM注销并关闭自己。
当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序:第一个阶段是启动AM;第二个阶段是由AM创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。
ResourceManager将某个NodeManager上资源分配给任务(资源调度)后,NodeManager需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基础的保证(资源隔离)。
内存资源
1)yarnnodemanagerresourcememory-mb 该节点上YARN可使用的物理内存总量:
假设我的这个节点上的内存有48G,其中25%是要给Linux的,而剩余的75%给大数据进程。其中,一般把DN和NM放置在同一个机器上(数据本地化)。默认的DN是给到4个G,而NM是给到3个G。(这两个参数分别是在hadoop-envsh和yarn-envsh两个shell脚本当中设置)。
我们的contanier最多也就可以用29个G了, yarnnodemanagerresourcememory-mb,当这个参数设置成剩余全部内存时意味着我们的NM在执行tasks的时候可以使用到29个G。
2)yarnschedulerminimum-allocation-mb 单个任务可申请的最少物理内存量:
一个contnaier最小将分配多少的G,我们生产上一般是设置成2个G,要是机器上剩余的内存达不到2个G,就不再在这个机器上开启container。
3)yarnschedulermaximum-allocation-mb 单个任务可申请的最多物理内存量
当一个container开启以后,在上面放置的task不是一下子就使用到最大内存极限的,一般会先个2个G(就是最小内存限制),如果不够了就是继续增加,直到最大内存限制,还不够就报错。所以最大内存设置一般和整个节点的contanier可用内存设置是一样大。
42 CPU资源
vcore:虚拟cpu,yarn自己引入的新概念,因为不同的物理core的性能不同,所以为了每个core的计算能力能一致点,这个时候设置了一个vcore。一般1个物理core对应2个vcore,也有公司是1:1的。
cpu同样也有三组参数:
yarnnodemanagerresourcecpu-vcores
yarnschedulerminimum-allocation-vcores
yarnschedulermaximum-allocation-vcores
三组默认值分别是8,1,8。假如物理core是8个话,要考虑究竟要个多少个core给大数据使用。如果是给了6个core预留2个core给其他进程,这样的vcore将有12个。
FIFO Scheduler把应用按提交的顺序排成一个队列,这是一个 先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。
FIFO Scheduler是最简单也是最容易理解的调度器,也不需要任何配置,但它并不适用于共享集群。大的应用可能会占用所有集群资源,这就导致其它应用被阻塞。在共享集群中,更适合采用Capacity Scheduler或Fair Scheduler,这两个调度器都允许大任务和小任务在提交的同时获得一定的系统资源。
从图中可以看出,在FIFO 调度器中,小任务会被大任务阻塞。
而对于Capacity调度器,有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。
在Fair调度器中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。如图所示,当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。
需要注意的是,在图Fair调度器中,从第二个任务提交到获得资源会有一定的延迟,因为它需要等待第一个任务释放占用的Container。小任务执行完成之后也会释放自己占用的资源,大任务又获得了全部的系统资源。最终的效果就是Fair调度器即得到了高的资源利用率又能保证小任务及时完成。
调度器的使用是通过yarn-sitexml配置文件中的 yarnresourcemanagerschedulerclass 参数进行配置的,默认采用Capacity Scheduler调度器。如果我们要使用Fair调度器,需要在这个参数上配置FairScheduler类的全限定名: orgapachehadoopyarnserverresourcemanagerschedulerfairFairScheduler 。
以上就是关于Linux中怎么用源地址统计日志和输出全部的内容,包括:Linux中怎么用源地址统计日志和输出、yarn logs命令在哪个目录下、Flink主节点如何访问工作节点日志等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)