2016-09-28 75 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