我有一个简单的spark应用程序,它可以在我的笔记本电脑上运行 spark-submit
. 但是,当我使用 spark-submit
在amazon ec2集群上:
$ /root/spark/bin/spark-submit --class application.Example --master spark://ec2-54-227-170-20.compute-1.amazonaws.com:7077 /root/example-assembly-0.1-SNAPSHOT.jar
java.lang.IncompatibleClassChangeError: Found class org.apache.hadoop.mapreduce.TaskAttemptContext, but interface was expected
at org.warcbase.mapreduce.WacGenericInputFormat$GenericArchiveRecordReader.initialize(WacGenericInputFormat.java:71)
我确定 /root/example-assembly-0.1-SNAPSHOT.jar
不包含 org/apache/spark
也不是 org/apache/hadoop
.
我使用的是spark 1.6.1和hadoop 2.6.0。我看到warcbase依赖于hadoop2.6.0-cdh5.7.1。
有什么问题吗?
1条答案
按热度按时间htzpubme1#
问题是我在本地安装的
spark
还有warcbase
图书馆使用hadoop 2.6.0
,amazonec2上的spark安装使用hadoop 1.2.1
.所以,在我的笔记本电脑上
spark-1.6.1-bin-hadoop2.6
. 我跑了spark-1.6.1-bin-hadoop2.6/ec2/spark-ec2
,它在amazonec2上部署了一个spark集群。我希望它部署相同的版本,但它实际上部署了spark-assembly-1.6.1-hadoop1.2.1.jar
. 很垃圾。因此,在amazonec2上执行spark-ec2创建spark集群时,需要指定spark和hadoop版本(它不会使用本地安装的版本)。由于某些原因,hadoop 2.6.0版不可用。