web-dev-qa-db-ja.com

Apache Parquetがフッターを読み取れませんでした:Java.io.IOException:

ClouderaVMでSPARKプロジェクトを実行しています。私のプロジェクトでは、寄木細工のファイルからデータをロードしてからこれらのデータを処理します。すべて正常に動作しますが、問題はこれを実行する必要があることです。学校のクラスターでプロジェクトを作成しましたが、コードのこの部分で寄木細工のファイルを読み取るときに問題が発生しました。

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

次のエラーが発生します。

フッターを読み取れませんでした:Java.io.IOException:ファイルFileStatus {path = file:/var/tmp/graphs/sib200.parquet/_common_metadata;のフッターを読み取れませんでした。 isDirectory = false;長さ= 413;レプリケーション= 0; blocksize = 0; modify_time = 0; access_time = 0;所有者=; group =;許可= rw-rw-rw-; isSymlink = false} at parquet.hadoop.ParquetFileReader.readAllFootersInParallel(ParquetFileReader.Java:248)at org.Apache.spark.sql.execution.datasources.parquet.ParquetRelation $$ anonfun $ 28.apply(ParquetRelation.scala:750)

オンライン検索によると、寄木細工のバージョンの問題のようです。

両方が同じバージョンであるかどうかを確認するために、コンピューターにインストールされている寄木細工のバージョンを見つける方法を教えてください。またはさらに、このエラーの正確な解決策も完璧だとわかっている場合は!

9
Lavdërim Shala

S3から寄木細工のファイルを読み取ろうとしても同じ問題が発生しました。私の場合、問題は、必要なライブラリがクラスター内のすべてのワーカーで利用できないことでした。

これを修正する方法は2つあります。

  • クラスター全体に分散されるように、spark-submitコマンドに依存関係を追加したことを確認してください
  • クラスター内の各ワーカーのSPARK_HOMEの/ jarsディレクトリに依存関係を追加します。
1
Bruno Faria

寄木細工のファイル(テキストエディタ)を開くと、一番下に「parquet-mr」のようなものが表示され、ファイルが作成されたバージョン/形式を知るのに役立ちます。

上記の方法は単純ですが、「作成者」はインパラや寄木細工のファイルを作成できる他のコンポーネントのようなもので、寄木細工のツールを使用できます 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に変更します)。

それが機能しない場合は、これが最新バージョンのspark)の問題であるかどうかを試してください-問題が発生した場合は、どのコミットが修正されたかの履歴を追跡してみてください。考えられる回避策について

または、寄木細工のバージョンがわかっている場合は、parquet-mrの対応するブランチを使用(切り替え)し(そのための寄木細工のツールを構築)、そのバージョンのツールを使用してメタデータファイル(_metadata、_common_metadata)またはいずれかをテストできます。寄木細工のファイル-エラーを再現し、そこからデバッグできるはずです

0
Ryan Garaygay