Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Apache Beam管道缺少度量(通过SparkRunner/Dataproc)_Apache Spark_Google Cloud Platform_Apache Beam_Google Cloud Dataproc_Google Cloud Stackdriver - Fatal编程技术网

Apache spark Apache Beam管道缺少度量(通过SparkRunner/Dataproc)

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

我目前正在通过Spark Runner向Google Dataproc上运行的现有管道添加一些指标,并试图确定如何访问这些指标,并最终将其公开给Stackdriver(在Grafana仪表板的下游使用)

度量本身相当简单(一系列计数器),定义也很简单(并通过管道在DOFN中访问):

在各种
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
    将处理的)。是这样吗
我不得不想象这是一个相当常见的用例(对于Spark/Dataproc/Beam),但我不确定哪些配置难题缺失,与此过程相关的文档/文章似乎非常稀少


提前感谢!

不幸的是,截至今天,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