【发布时间】:2021-01-19 09:02:06
【问题描述】:
我目前正在通过 Spark Runner 将一些指标添加到在 Google Dataproc 上运行的现有管道中,并且我正在尝试确定如何访问这些指标并最终将它们公开给 Stackdriver(用于下游在 Grafana 仪表板中)。
指标本身相当简单(一系列计数器),并且是这样定义的(并在整个管道中的 DoFns 中访问):
object Metrics {
val exampleMetric: Counter = Metrics.counter(ExamplePipeline::class.qualifiedName, "count")
// Others omitted for brevity
}
此指标(和其他指标)在整个管道过程中在各种 DoFn 调用中递增,并且多个单元测试确认管道中的 MetricQueryResults 对象在通过 DirectRunner 执行后正确填充。
这里的主要问题是,我在 Dataproc 或 GCP 中公开的任何相关 UI(YARN ResourceManager、Spark History Server、YARN 应用程序时间线等)中没有看到这些指标正在发出的迹象强>。我已经尝试在日志和其他任何我可以搜索的地方进行搜索,但我没有看到这些自定义指标的任何迹象(或者实际上任何通常从 Spark 和/或 Stackdriver 发出的指标)。
工作配置
Spark 作业本身是通过脚本中的以下命令配置的(假设已将相应的 .jar 文件复制到 GCP 中的正确存储桶中:
gcloud dataproc jobs submit spark --jar $bucket/deployment/example-pipeline.jar \
--project $project_name \
--cluster $cluster_name \
--region $region \
--id pipeline-$timestamp \
--driver-log-levels $lots_of_things_here \
--properties=spark.dynamicAllocation.enabled=false \
--labels="type"="example-pipeline","namespace"="$namespace" \
--async \
-- \
--runner=SparkRunner \
--streaming
集群配置
集群本身似乎启用了我能想到的所有与指标相关的属性,例如:
dataproc:dataproc.logging.stackdriver.enable=true
dataproc:dataproc.logging.stackdriver.job.driver.enable=true
dataproc:dataproc.monitoring.stackdriver.enable=true
dataproc:spark.submit.deployMode=cluster
spark:spark.eventLog.dir=hdfs:///var/log/spark/apps
spark:spark.eventLog.enabled=true
yarn:yarn.log-aggregation-enable=true
yarn:yarn.log-aggregation.retain-seconds=-1
这些只是集群上的一些属性,但还有无数其他属性,因此如果其中一个似乎缺失或不正确(因为它与指标故事有关),请随时询问。
问题
- 这些指标似乎不是从 Spark(或 Stackdriver)自动发出或可见的,是否在集群/作业级别缺少一些配置?或者类似
MetricsOptions接口的东西? - 一旦我们实际发出了指标,我会假设 Stackdriver 有一种机制来处理从 DataProc 使用这些指标(这听起来就像
dataproc:dataproc.monitoring.stackdriver.enable=true会处理的那样)。是这样吗?
我不得不想象这是一个相当常见的用例(用于 Spark / Dataproc / Beam),但我不确定缺少配置难题的哪些部分,并且与此过程相关的文档/文章似乎相当稀少。
提前致谢!
【问题讨论】:
标签: apache-spark google-cloud-platform apache-beam google-cloud-dataproc google-cloud-stackdriver