2016-09-28 121 views
1

我们有一个MapR群集,在这个群集上运行,但现在突然停止,甚至无法在mapr演示群集上运行。我们正在运行MapR 5.1和Spark 1.6.1。写给Spark Avro失败

from pyspark import SparkConf, SparkContext 
from pyspark import HiveContext 
from pyspark.sql import DataFrameWriter 
conf = SparkConf().setAppName('test') 
sc = SparkContext(conf=conf) 
sqlContext = HiveContext(sc) 

df = sqlContext.createDataFrame([(2012, 8, "Batman", 9.8), (2012, 8, "Hero", 8.7), (2012, 7, "Robot", 5.5), (2011, 7, "Git", 2.0)],["year", "month", "title", "rating"]) 
df.show() 
    df.write.mode("append").format("com.databricks.spark.avro").save("/user/bedrock/output_avro") 
sc.stop() 

但现在我收到此错误:

java.lang.IllegalAccessError: tried to access class org.apache.avro.SchemaBuilder$FieldDefault from class com.databricks.spark.avro.SchemaConverters$$anonfun$convertStructToAvro$1 

任何想法?这是根据databricks github上的说明。使用这些包,我调用pyspark壳或火花提交:

/opt/mapr/spark/spark-1.6.1/bin/pyspark --packages com.databricks:spark-avro_2.10:2.0.1 --driver-class-path /opt/mapr/spark/spark-1.6.1/lib/avro-1.7.7.jar --conf spark.executor.extraClassPath=/opt/mapr/spark/spark-1.6.1/lib/avro-1.7.7.jar --master yarn-client 
+0

@ zero323,你对这个输入? – learning

回答

0

我都经历过,在过去这个错误,但不与pyspark。我希望我的经验可以帮助。

事实证明,有一个配置错误的Java CLASSPATH将avro-1.7.5.jar放在任何其他位置之前。您可以通过确保您的群集配置使用avro-1.7.7.jar来解决此问题。

通常可以通过将spark.driver.userClassPathFirstspark.executor.userClassPathFirst配置变量设置为true来完成此操作。

特定的错误是由1.7.5和1.7.6之间的变化的Avro触发(见https://github.com/apache/avro/blob/release-1.7.5/lang/java/avro/src/main/java/org/apache/avro/SchemaBuilder.java#L2136