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インスタンスから一部のレコードを削除したにもかかわらず、エラーを解決するようには見えませんでした。他に何ができるかわかりません。このエラーを解決するにはどうすればよいですか?
実行する必要があることがわかりました
emrfs delete s3://bucket/folder
最初に同期を実行します。上記を実行すると問題が解決しました。
主に一貫した問題は、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