2016-10-03 10 views
4

Amazon EMRクラスタでスパークジョブを実行した後、s3から出力ファイルを直接削除して、ジョブを再実行しようとしました。私はsqlContext.writeを使用してS3に寄木細工のファイル形式に書き込もうとすると、次のエラーを受け取りました:Emrfsファイルとs3が同期していない

'bucket/folder' present in the metadata but not s3 
at com.amazon.ws.emr.hadoop.fs.consistency.ConsistencyCheckerS3FileSystem.getFileStatus(ConsistencyCheckerS3FileSystem.java:455) 

私はそれを削除しなかったにもかかわらず、エラーを解決するようには見えなかった

emrfs sync s3://bucket/folder 

を実行してみましたメタデータを追跡するDynamoDBインスタンスの一部のレコード。他に何ができるか分からない。このエラーを解決するにはどうすればよいですか?

答えて

8

それは私が同期を実行する前に、最初の

emrfs delete s3://bucket/folder 

を実行するために必要なことが判明しました。上記を実行すると問題が解決しました。

+3

私は同じ問題を持っている...同期は行いません。 s3から手動でファイルを削除するときに役立つもの。ドキュメンテーションは間違っていて誤解を招きます。 –

+0

同じ問題を抱えていて、ドキュメントがそれについて非常に不明であることに同意しました。 – seiya

3

主に一貫した問題は、スパークおよびハープ・システムのリトライ・ロジックに起因します。 s3でファイルを作成するプロセスが失敗したが、それがdynamodbで既に更新されているとき。エントリがすでにダイナモブロックに存在しているので、ハイドーププロセスがプロセスを再開するとき。それは一貫したエラーをスローします。

オブジェクトがすでに削除されているdynamaoDBに格納されているs3のメタデータを削除する場合。 これは

は、すべてのパス内のオブジェクト、 emrfsそれはまた、不要なエントリを削除しても良いので、レコードを削除するためにハッシュ関数を使用して削除を削除し、すべてのメタデータを削除し、手順ですので、我々はやっています結果としてステップ

emrfs delete s3://path 

にインポートおよび同期がダイナモDB

emrfs import s3://path 
にS3に物理的に存在しているオブジェクトのメタデータを取得し

s3とメタデータの間でデータを同期します。すべての操作の後

emrfs sync s3://path  

は、その特定のオブジェクトは、S3とメタデータの両方に存在するかどうかを確認するために

emrfs diff s3://path 

http://docs.aws.amazon.com/emr/latest/ManagementGuide/emrfs-cli-reference.html

関連する問題