我有一个简单的火花应用程序,使用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。我看到warcbase取决于hadoop 2.6.0-cdh5.7.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