2016-09-27 63 views
1

我有一个简单的火花应用程序,它运行良好在我的笔记本电脑上使用​​。 然而,我当我运行Amazon EC2的集群上使用​​它得到这个运行时错误:运行火花应用程序失败EC2与hadoop IncompatibleClassChangeError

$ /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依赖于hadoop 2.6.0-cdh5.7.1。

可能是什么问题?

回答

1

的问题是,我的spark本地安装,也是warcbase库的使用hadoop 2.6.0,并在Amazon EC2上的火花安装使用hadoop 1.2.1

所以,在我的笔记本电脑上我有spark-1.6.1-bin-hadoop2.6。我运行了spark-1.6.1-bin-hadoop2.6/ec2/spark-ec2,它在amazon ec2上部署了一个spark集群。我期望它部署相同的版本,但它实际上部署了spark-assembly-1.6.1-hadoop1.2.1.jar。漂亮的转储。


因此,在执行火花EC2创建在Amazon EC2上的火花群集时,您需要指定火花和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 
相关问题