繁体   English   中英

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

[英]Apache Parquet Could not read footer: java.io.IOException:

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

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

我收到以下错误:

无法读取页脚:java.io.IOException:无法读取文件 FileStatus{path=file:/var/tmp/graphs/sib200.parquet/_common_metadata 的页脚; 是目录=假; 长度=413; 复制=0; 块大小=0; 修改时间=0; 访问时间=0; 所有者=; 组=; 权限=rw-rw-rw-; isSymlink=false} 在 parquet.hadoop.ParquetFileReader.readAllFootersInParallel(ParquetFileReader.java:248) 在 org.apache.spark.sql.execution.datasources.parquet.ParquetRelation$$anonfun$28.apply(ParquetRelation.scala:750)

根据在线搜索,这似乎是镶木地板版本的问题。

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

我在尝试从 S3 读取镶木地板文件时遇到了同样的问题。 在我的例子中,问题是集群中的所有工作人员都无法使用所需的库。

有两种方法可以解决这个问题:

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

如果你打开一个拼花文件(文本编辑器),在最底部你会看到类似“parquet-mr”的东西,这可以帮助你知道文件是从什么版本/格式创建的

上面的方法虽然简单,但“创建者”可以是其他东西,例如 impala 或其他可以创建 parquet 文件的组件,您可以使用 parquet-tools https://github.com/apache/parquet-mr/tree/master/parquet -工具

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

如果这不起作用,那么也许可以尝试这是否是最新版本的 spark 的问题 - 如果确实如此,那么您可以尝试跟踪修复它的提交历史,这可能会让您深入了解可能的解决方法

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

检查您的文件夹权限。 我们在其他环境中看到过这个错误,它是由于 Spark 没有访问该文件的权限造成的。

你能试试 sqlContex.read.load,而不是 sqlContext.parquetFile 吗?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM