spark基本原理介绍以及日志收集
1、Spark on yarn基本介绍
1.1 框架流程(以cluster模式为例)
- client提交spark应用程序给RM
- RM收到请求之后,会在集群中随机选择一个NM,为该应用程序分配第一个Container,然后在这个Container上启动AM
- AM启动driver,并初始化SparkContext
- AM启动时会向RM注册,并向RM申请资源用于Executor
- AM一旦申请到资源也就是Container之后,会在对应的Container(Container信息里面会包含NM节点信息)启动Executor
- executor启动后会向SparkContext注册,AM的SparkContext会分配任务集给Executor执行Task
1.2 yarn-client与yarn-cluster模式的差异点
- yarn-client
- driver在提交任务的节点启动,且不受YARN管控
- 默认driver的日志打印在console端,任务运行完无法找到,可通过修改properties文件重定向日志到文件中
- 用户生产环境中,如果客户端在集群外,则client模式下可能会由于“防火墙”的原因导致任务提交失败
- yarn-cluster
- driver启动在集群中的节点上(实质是am作为一个container启动,启动会会启动一个线程来调用用户的程序,从而完成driver的启动)
- 在driver启动后,客户端的提交任务的进程可以关闭,不会影响程序的运行, client将不会发挥其他任何作用,仅仅负责提交
1.3 Spark相关角色概念介绍
- Client:客户端进程,负责提交作业到Master。
- ApplicationMaster:负责应用的资源管理,根据应用的需要,向资源管理部门(ResourceManager)申请资源
- Driver:Application 的驱动线程。Driver通过运行Spark应用的main函数来执行应用,从应用开始执行到把Task提交到Executor端有很多步骤,这些步骤都在Driver端完成。Driver端会把应用进行编排,最终会生成一个个的Task,并提交给Executor去执行,当Task被提交到Executor端后,Driver会和Executor进行通信,实时监控执行状态
- Worker:Spark 的工作节点,用于执行提交的作业。在 YARN模式下 Worker 指的就是NodeManager 。
- ResourceManager:资源管理部门,负责整个集群的资源统一调度和分配
- Executor:Executor是执行Spark应用的容器,顾名思义,它的职责就是根据Driver端的要求来启动执行线程,执行任务,并返回执行结果。
1.4 Spark任务相关概念
- Task(任务):单个分区数据及上的最小处理流程单元。
- TaskSet(任务集):由一组关联的,但互相之间没有Shuffle依赖关系的任务所组成的任务集。
- Stage(调度阶段):一个任务集对应的调度阶段。
- Job(作业):有一个RDD Action生成的一个或多个调度阶段所组成的一次计算作业。
- Application(应用程序):Spark应用程序,由一个或多个job组成。
- Spark日志介绍
2.1 Spark UI (event log)
(1) 日志介绍
spark的jobHistory提供的一个可以直接在spark原生页面看到一个任务的执行情况,从spark的服务进入spark的webUI,然后根据具体的任务id,找到对应的 eventlog,有时候定位问题时候,收集到eventlog,上传到自己集群上,可以在本地查日志下载,eventlog有两种办法下载
- 通过sparkUI页面直接下载
然后进入spark页面,找到具体的app ID,右侧Download按钮
- 通过后台从hdfs上get:hdfs dfs –get 具体目录 本地目录
hdfs目录中spark1x对应的目录是:/sparkJobHistory, spark2x对应的目录是:/spark2xJobHistory2x
2.2 yarn日志
spark on yarn模式,有client模式和cluster模式,日志中包含如下信息:
任务基本信息(用户、队列等)
stderr:标准错误
stdout:标准输出
directory.info:配置文件、jar包加载信息
gc.log:gc日志
2.2.1 Driver日志:
- client模式下,driver直接运行在启动任务的节点上,可以在控制台,直接查看
- cluster模式下,driver日志存在于集群中的executor日志中,如下图:
spark的cluster模式中application日志就是driver日志,因此也可以在yarn的application日志中找到,如下图:
- Spark日志下载
3.1 Spark UI (event log)
eventlog有两种办法下载
a .通过sparkUI页面直接下载
然后进入spark页面,找到具体的app ID,右侧Download按钮
b 通过后台从hdfs上get:hdfs dfs –get 具体目录 本地目录
hdfs目录中spark1x对应的目录是:/sparkJobHistory, spark2x对应的目录是:/spark2xJobHistory2x
3.2 yarn日志
spark的driver和executor日志收集:
- 从hdfs上get:hdfs dfs –get /tmp/logs/任务提交用户名 /logs/任务ID /本地目录
- yarn具体日志页面右键另存为网页
3.对于正在运行的任务,需要使用:yarn logs -applicationId 任务id,或者只收某个executor的日志使用: yarn logs -containerId executor对于的containerId
- 点赞
- 收藏
- 关注作者
评论(0)