使用hadoop IncompatibleClassChangeError在EC2上运行spark应用程序失败

时间:2016-09-27 09:55:21

标签: scala hadoop apache-spark amazon-ec2

我有一个简单的火花应用程序,使用spark-submit在我的笔记本电脑上运行正常。 但是,当我在Amazon EC2集群上使用spark-submit运行它时,我收到此运行时错误:

$ /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/sparkorg/apache/hadoop

我正在使用spark 1.6.1和hadoop 2.6.0。我看到warcbase取决于hadoop 2.6.0-cdh5.7.1。

可能是什么问题?

1 个答案:

答案 0 :(得分:1)

问题是我的本地安装spark以及warcbase库使用hadoop 2.6.0,而amazon ec2的spark安装使用hadoop 1.2.1

所以,在我的笔记本电脑上,我有spark-1.6.1-bin-hadoop2.6。我运行spark-1.6.1-bin-hadoop2.6/ec2/spark-ec2,它在亚马逊ec2上部署一个火花簇。我希望它部署相同的版本,但它实际部署spark-assembly-1.6.1-hadoop1.2.1.jar。漂亮的转储。

所以,当执行spark-ec2在amazon ec2上创建spark集群时,你需要指定spark和hadoop版本(它不会使用你本地安装的那些)。由于某些原因,hadoop版本2.6.0不可用。

$ spark-ec2 --help
Usage: spark-ec2 [options] <action> <cluster_name>

<action> can be: launch, destroy, login, stop, start, get-master, reboot-slaves

Options:
...
  -v SPARK_VERSION, --spark-version=SPARK_VERSION
                        Version of Spark to use: 'X.Y.Z' or a specific git
                        hash (default: 1.6.1)
...
  --hadoop-major-version=HADOOP_MAJOR_VERSION
                        Major version of Hadoop. Valid options are 1 (Hadoop
                        1.0.4), 2 (CDH 4.2.0), yarn (Hadoop 2.4.0) (default:
                        1)
...


$ spark-ec2 --key-pair=test-us-east-1 --identity-file=~/.ssh/test-us-east-1.pem --instance-type=m3.xlarge --slaves=10 -v 1.6.1 --region=us-east-1 launch my-spark-cluster --spark-version=1.6.1 --hadoop-major-version=2.4.0