Spark on YARN 和 spark-bigquery 连接器

Posted

技术标签:

【中文标题】Spark on YARN 和 spark-bigquery 连接器【英文标题】:Spark on YARN and spark-bigquery connector 【发布时间】:2016-07-16 23:02:16 【问题描述】:

我使用 Spotify 的 spark-bigquery 连接器开发了一个 Scala Spark 应用程序,用于将数据直接流式传输到 Google BigQuery。

在本地它可以正常工作,我已经按照https://github.com/spotify/spark-bigquery 的描述配置了我的应用程序

val ssc = new StreamingContext(sc, Seconds(120))
val sqlContext = new SQLContext(sc)
sqlContext.setGcpJsonKeyFile("/opt/keyfile.json")
sqlContext.setBigQueryProjectId("projectid")
sqlContext.setBigQueryGcsBucket("gcsbucketname")
sqlContext.setBigQueryDatasetLocation("US")

但是当我在我的 Spark on YARN 集群上提交应用程序时,作业无法查找 GOOGLE_APPLICATION_CREDENTIALS 环境变量...

The Application Default Credentials are not available. They are available if running in Google Compute Engine. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials.

我将变量设置为 root 用户的 OS env var 到包含所需凭据的 .json 文件,但它仍然失败。

我也尝试过以下行

System.setProperty("GOOGLE_APPLICATION_CREDENTIALS", "/opt/keyfile.json")

没有成功。

知道我缺少什么吗?

谢谢,

莱昂纳多

【问题讨论】:

你能分享一些代码sn-ps吗? 我已经添加了一些代码,如果您需要更多,请告诉我... 【参考方案1】:

文档建议: “需要使用 conf/spark-defaults.conf 文件中的 spark.yarn.appMasterEnv.[EnvironmentVariableName] 属性设置环境变量。 spark-env.sh 中设置的环境变量在集群模式下不会反映在 YARN Application Master 进程中。”

【讨论】:

如果你不想编辑全局 conf 文件,也可以在提交作业时这样设置(如果在 YARN 上运行):spark-sumbit --conf spark.yarn.appMasterEnv.GOOGLE_APPLICATION_CREDENTIALS=/opt/keyfile.json .. jar

以上是关于Spark on YARN 和 spark-bigquery 连接器的主要内容,如果未能解决你的问题,请参考以下文章

Spark-on-YARN

3天掌握Spark-- Spark on YARN

Spark2x on yarn日志配置详解

Apache Spark支持三种分布式部署方式 standalonespark on mesos和 spark on YARN区别

Spark on yarn

Spark on yarn