5

S3でいくつかのファイルを書き込んでいるElasticMapReduceジョブがあり、すべてのファイルを連結して一意のテキストファイルを生成したいと思います。

現在、すべてのファイルを含むフォルダーをHDFS(hadoop fs copyFromLocal)に手動でコピーしてから、hadoopfs-getmergeおよびhadoopfscopyToLocalを実行してファイルを取得しています。

とにかくS3で直接hadoopfsを使用することはできますか?

4

3 に答える 3

1

実際、getmergeに関するこの応答は正しくありません。getmergeはローカルの宛先を想定しており、S3では機能しません。IOException-getmerge:Wrong FS:で応答しようとすると、がスローされます。

使用法:

hadoop fs [generic options] -getmerge [-nl] <src> <localdst>
于 2013-02-27T16:00:56.193 に答える
1

簡単な方法(マスターマシンに収まる小さなファイルを生成している場合)は、次のことを行うことです。

  1. ファイルパーツをローカルマシン上の単一のファイルにマージします(ドキュメント

    hadoop fs -getmerge hdfs://[FILE] [LOCAL FILE]
    
  2. 結果ファイルをS3にコピーしてから、ローカルファイルを削除しますドキュメント

    hadoop dfs -moveFromLocal [LOCAL FILE] s3n://bucket/key/of/file
    
于 2013-11-12T01:13:06.160 に答える
0

個人的にgetmergeコマンドを試したことはありませんがhadoop fs、EMRクラスターノードのコマンドは、HDFSパスと同じようにS3パスをサポートしています。たとえば、クラスターのマスターノードにSSHで接続して、次のコマンドを実行できます。

hadoop fs -ls s3://<my_bucket>/<my_dir>/

上記のコマンドは、指定されたディレクトリパスの下にあるすべてのS3オブジェクトを一覧表示します。

hadoop fs -getmerge私は同じように働くことを期待します。したがって、HDFSパスの代わりに完全なS3パス(s3://で始まる)を使用するだけです。

于 2012-06-30T23:01:10.897 に答える