S3でいくつかのファイルを書き込んでいるElasticMapReduceジョブがあり、すべてのファイルを連結して一意のテキストファイルを生成したいと思います。
現在、すべてのファイルを含むフォルダーをHDFS(hadoop fs copyFromLocal)に手動でコピーしてから、hadoopfs-getmergeおよびhadoopfscopyToLocalを実行してファイルを取得しています。
とにかくS3で直接hadoopfsを使用することはできますか?
S3でいくつかのファイルを書き込んでいるElasticMapReduceジョブがあり、すべてのファイルを連結して一意のテキストファイルを生成したいと思います。
現在、すべてのファイルを含むフォルダーをHDFS(hadoop fs copyFromLocal)に手動でコピーしてから、hadoopfs-getmergeおよびhadoopfscopyToLocalを実行してファイルを取得しています。
とにかくS3で直接hadoopfsを使用することはできますか?
実際、getmergeに関するこの応答は正しくありません。getmergeはローカルの宛先を想定しており、S3では機能しません。IOException
-getmerge:Wrong FS:で応答しようとすると、がスローされます。
使用法:
hadoop fs [generic options] -getmerge [-nl] <src> <localdst>
個人的にgetmergeコマンドを試したことはありませんがhadoop fs
、EMRクラスターノードのコマンドは、HDFSパスと同じようにS3パスをサポートしています。たとえば、クラスターのマスターノードにSSHで接続して、次のコマンドを実行できます。
hadoop fs -ls s3://<my_bucket>/<my_dir>/
上記のコマンドは、指定されたディレクトリパスの下にあるすべてのS3オブジェクトを一覧表示します。
hadoop fs -getmerge
私は同じように働くことを期待します。したがって、HDFSパスの代わりに完全なS3パス(s3://で始まる)を使用するだけです。