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 连接器的主要内容,如果未能解决你的问题,请参考以下文章
Apache Spark支持三种分布式部署方式 standalonespark on mesos和 spark on YARN区别