Scala 在EC2上运行spark应用程序失败,hadoop不兼容ClassChangeError

Scala 在EC2上运行spark应用程序失败,hadoop不兼容ClassChangeError,scala,hadoop,apache-spark,amazon-ec2,Scala,Hadoop,Apache Spark,Amazon Ec2,我有一个简单的spark应用程序,它可以在我的笔记本电脑上使用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-SN

我有一个简单的spark应用程序,它可以在我的笔记本电脑上使用
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/spark
org/apache/hadoop

我正在使用spark 1.6.1和hadoop 2.6.0。我知道这取决于hadoop 2.6.0-cdh5.7.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
,它在amazonec2上部署了一个spark集群。我希望它部署相同的版本,但实际上它部署了
spark-assembly-1.6.1-hadoop1.2.1.jar
。非常糟糕


因此,在AmazonEC2上执行spark-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 
$spark-ec2--帮助
用法:spark-ec2[选项]
可以是:启动、销毁、登录、停止、启动、获取主机、重新启动从机
选项:
...
-v火花型,--火花型=火花型
要使用的Spark版本:“X.Y.Z”或特定git
散列(默认值:1.6.1)
...
--hadoop主要版本=hadoop_主要版本
Hadoop的主要版本。有效选项为1(Hadoop)
1.0.4)、2(CDH 4.2.0)、纱线(Hadoop 2.4.0)(默认值:
1)
...
$spark-ec2--key pair=test-us-east-1--identity file=~/.ssh/test-us-east-1.pem--instance type=m3.xlarge--slaves=10-v1.6.1--region=us-east-1启动我的spark集群--spark版本=1.6.1--hadoop主版本=2.4.0