Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 从google云中的spark workers获取日志输出_Apache Spark_Log4j_Google Cloud Platform_Yarn_Google Cloud Dataproc - Fatal编程技术网

Apache spark 从google云中的spark workers获取日志输出

Apache spark 从google云中的spark workers获取日志输出,apache-spark,log4j,google-cloud-platform,yarn,google-cloud-dataproc,Apache Spark,Log4j,Google Cloud Platform,Yarn,Google Cloud Dataproc,我正在google集群中运行一个spark作业,我试图在RDD映射过程中获取一些日志信息。快速示例: object LoggerWrapper extends Serializable{ @transient lazy val logger=Logger.getLogger("myLogger") } object Processing{ ... rdd.map(x=>{ LoggerWrapper.logger.info("processing:"+x)

我正在google集群中运行一个spark作业,我试图在RDD映射过程中获取一些日志信息。快速示例:

object LoggerWrapper extends Serializable{
    @transient lazy val logger=Logger.getLogger("myLogger")
}
object Processing{
 ...
    rdd.map(x=>{
       LoggerWrapper.logger.info("processing:"+x)
       foo(x)
    })
   ...
  sparkContext.stop
 }
我遵循所描述的方法,并结合找到的指导。结果log4j.properties是最后显示的一个。使用of
gcloud
命令(如下所示)的
--files
标志上载文件。我还更新了warn-site.xml文件,以便将属性
warn.log aggregation enable
设置为
true

我的第一个问题是,当我从主节点
warn logs-application
运行时,总是会收到错误消息“日志聚合未完成或未启用”。是否需要执行其他操作来收集消息

第二个问题是,是否可以在进程运行时获取控制台输出中所有工作人员的日志消息。例如,如果spark作业是流式作业,那么我希望在作业运行时获取消息

log4j.properties:

log4j.appender.myConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.myConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.myConsoleAppender.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.RollingAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingAppender.File=${spark.yarn.app.container.log.dir}/spark.log
log4j.appender.RollingAppender.DatePattern='.'yyyy-MM-dd
log4j.appender.RollingAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingAppender.layout.ConversionPattern=[%p] %d %c %M - %m%n

log4j.appender.RollingAppenderU=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingAppenderU.File=${spark.yarn.app.container.log.dir}/sparkU.log
log4j.appender.RollingAppenderU.DatePattern='.'yyyy-MM-dd
log4j.appender.RollingAppenderU.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingAppenderU.layout.ConversionPattern=[%p] %d %c %M - %m%n


# By default, everything goes to console and file
log4j.rootLogger=INFO, RollingAppender, myConsoleAppender

# My custom logging goes to another file
log4j.logger.myLogger=INFO, RollingAppenderU, myConsoleAppender

# The noisier spark logs go to file only
log4j.logger.spark.storage=INFO, RollingAppender
log4j.additivity.spark.storage=false
log4j.logger.spark.scheduler=INFO, RollingAppender
log4j.additivity.spark.scheduler=false
log4j.logger.spark.CacheTracker=INFO, RollingAppender
log4j.additivity.spark.CacheTracker=false
log4j.logger.spark.CacheTrackerActor=INFO, RollingAppender
log4j.additivity.spark.CacheTrackerActor=false
log4j.logger.spark.MapOutputTrackerActor=INFO, RollingAppender
log4j.additivity.spark.MapOutputTrackerActor=false
log4j.logger.spark.MapOutputTracker=INFO, RollingAppender
log4j.additivty.spark.MapOutputTracker=false
gcloud命令:
gcloud dataproc作业提交spark--cluster myCluster
--properties spark.driver.memory=1000m,spark.driver.maxResult=512m,spark.executor.memory=1000m--jars gs://path/to/jar/myJar.jar--files/absolute/path/to/local/file/log4j.properties
--类context.wikidata.spark.jobs.$1

正如您在中所看到的,检查日志聚合是否已启用在nodemanager代码中:

protected LogHandler createLogHandler(Configuration conf, Context context,
    DeletionService deletionService) {
  if (conf.getBoolean(YarnConfiguration.LOG_AGGREGATION_ENABLED,
      YarnConfiguration.DEFAULT_LOG_AGGREGATION_ENABLED)) {
    return new LogAggregationService(this.dispatcher, context,
        deletionService, dirsHandler);
  } else {
    return new NonAggregatingLogHandler(this.dispatcher, deletionService,
                                        dirsHandler,
                                        context.getNMStateStore());
  }
}
另外,在第一次创建
LogHandler
实例时,似乎是作为初始化的一部分完成的;这意味着必须将配置值提供给所有工作节点,并且必须在NodeManager启动/重新启动之前在配置中

在Dataproc中,您不需要自己手动修改
warn site.xml
文件,只需在创建集群时使用更简单的
--properties
标志,即可在启动守护程序服务之前在所有节点中正确设置配置键:

gcloud dataproc clusters create my-cluster \
    --properties yarn:yarn.log-aggregation-enable=true
此外,您还需要确保运行
纱线日志
命令,因为运行作业或纱线的同一用户将尝试查看日志聚合目录中错误的
$user
目录:

sudo yarn logs -applicationId <applicationId>
sudo纱线原木-applicationId

非常感谢您的回答!在流处理仍在运行的情况下,是否可以读取流作业中的自定义日志?目前最好的方法可能是通过,直接导航到容器日志,方法是单击正在运行的应用程序并在左侧找到指向容器日志的链接。有计划在未来继续改进Dataproc的Stackdriver集成,通过云日志UI可以访问容器日志,但具体日期尚未确定。