mat*_*usr 5 apache-spark cloudera-cdh apache-spark-sql apache-spark-standalone
TL;DR:运行 Spark-Shell(驱动程序)的 Spark 是否绝对有必要具有与 Spark 主版本完全相同的版本?
我正在使用Spark 1.5.0通过 Spark-shell连接到Spark 1.5.0-cdh5.5.0 :
spark-shell --master spark://quickstart.cloudera:7077 --conf "spark.executor.memory=256m"
Run Code Online (Sandbox Code Playgroud)
它可以很好地连接、实例化 SparkContext 和 sqlContext。如果我运行:
sqlContext.sql("show tables").show()
Run Code Online (Sandbox Code Playgroud)
它按预期显示了我的所有表格。
但是,如果我尝试访问表中的数据:
sqlContext.sql("select * from t1").show()
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
java.io.InvalidClassException: org.apache.spark.sql.catalyst.expressions.AttributeReference; local class incompatible: stream classdesc serialVersionUID = 370695178000872136, local class serialVersionUID = -8877631944444173448
Run Code Online (Sandbox Code Playgroud)
它说serialVersionUID不匹配。我的假设是问题是由于尝试连接两个不同版本的 Spark 引起的。如果我是对的,有什么想法吗?
你是绝对正确的。
在 Spark shell 中,您尝试从工作线程(集群)中反序列化序列化对象。由于这些类的版本不同,您会得到java.io.InvalidClassException
.
尝试使用相同的 Spark 版本就可以了。