Apache Parquet无法读取页脚:java.io.IOException:

时间:2016-01-15 15:09:47

标签: java hadoop io apache-spark parquet

我在Cloudera VM上运行了一个SPARK项目。在我的项目中,我从镶木地板文件加载数据,然后处理这些数据。一切正常,但问题是我需要在学校集群上运行这个项目,但是我在这部分代码中读取镶木地板文件时遇到了问题:

DataFrame schemaRDF = sqlContext.parquetFile("/var/tmp/graphs/sib200.parquet");

我收到以下错误:

  

无法读取页脚:java.io.IOException:无法读取页脚   文件   时间filestatus {路径=文件:/var/tmp/graphs/sib200.parquet/_common_metadata;   isDirectory = FALSE;长度= 413;复制= 0;块大小= 0;   MODIFICATION_TIME = 0; access_time = 0;所有者=;基团=;   权限= RW-RW-RW-; isSymlink = false} at   parquet.hadoop.ParquetFileReader.readAllFootersInParallel(ParquetFileReader.java:248)   在   org.apache.spark.sql.execution.datasources.parquet.ParquetRelation $$ anonfun $ 28.apply(ParquetRelation.scala:750)

基于在线搜索,这似乎是一个镶木地板版本问题。

我想要的是告诉我如何在计算机中找到已安装的镶木地板版本,以检查两者是否具有相同的版本。或者另外,如果您知道此错误的确切解决方案也将是完美的!

4 个答案:

答案 0 :(得分:1)

尝试从S3读取实木复合地板文件时遇到相同的问题。就我而言,问题在于群集中的所有工作人员都无法使用所需的库。

有2种解决方法:

  • 确保在spark-submit命令上添加了依赖项,以便将其分发到整个集群中
  • 为群集中的每个工作程序在SPARK_HOME的/ jars目录上添加依赖项。

答案 1 :(得分:0)

如果你打开一个镶木地板文件(文本编辑器),在最底部你会看到类似" parquet-mr"这可以帮助您了解从

创建文件的版本/格式

上面的方法虽然简单,但是"创建者"可以是像impala或其他可以创建镶木地板文件的组件,你可以使用镶木地板工具https://github.com/apache/parquet-mr/tree/master/parquet-tools

因为看起来你正在使用spark来读取镶木地板文件,你可以通过将spark.sql.parquet.filterPushdown设置为false来解决它。也许先尝试一下(这里有更多信息 - https://spark.apache.org/docs/latest/sql-programming-guide.html#configuration - 更新你最新版本的火花)。

如果这不起作用,那么可以尝试,如果这是最新版本的spark的问题 - 如果确实如此,那么你可以尝试跟踪哪些提交修复它的历史记录,这可能会让你深入了解可能的解决方法< / p>

或者如果您知道镶木地板版本,您可以使用(切换)木地板的相应分支(为此构建镶木地板工具)并使用该版本的工具来测试元数据文件(_metadata,_common_metadata)或一个镶木地板文件 - 你应该能够从那里重现错误和调试

答案 2 :(得分:0)

检查您的文件夹权限。我们已经在其他环境中看到此错误,这是由于Spark没有访问文件的权限引起的。

答案 3 :(得分:-1)

您可以尝试使用sqlContex.read.load而不是sqlContext.parquetFile。?

请参阅以下链接。 http://spark.apache.org/docs/latest/sql-programming-guide.html#generic-loadsave-functions

如果有效,请尝试让我知道。如果没有,我们可以尝试其他方式。