web-dev-qa-db-ja.com

s3とのEMRFSファイルの同期が機能しない

Amazon EMRクラスターでsparkジョブを実行した後、s3から直接出力ファイルを削除し、ジョブを再実行しようとしました。 sqlContext.writeを使用した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インスタンスから一部のレコードを削除したにもかかわらず、エラーを解決するようには見えませんでした。他に何ができるかわかりません。このエラーを解決するにはどうすればよいですか?

11
sakurashinken

実行する必要があることがわかりました

emrfs delete s3://bucket/folder

最初に同期を実行します。上記を実行すると問題が解決しました。

14
sakurashinken

主に一貫した問題は、sparkおよびhadoopシステムの再試行ロジックが原因です。s3でファイルを作成するプロセスが失敗したが、dynamodbですでに更新されている場合。hadoopプロセスがプロセスを再起動したときエントリは既にdynamodbに存在するため、一貫したエラーがスローされます。

オブジェクトが既に削除されているdynamaoDBに保存されているs3のメタデータを削除する場合。これが手順ですすべてのメタデータを削除します

パス内のすべてのオブジェクトを削除します。emrfsdeleteはハッシュ関数を使用してレコードを削除するため、不要なエントリも削除する可能性があるため、後続の手順でインポートと同期を行っています

emrfs delete   s3://path

s3に物理的に存在するオブジェクトのメタデータをdynamo dbに取得します

emrfs import s3://path

s3とメタデータの間でデータを同期します。

emrfs sync s3://path      

すべての操作の後、その特定のオブジェクトがs3とメタデータの両方に存在するかどうかを確認します

emrfs diff s3://path 

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

12
loneStar