3

HDFS 内で特定のレイアウトを必要とする Hadoop プログラムを作成しました。その後、HDFS からファイルを取得する必要があります。これは私の単一ノードの Hadoop セットアップで動作し、Elastic MapReduce 内の数十のノードで動作することを熱望しています。

私がやっていることは次のようなものです:

./elastic-mapreduce --create --alive
JOBID="j-XXX" # output from creation
./elastic-mapreduce -j $JOBID --ssh "hadoop fs -cp s3://bucket-id/XXX /XXX"
./elastic-mapreduce -j $JOBID --jar s3://bucket-id/jars/hdeploy.jar --main-class com.ranjan.HadoopMain --arg /XXX

これは非同期ですが、ジョブが完了したら、これを行うことができます

./elastic-mapreduce -j $JOBID --ssh "hadoop fs -cp /XXX s3://bucket-id/XXX-output"
./elastic-mapreduce -j $JOBID --terminate

したがって、この種の機能は機能しますが、扱いにくく、私が望むものではありません。これを行うためのよりクリーンな方法はありますか?

ありがとう!

4

2 に答える 2

9

distcpファイルを mapreduce ジョブとしてコピーする which を使用できます

# s3からダウンロード
$ hadoop distcp s3://bucket/path/on/s3/ /target/path/on/hdfs/
# s3にアップロード
$ hadoop distcp /source/path/on/hdfs/ s3://bucket/path/on/s3/

これにより、クラスター全体を使用して、s3 から並行してコピーできます。

(注: 各パスの末尾のスラッシュは、ディレクトリからディレクトリにコピーするために重要です)

于 2011-10-12T18:18:16.320 に答える
0

@mat-kelcey さん、コマンド distcp は、S3 内のファイルに最小限のアクセス許可レベルがあることを期待していますか? 何らかの理由で、ブートストラップまたはステップスクリプト内からファイルにアクセスできるようにするには、ファイルのアクセス許可レベルを「全員」に対して「開く/ダウンロード」および「アクセス許可の表示」に設定する必要があります。

于 2014-04-16T16:28:50.243 に答える