Java Spark作业与Google Dataproc不兼容
我有这段代码,它已经运行了好几个月了,并且在大约2个月前停止使用GoogleDataProc,尽管我没有更改任何一行代码 我只需要几行代码就可以重现这个bug,因此我不必发布大量代码:Java Spark作业与Google Dataproc不兼容,java,apache-spark,google-cloud-dataproc,Java,Apache Spark,Google Cloud Dataproc,我有这段代码,它已经运行了好几个月了,并且在大约2个月前停止使用GoogleDataProc,尽管我没有更改任何一行代码 我只需要几行代码就可以重现这个bug,因此我不必发布大量代码: SparkConf sparkConf = new SparkConf().setAppName("test"); JavaSparkContext jsc = new JavaSparkContext(sparkConf); JavaRDD<String> rdd = jsc.paralleliz
SparkConf sparkConf = new SparkConf().setAppName("test");
JavaSparkContext jsc = new JavaSparkContext(sparkConf);
JavaRDD<String> rdd = jsc.parallelize(Arrays.asList("a", "b", "c"));
JavaPairRDD<String, String> pairs = rdd.flatMapToPair(value ->
Arrays.asList(
new Tuple2<>(value, value + "1"),
new Tuple2<>(value, value + "2")
)
);
pairs.collect().forEach(System.out::println);
如果我在本地运行它,请使用:
sparkConf.setMaster("local[2]")
然后它工作正常并输出:
(a,a1)
(a,a2)
(b,b1)
(b,b2)
(c,c1)
(c,c2)
以下是我的Spark相关性:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.10</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.10</artifactId>
<version>1.6.0</version>
</dependency>
org.apache.spark
spark-core_2.10
1.6.0
org.apache.spark
spark-mllib_2.10
1.6.0
org.apache.spark
spark-2.10
1.6.0
非常感谢您的帮助。Dataproc使用的默认映像最近升级到Spark 2.0/Scala 2.11。这一点在8月份有所改变,可能可以解释这种差异 详细说明每个Dataproc映像版本中包含的软件包版本 使用以下内容更新pom.xml,重新编译并重新运行应用程序就足够了
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.11</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.0.0</version>
</dependency>
当使用显式图像跟踪时,请记住,主/次版本可能会被弃用并最终删除。有关映像版本的支持时间表,请参考该策略。Dataproc使用的默认映像最近已升级到Spark 2.0/Scala 2.11。这一点在8月份有所改变,可能可以解释这种差异 详细说明每个Dataproc映像版本中包含的软件包版本 使用以下内容更新pom.xml,重新编译并重新运行应用程序就足够了
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.11</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.0.0</version>
</dependency>
当使用显式图像跟踪时,请记住,主/次版本可能会被弃用并最终删除。有关图像版本的支持时间表,请参考该政策。谢谢,安格斯,它工作得很好。将版本更改为2.11需要更改代码,因此在此期间,我必须使用
——图像版本1.0
。对于其他有相同问题的人,我建议将--image版本设置为当前版本,以避免在将来的Dataproc升级中出现向后兼容性问题。我还添加了一个指向图像版本控制支持策略的链接,只是想指出图像版本不是无限期支持的。谢谢,Angus,它工作得很好。将版本更改为2.11需要更改代码,因此在此期间,我必须使用——图像版本1.0
。对于其他有相同问题的人,我建议将--image版本设置为当前版本,以避免在将来的Dataproc升级中出现向后兼容性问题。我还添加了一个指向映像版本控制支持策略的链接,只是为了指出映像版本不是无限期支持的。
$ gcloud dataproc clusters create --image-version 1.0 ...