Apache Kylin : Analytical Data Warehouse for Big Data
Welcome to Kylin Wiki.
1、背景
为了方便用户排查问题,kylin 会将运行过程中的日志都集中收集,包括构建和查询过程中 spark 产生的日志,由 kylin 的日志系统进行统一管理。
在之前的版本中,kylin 构建和查询过程中的日志都会被收集到 kylin.log,由于 kylin4 中使用 spark 作为构建引擎,所以构建过程中的日志就是 spark 任务的日志,包括 spark driver 和 spark executor 的日志;查询过程中的日志主要是 kylin4 中的查询引擎 sparder 的日志。
由于构建过程中的 spark 日志非常多,当这些日志与其他日志共同输出到 kylin.log 中时,会导致 kylin.log 文件占用很大的空间,并且内容混乱,不利于分析问题。为了解决这一问题,kylin4.0.0-beta 版本对构建过程的日志做了重构,经过重构,kylin4 中的构建日志会被从 kylin.log 中分离出来上传到 hdfs,这部分日志的 log4j 配置文件包括两个: ${KYLIN_HOME}/conf/spark-driver-log4j.properties 和 ${KYLIN_HOME}/conf/spark-executor-log4j.properties。
2、构建过程的 spark driver 日志
2.1 日志输出到 hdfs
spark-driver-log4j.properties 用于配置构建过程中 spark driver 日志的输出路径、appender、layout 等,默认情况下,一个构建任务的一个步骤的 spark driver 日志会被输出到 hdfs 的 一个文件中,该文件的路径由 kylin.env.hdfs-working-dir、kylin.metadata.url、project name、step id 等信息拼接而成,其中 step id 是由 job Id 和 00 开始计数的两位数字拼成,比如某个第一步的 step id 为 jobId-00,第二步的 step id 为 jobId-01,日志文件的具体路径为 ${kylin.env.hdfs-working-dir}/{kylin.metadata.url}/${project_name}/spark_logs/driver/${step_id}/execute_output.json.timestamp.log。
2.2 通过 WebUI 查看日志
用户可以通过 kylin 的 WebUI 上面的 Monitor 页面的 Job Output 查看日志,默认情况下,Output 只会展示该步骤全部日志的首尾 100 行的内容,如果需要查看全部日志,可以在 Output 弹窗的顶部点击 download the log file 来下载全部日志,然后该步骤的完整 spark driver 日志文件会被浏览器下载到本地。
2.3 日志输出到本地
如果用户不想将构建过程中 spark driver 的日志上传到 hdfs,那么可以更改 spark-driver-log4j.properties 中的配置项:
修改配置后重启 kylin,之后的构建任务过程中的一个任务的一个步骤的 spark driver 日志将会被输出到 ${KYLIN_HOME}/logs/spark/${step_id}.log 文件中。
3、构建过程的 spark executor 日志
3.1 日志输出到 hdfs
spark-executor-log4j.properties 用于配置构建过程中 spark executor 日志的输出路径、appender、layout 等,与 spark driver 日志类似,一个构建任务的一个步骤的 spark executor 日志会被输出到 hdfs 的一个文件夹中,这个文件夹下的每一个文件对应一个 executor 的日志,具体路径为 ${kylin.env.hdfs-working-dir}/{kylin.metadata.url}/${project_name}/spark_logs/executor/yyyy-mm-dd/${job_id}/${step_id}/executor-x.log
4、Troubleshooting
Kylin 需要将构建过程中的 spark executor 日志上传到 hdfs ,当 spark 任务被提交到 yarn 集群集群执行时,上传日志的用户可能是 yarn,这时 yarn 用户对于 hdfs 目录 ${kylin.env.hdfs-working-dir}/{kylin.metadata.url}/${project_name}/spark_logs 目录可能缺少写权限,导致 spark executor 日志上传失败,此时使用 yarn logs -applicationId <application ID> 查看任务日志会看到如下报错:
可以通过执行以下命令解决: