我收到“异常 java.io.IOException 失败:/user/hive/warehouse/people/part-r-00001.parquet not a SequenceFile

Posted

技术标签:

【中文标题】我收到“异常 java.io.IOException 失败:/user/hive/warehouse/people/part-r-00001.parquet not a SequenceFile【英文标题】:I am getting "Failed with exception java.io.IOException:/user/hive/warehouse/people/part-r-00001.parquet not a SequenceFile 【发布时间】:2016-01-19 16:28:40 【问题描述】:

我通过在我的数据帧上调用 .saveAsTable 创建了一个 Spark SQL 表。该命令完全成功。但是,现在当我查询表格时,镶木地板文件似乎已损坏。我看到了这个错误:

"Failed with exception java.io.IOException:java.io.IOException: hdfs://ip:8020/user/hive/warehouse/people/part-r-00001.parquet not a SequenceFile"

我在 spark-shell 中遵循的以下步骤

scala >val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
scala>val path="test.json"
scala>val people = sqlContext.jsonFile(path)
scala> people.saveAsTable("people")

之后我打开了 hive 命令提示符

hive> select * from people;
OK Failed with exception java.io.IOException:java.io.IOException: hdfs://IP:8020/user/hive/warehouse/people/part-r-00001.parquet not a SequenceFile Time taken: 0.276 seconds

如何获得我的蜂巢表(人)结果。

请让我知道任何事情,不要明智地更改配置。

如何解决上述异常。

提前致谢。

【问题讨论】:

尝试将spark.sql.hive.convertMetastoreParquet设置为false 嗨塞巴斯蒂安,感谢您的回复 嗨 Sebastian,感谢您的回复。我已根据您的建议进行了必要的更改,即我已在我的“spark-defaults.conf”中将 spark.sql.hive.convertMetastoreParquet 添加为 false,例如 (spark. sql.hive.convertMetastoreParquet false) 然后我重新启动了我的集群。但我仍然遇到同样的错误。你能帮忙吗? 【参考方案1】:

如果 Hive 和 Spark 使用不同的 Parquet SerDe 版本,使用 saveAsTable 创建的表将无法在 hive 中工作,您可以尝试使用不同的序列化方法

例如:

df.write().format("orc").saveAsTable("table")df.write().format("json").saveAsTable("table")

【讨论】:

嗨塞巴斯蒂安,感谢您的回复。我已经尝试了上述解决方案,但它不起作用。【参考方案2】:

这可能与https://issues.apache.org/jira/browse/SPARK-14927有关。

似乎saveAsTable 将创建一个具有特定于 spark 格式的 Hive 表。如果您可以看到一些消息,例如

将分区数据源关系 `XX Table` 持久化到 Hive Spark SQL 特定格式的元存储,不兼容 蜂巢。输入路径

那么火花特定的格式可能是原因。

您可以先使用sqlContext.sql('create table XXX') 创建配置单元表。然后用df.write.save把你的数据放到HDFS中。

另见this question、this和this blog

【讨论】:

以上是关于我收到“异常 java.io.IOException 失败:/user/hive/warehouse/people/part-r-00001.parquet not a SequenceFile的主要内容,如果未能解决你的问题,请参考以下文章

为啥我收到的 jwt 格式错误?

我收到“错误:React.Children.only 预计会收到一个 React 元素子项。”带有 TouchableWithoutFeedback

当我没有收到手动运行代码时,在 Python for 循环中收到 KeyError

尝试控制台时收到 401~UNAUTHORIZED。记录我从 socket.io 收到的消息

无效的字典 0 )。为啥我收到此错误?

为啥我收到远程通知时没有发送本地通知?