最近,我部署了一个非常简单的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()
). 我不确定这是否是一个配置相关的问题或其他完全。
暂无答案!
目前还没有任何答案,快来回答吧!