Apache spark 使用云SQL代理从Dataproc连接到云SQL

Apache spark 使用云SQL代理从Dataproc连接到云SQL,apache-spark,google-cloud-sql,google-cloud-dataproc,Apache Spark,Google Cloud Sql,Google Cloud Dataproc,我正在尝试通过云SQL代理(不使用配置单元)和Scala 2.11.12从Dataproc访问云SQL。在SO中也有类似的问题,但没有人能回答我面临的问题 我已经成功地将Dataproc连接到cloudsql,将spark.master置于“本地”模式,但是在使用“纱线”模式时,我遇到了一个异常,所以我肯定错过了一些东西。 我已经创建了GitHub repo,因此任何人都可以在本地进行测试,但您需要运行一个云SQL实例: 执行以下操作时,应用程序崩溃: SparkSession .build

我正在尝试通过云SQL代理(不使用配置单元)和Scala 2.11.12从Dataproc访问云SQL。在SO中也有类似的问题,但没有人能回答我面临的问题

我已经成功地将Dataproc连接到cloudsql,将spark.master置于“本地”模式,但是在使用“纱线”模式时,我遇到了一个异常,所以我肯定错过了一些东西。 我已经创建了GitHub repo,因此任何人都可以在本地进行测试,但您需要运行一个云SQL实例:

执行以下操作时,应用程序崩溃:

SparkSession
  .builder()
  .appName("SomeSparkJob")
  .getOrCreate() 
提交作业并执行上面的
.getOrCreate()
时,我会遇到异常:

Exception in thread "main" java.lang.NoSuchFieldError: ASCII
        at org.apache.hadoop.yarn.api.records.impl.pb.ApplicationSubmissionContextPBImpl.checkTags(ApplicationSubmissionContextPBImpl.java:287)
        at org.apache.hadoop.yarn.api.records.impl.pb.ApplicationSubmissionContextPBImpl.setApplicationTags(ApplicationSubmissionContextPBImpl.java:302)
        at org.apache.spark.deploy.yarn.Client$$anonfun$createApplicationSubmissionContext$2.apply(Client.scala:245)
        at org.apache.spark.deploy.yarn.Client$$anonfun$createApplicationSubmissionContext$2.apply(Client.scala:244)
        at scala.Option.foreach(Option.scala:257)
        at org.apache.spark.deploy.yarn.Client.createApplicationSubmissionContext(Client.scala:244)
        at org.apache.spark.deploy.yarn.Client.submitApplication(Client.scala:180)
        at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend.start(YarnClientSchedulerBackend.scala:57)
        at org.apache.spark.scheduler.TaskSchedulerImpl.start(TaskSchedulerImpl.scala:183)
        at org.apache.spark.SparkContext.<init>(SparkContext.scala:501)
        at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2520)
        at org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:935)
        at org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:926)
        at scala.Option.getOrElse(Option.scala:121)
        at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:926)
        at dev.ancor.somedataprocsparkjob.SomeSparkJob$.main(SomeSparkJob.scala:13)
        at dev.ancor.somedataprocsparkjob.SomeSparkJob.main(SomeSparkJob.scala)

线程“main”java.lang.NoSuchFieldError中的异常:ASCII 位于org.apache.hadoop.warn.api.records.impl.pb.ApplicationSubmissionContextPBImpl.checkTags(ApplicationSubmissionContextPBImpl.java:287) 位于org.apache.hadoop.warn.api.records.impl.pb.ApplicationSubmissionContextPBImpl.setApplicationTags(ApplicationSubmissionContextPBImpl.java:302) 位于org.apache.spark.deploy.warn.Client$$anonfun$createApplicationSubmissionContext$2.apply(Client.scala:245) 位于org.apache.spark.deploy.warn.Client$$anonfun$createApplicationSubmissionContext$2.apply(Client.scala:244) 位于scala.Option.foreach(Option.scala:257) 位于org.apache.spark.deploy.warn.Client.createApplicationSubmissionContext(Client.scala:244) 位于org.apache.spark.deploy.warn.Client.submitApplication(Client.scala:180) 位于org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend.start(YarnClientSchedulerBackend.scala:57) 位于org.apache.spark.scheduler.TaskSchedulerImpl.start(TaskSchedulerImpl.scala:183) 位于org.apache.spark.SparkContext(SparkContext.scala:501) 位于org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2520) 位于org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:935) 位于org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:926) 位于scala.Option.getOrElse(Option.scala:121) 位于org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:926) 位于dev.ancor.somedataprocsparkjob.SomeSparkJob$.main(SomeSparkJob.scala:13) 在dev.ancor.somedataprocsparkjob.SomeSparkJob.main(SomeSparkJob.scala)
问题是:在“纱线”模式下运行时,为什么会出现这种异常,以及如何修复它?谢谢大家!

正如Gabe Weiss和David Rabinowitz所确认的,我们可以将Dataproc集群和云SQL放在VPC网络中,只需使用。无需使用云SQL代理。

我最终使用了一个更好的解决方案来连接Dataproc和云SQL:将Dataproc集群和云SQL放在VPC网络中,只需使用内部ip即可。无需使用云SQL代理(您将获得更低的网络延迟!)。我正要说…:)在这种情况下,比尝试调用代理要好得多的解决方案。