Hive Spark SQL>;使用Serde:Exception在阶段java.lang.IllegalStateException:unread块数据的任务中访问配置单元表

Hive Spark SQL>;使用Serde:Exception在阶段java.lang.IllegalStateException:unread块数据的任务中访问配置单元表,hive,apache-spark-sql,Hive,Apache Spark Sql,我正在使用sparksql通过sparkshell访问Hive表。由于Hive表中的数据以特殊的压缩格式存储,因此需要SerDe jar来读取数据 Spark shell中有以下scala代码: Scala > sqlContext.sql("ADD JAR /../SerDe.jar") Scala > sqlContext.sql("CREATE TABLE ... InputFormat ...OutputFormat") Scala > sqlContext.sql("

我正在使用
sparksql
通过
sparkshell
访问
Hive
表。由于Hive表中的数据以特殊的压缩格式存储,因此需要SerDe jar来读取数据

Spark shell中有以下scala代码:

Scala > sqlContext.sql("ADD JAR /../SerDe.jar")
Scala > sqlContext.sql("CREATE TABLE ... InputFormat ...OutputFormat")
Scala > sqlContext.sql("LOAD DATA ... INTO TABLE ...")
在此之前,一切正常,即数据成功加载到
HDFS
中的
Hive
表中

但随后我继续访问配置单元表中的数据:

 Scala > sqlContext.sql("select count(*) from ...").collect().foreach(println)
然后是错误:

错误org.apache.spark.executor.executor:阶段任务中出现异常 java.lang.IllegalStateException:未读块数据

我是Spark sql的新手,所以很高兴从这里得到一些提示


提前感谢

这些步骤在hiveCLI上是否正常工作?Spark不会执行任何操作,直到你点击println。因此,错误可能发生在任何地方。当然,使用hiveCLI,它工作得很好!在代码中你可以看到“println”,但它确实到达了那个步骤,我无法用我的配置重现这个问题。但是我在ApacheSparkJira()上发现了一个报告的问题。原因可能是您在构建spark时使用了错误的-Dhadoop.version。检查您的Hadoop版本($Hadoop版本),并在构建Spark()时使用正确的版本。对我来说,这是“2.5.0-cdh5.3.3”。除此之外,您应该始终检查hive-site.xml是否在spark conf文件夹中,外部jar(例如SerDe jar)是否在spark类路径中。关于hive-site.xml,据我了解,我们可以忽略它,因此,metastore和derby.log是在当前目录中生成的。如果我有什么误解,请发表评论。我在外部jar中包含了选项--spark shell的jars,我想这没问题,对吧?关于hive-site.xml,据我所知,我们可以忽略它,因此,metastore和derby.log是在当前目录中生成的。如果我有什么误解,请发表评论。我包括了带有选项的外部罐子——spark shell的罐子,我想这没问题,对吧?“createtable…”包括Serde、InputFormat和OutputFormat,并且运行良好,因此Spark Shell似乎确实识别出了我提供的jar,这些步骤在hiveCLI上运行良好吗?Spark不会执行任何操作,直到你点击println。因此,错误可能发生在任何地方。当然,使用hiveCLI,它工作得很好!在代码中你可以看到“println”,但它确实到达了那个步骤,我无法用我的配置重现这个问题。但是我在ApacheSparkJira()上发现了一个报告的问题。原因可能是您在构建spark时使用了错误的-Dhadoop.version。检查您的Hadoop版本($Hadoop版本),并在构建Spark()时使用正确的版本。对我来说,这是“2.5.0-cdh5.3.3”。除此之外,您应该始终检查hive-site.xml是否在spark conf文件夹中,外部jar(例如SerDe jar)是否在spark类路径中。关于hive-site.xml,据我了解,我们可以忽略它,因此,metastore和derby.log是在当前目录中生成的。如果我有什么误解,请发表评论。我在外部jar中包含了选项--spark shell的jars,我想这没问题,对吧?关于hive-site.xml,据我所知,我们可以忽略它,因此,metastore和derby.log是在当前目录中生成的。如果我有什么误解,请发表评论。我包括了带有选项的外部罐子——spark shell的罐子,我想这没问题,对吧?“createtable…”包括Serde、InputFormat和OutputFormat,一切都很顺利,所以SparkShell似乎确实认出了我提供的jar