4

TL;DR:运行 spark-shell(驱动程序)的 Spark 是否绝对有必要与 Spark 的 master版本完全相同?

我正在使用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"

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

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

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

但是,如果我尝试从表中访问数据:

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

完整的堆栈跟踪

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

4

1 回答 1

4

你是绝对正确的。

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

尝试使用相同的火花版本,它会没事的。

于 2017-03-20T11:54:05.567 回答