Apache spark Apache Beam管道缺少度量(通过SparkRunner/Dataproc)
我目前正在通过Spark Runner向Google Dataproc上运行的现有管道添加一些指标,并试图确定如何访问这些指标,并最终将其公开给Stackdriver(在Grafana仪表板的下游使用) 度量本身相当简单(一系列计数器),定义也很简单(并通过管道在DOFN中访问): 在各种Apache spark Apache Beam管道缺少度量(通过SparkRunner/Dataproc),apache-spark,google-cloud-platform,apache-beam,google-cloud-dataproc,google-cloud-stackdriver,Apache Spark,Google Cloud Platform,Apache Beam,Google Cloud Dataproc,Google Cloud Stackdriver,我目前正在通过Spark Runner向Google Dataproc上运行的现有管道添加一些指标,并试图确定如何访问这些指标,并最终将其公开给Stackdriver(在Grafana仪表板的下游使用) 度量本身相当简单(一系列计数器),定义也很简单(并通过管道在DOFN中访问): 在各种DoFn调用中,此度量(和其他度量)在整个管道过程中递增,并且几个单元测试确认管道中的MetricQueryResults对象在通过DirectRunner执行后正确填充 这里的主要问题是,我看不到Datapr
DoFn
调用中,此度量(和其他度量)在整个管道过程中递增,并且几个单元测试确认管道中的MetricQueryResults
对象在通过DirectRunner
执行后正确填充
这里的主要问题是,我看不到Dataproc或GCP(纱线资源管理器、Spark History Server、纱线应用程序时间表等)中公开的任何相关UI中有任何迹象表明正在发布这些指标。我尝试过搜索日志和其他任何我可以搜索到的地方,但我没有看到这些定制指标的任何迹象(或者实际上任何指标通常都是从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
提前感谢!不幸的是,截至今天,Dataproc还没有针对Spark系统和自定义指标的StackDriver集成 可以通过配置
/etc/Spark/conf/metrics.properties
(您可以从/etc/Spark/conf/metrics.properties.template
复制)来启用Spark系统度量或者通过群集/作业属性。请参阅本文中的更多信息。在最好的情况下,您可以在群集中以CSV文件或HTTP服务的形式提供这些指标,但尚未与StackDriver集成
对于Spark定制度量,您可能需要实现您自己的源代码,如下图所示,然后它可以在集群中作为系统度量提供,如上所述
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