如何解决Dataproc中Apache Beam上的管道转换记录
最近,我部署了一个非常简单的Apache Beam管道,以了解其在Dataproc中(而不是在本地计算机上)执行的行为。我很快意识到,执行DoFn
或转换级别的日志后,没有像我期望的那样出现在Google Cloud Console的作业日志中,而且我也不完全确定可能会丢失什么。>
所有高级日志记录消息均按预期发出:
// 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运行程序执行的),但是有一种方法可以很容易地将内部转换显示为好?查看与此作业相关的日志时,我们可以看到当前存在的更高级别的日志记录,但没有提及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
总而言之,日志消息不会发送到Google Cloud Console,而通常会分配给Spark运行程序本身的任务(例如processElement()
)。我不确定这是与配置有关的问题还是其他所有问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。