从不同的 Spark 版本访问 spark-shell

Access spark-shell from different Spark versions

TL;DR:Spark 运行ning 一个 spark-shell(驱动程序)是否绝对有必要 完全相同的版本 火花的主人?

我正在使用 Spark 1.5.0 通过 spark-[=42= 连接到 Spark 1.5.0-cdh5.5.0 ]:

spark-shell --master spark://quickstart.cloudera:7077 --conf "spark.executor.memory=256m"

它连接、实例化 SparkContext 和 sqlContext 很好。如果我 运行:

sqlContext.sql("show tables").show()

它按预期显示了我所有的 table。

但是,如果我尝试从 table:

访问数据
sqlContext.sql("select * from t1").show()

我收到这个错误:

java.io.InvalidClassException: org.apache.spark.sql.catalyst.expressions.AttributeReference; local class incompatible: stream classdesc serialVersionUID = 370695178000872136, local class serialVersionUID = -8877631944444173448

Full stacktrace

它说 serialVersionUIDs 不匹配。我的假设是问题是由尝试连接两个不同版本的 spark 引起的。如果我是对的,有什么想法吗?

你完全正确。

在您的 spark shell 中,您尝试反序列化来自您的工作人员(集群)的序列化对象。由于 类 的版本不同,您会得到 java.io.InvalidClassException.

尝试使用相同的spark版本就可以了。