我收到“异常 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的主要内容,如果未能解决你的问题,请参考以下文章
我收到“错误:React.Children.only 预计会收到一个 React 元素子项。”带有 TouchableWithoutFeedback
当我没有收到手动运行代码时,在 Python for 循环中收到 KeyError