それで、さらなる調査の後、私は私の問題の解決策に出くわしました:
S3がファイルのパーミッション/所有者を維持しない上記の問題は、S3がサポートするHadoop JobTrakcerをHDFSとして使用しようとすると、2つの異なる場所に現れます。
- JobTrakcerの再起動中に、jobtracker.confファイルがすでに存在する場合。
- JobTrakcerがHDFSのステージングディレクトリから情報を取得しようとしたときに、ジョブの2番目のタスクに移行しているとき。
「JobTrackers」は一度だけ開始され、ジョブの完了時に破棄されるため、これらの問題の前者はElasticMapReduceに現れることはありません。org.apache.hadoop.mapreduce.JobSubmissionFiles
ただし、2つ目は、使用しているHadoopのバージョンによっては、クラスでのチェックの犠牲になる可能性があります。
ほとんどのCDH3ディストリビューション(私はcdh3u3、cdh3u4、およびcdh3u5のみをチェックしました)では、ファイルの所有者とアクセス許可が2つの別々のステートメントでチェックされ、より詳細なログが追加されます(cdh3u5からの抜粋--JobSubmissionFiles.java):
FileStatus fsStatus = fs.getFileStatus(stagingArea);
String owner = fsStatus.getOwner();
if (!(owner.equals(currentUser) || owner.equals(realUser))) {
throw new IOException("The ownership on the staging directory " +
stagingArea + " is not as expected. " +
"It is owned by " + owner + ". The directory must " +
"be owned by the submitter " + currentUser + " or " +
"by " + realUser);
}
if (!fsStatus.getPermission().equals(JOB_DIR_PERMISSION)) {
LOG.info("Permissions on staging directory " + stagingArea + " are " +
"incorrect: " + fsStatus.getPermission() + ". Fixing permissions " +
"to correct value " + JOB_DIR_PERMISSION);
fs.setPermission(stagingArea, JOB_DIR_PERMISSION);
}
String owner
がnullまたは空の文字列値を持っている場合、ジョブを実行しているマシンからプルされたcurrentUser
またはに一致することはないことに注意してください。realUser
Apache 0.20.2、1.0.x、2.0.x、およびCDH4を含む古いバージョンおよび最近のバージョンのhadoopでは、このチェックが1つのステートメントに結合され、空の所有者がデフォルトのアクセス許可にロールオーバーできるようになります。 Apache Hadoop 1.0.3からのスニペット-JobSubmissionFiles.java):
FileStatus fsStatus = fs.getFileStatus(stagingArea);
String owner = fsStatus.getOwner();
if (!(owner.equals(currentUser) || owner.equals(realUser)) ||
!fsStatus.getPermission().equals(JOB_DIR_PERMISSION)) {
throw new IOException("The ownership/permissions on the staging " +
"directory " + stagingArea + " is not as expected. " +
"It is owned by " + owner + " and permissions are "+
fsStatus.getPermission() + ". The directory must " +
"be owned by the submitter " + currentUser + " or " +
"by " + realUser + " and permissions must be rwx------");
}
簡単に言うと、拡張された比較ではなく、折りたたまれた比較を使用してHadoopのバージョンに切り替えると、S3の問題が修正されました。