dataproc中apachebeam的流水线转换日志记录

r1zhe5dt  于 2021-05-19  发布在  Spark
关注(0)|答案(0)|浏览(246)

最近,我部署了一个非常简单的apachebeam管道来深入了解它在dataproc中执行时的行为,而不是在本地机器上执行时的行为。我很快意识到 DoFn 或者,转换级别的日志没有像我预期的那样出现在google云控制台的作业日志中,我也不完全确定可能缺少什么。
所有高级日志消息都按预期发出:

// This works
log.info("Testing logging operations...")

pipeline
    .apply(Create.of(...))
    .apply(ParDo.of(LoggingDoFn))

这个 LoggingDoFn 类是一个非常基本的转换,它发出遇到的每个值,如下所示:

object LoggingDoFn : DoFn<String, ...>() {
    private val log = LoggerFactory.getLogger(LoggingDoFn::class.java)

    @ProcessElement
    fun processElement(c: ProcessContext) {
        // This is never emitted within the logs
        log.info("Attempting to parse ${c.element()}")
    }
}

如评论中所详述的,我可以看到在 processElement() 调用(可能是因为这些调用是由spark runner执行的),但是有没有一种方法可以在内部转换中轻松地公开这些调用呢?当查看与此作业相关的日志时,我们可以看到更高级别的日志记录,但是没有提到来自 DoFn :

作业本身正在由以下程序执行 gcloud 命令,其中明确定义了驱动程序日志级别,但可能需要添加另一个日志级别或配置:

gcloud dataproc jobs submit spark --jar=gs://some_bucket/deployment/example.jar --project example-project --cluster example-cluster --region us-example --driver-log-levels com.example=DEBUG -- --runner=SparkRunner --output=gs://some_bucket/deployment/out

总而言之,对于通常分配给sparkrunner本身的任务(例如。 processElement() ). 我不确定这是否是一个配置相关的问题或其他完全。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题