apache-spark - 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
总而言之,对于通常分配给 Spark 运行程序本身的任务(例如processElement()
),日志消息不会发送到 Google Cloud Console。我不确定这是与配置相关的问题还是完全其他问题。
解决方案
推荐阅读
- javascript - 使用 getUserMedia 在浏览器中录制 Blob 音频文件后损坏
- javascript - 我们可以测试元素文本是否包含带有 cypress 的 text_A 或 text_B 吗?
- java - 如何使用java流迭代具有索引的地图列表
- r - R中的ompr包优化问题出错
- javascript - 如何为构造函数中声明的类属性获取智能感知(在 vscode 中)
- sql - Oracle 11g 数据库缺少 Loadjava 实用程序
- javascript - 使用 Redux Reducer 修改嵌套状态
- java - 构造函数注入仅包含静态方法的类?
- php - 添加元素时数组跳过数字索引?
- reactjs - 将导航控件添加到我的谷歌地图