因为avro我启动spark-submit时出错

时间:2015-06-18 09:01:17

标签: hadoop apache-spark avro

我在spark中创建一个应用程序。 我在HDFS中使用带有Hadoop2的avro文件。 我使用maven,我包括像这样的avro:

<dependency>
            <groupId>org.apache.avro</groupId>
            <artifactId>avro-mapred</artifactId>
            <version>1.7.6</version>
            <classifier>hadoop2</classifier>
</dependency>

我做了单元测试,当我使用mvn测试时,所有的工作。 但是当我用spark开始提交时没有! 我有这个错误:

Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 0.0 failed 1 times, most recent failure: Lost task 1.0 in stage 0.0 (TID 1, localhost): java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.TaskAttemptContext, but class was expected
    at org.apache.avro.mapreduce.AvroKeyInputFormat.createRecordReader(AvroKeyInputFormat.java:47)
你能帮帮我吗?

谢谢

2 个答案:

答案 0 :(得分:1)

确定, 我喜欢这个解决方案:D 感谢http://apache-spark-developers-list.1001551.n3.nabble.com/Fwd-Unable-to-Read-Write-Avro-RDD-on-cluster-td10893.html

解决方案是在SPARK_CLASSPATH中添加jar

export SPARK_CLASSPATH=yourpath/avro-mapred-1.7.7-hadoop2.jar:yourpath/avro-1.7.7.jar

您可以在此处下载jar:http://repo1.maven.org/maven2/org/apache/avro/avro-mapred/1.7.7/

答案 1 :(得分:0)

但它不是spark-submit --master yarn-cluster

的解决方案

我又有同样的错误:

WARN scheduler.TaskSetManager:阶段0.0中丢失的任务9.1(TID 15,10.163.34.129):java.lang.IncompatibleClassChangeError:找到接口org.apache.hadoop.mapreduce.TaskAttemptContext,但是类是预期的     at org.apache.avro.mapreduce.AvroKeyInputFormat.createRecordReader(AvroKeyInputFormat.java:47)

有人有另一个想法吗?