在ec2上运行spark应用程序失败,出现hadoop不兼容ClassChangeError

qhhrdooz  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(408)

我有一个简单的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。
有什么问题吗?

htzpubme

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版不可用。

$ 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

相关问题