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

5

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"

它可以连接并实例化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

完整的堆栈跟踪信息

它指出serialVersionUIDs(序列化版本号)不匹配。我猜测问题是由于尝试连接两个不同版本的spark引起的。如果我是正确的,你有什么想法吗?

1个回答

5

您说得完全正确。

在您的Spark shell中,您尝试从工作节点(集群)反序列化序列化对象。由于这些类的版本不同,您会收到java.io.InvalidClassException

尝试使用相同的Spark版本,问题就会得到解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接