大量のデータを Amazon S3 から Amazon EMR クラスターの HDFS にコピーする方法を教えてください。

所要時間2分
0

大量のデータを Amazon Simple Storage Service (Amazon S3) から Amazon EMR クラスターにコピーしたいのですが、

簡単な説明

S3DistCp を使用して、Amazon S3 と Amazon EMR クラスター間でデータをコピーします。S3DistCp は、デフォルトで Amazon EMR クラスターにインストールされます。S3DistCp を呼び出すには、起動時またはクラスターの実行後にステップとして追加します。

解決方法

AWS コマンドラインインターフェイス (AWS CLI) を使用して、実行中のクラスターに S3DistCp ステップを追加するには、「クラスターに S3DistCp をステップとして追加する」を参照してください。

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

コンソールを使用して S3DistCp ステップを追加するには、次のようにします:

1.    Amazon EMR コンソールを開いて、[Clusters] (クラスター) を選択します。

2.    リストから [Amazon EMR Cluster] を選択し、[Steps] を選択します。

3.    [Add step] を選択し、次のいずれかのオプションを選択します。

[Step type] で、[Custom JAR] を選択します。
[Name] に、S3DistCp ステップの名前を入力します。
[JAR location] (JAR ロケーション) に、「command-runner.jar」と入力します。詳細については、「Amazon EMR クラスターでコマンドとスクリプトを実行する」を参照してください。
[Arguments] (引数) に、次のようなオプションを入力します。s3-dist-cp --src=s3://s3distcp-source/input-data --dest=hdfs:///output-folder1
[Action on failure] で、[Continue] を選択します。

4.    [Add] を選択します。

5.    ステップ [Status] が Completed に変わったら、ファイルがクラスターにコピーされたことを確認します。

$ hadoop fs -ls hdfs:///output-folder1/

注意: ベストプラクティスとして、小さいファイルを大きいファイルに集約してファイル数を減らすには、[groupBy ] オプションを使用してから、[outputCodec] オプションを使用して大きいファイルを圧縮します。

トラブルシューティング

S3DistCp の問題をトラブルシューティングするには、ステップとタスクのログを確認します。

1.    Amazon EMR コンソールを開いて、[クラスター] を選択します。

2.    リストから [EMR cluster] を選択し、[Steps] をクリックします。

3.    [Log files] 列で、適切なステップのログを選択します。

controller: ステップの処理に関する情報。読み込みステップに問題が生じる場合、このログでスタックトレースを探すことができます。
syslog: Apache や Hadoop など、アマゾン以外のソフトウェアからのログ。
stderr: Hadoop がステップを実行中の標準エラーチャネル。
stdout: Hadoop がステップを実行中の標準出力チャネル。

ステップログから失敗の根本原因を特定できない場合は、S3DistCp のタスクログを確認します。

1.    Amazon EMR コンソールを開いて、[クラスター] を選択します。

2.    リストから [EMR cluster] を選択し、[Steps] をクリックします。

3.    [Log files] 列で、[View jobs] を選択します。

4.    [Actions] 列で、[View tasks] を選択します。

5.    失敗したタスクがある場合は、[試行の表示] を選択してタスクログを確認します。

一般的なエラー

メモリ不足のため、リデューサータスクが失敗しました。

ステップの stderr ログに次のようなエラーメッセージが表示される場合は、リデューサータスクの処理に必要なメモリが不足しているため S3DistCp ジョブが失敗しています。

Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
Container [pid=19135,containerID=container_1494287247949_0005_01_000003] is running beyond virtual memory limits. Current usage: 569.0 MB of 1.4 GB physical memory used; 3.0 GB of 3.0 GB virtual memory used. Killing container.

この問題を解決するには、以下のいずれかのオプションを使用してリデューサータスク用のメモリリソースを増やします。

Amazon S3 のアクセス許可エラー。

ステップの stderr ログに次のようなエラーメッセージが表示される場合は、アクセス許可の問題のため S3DistCp タスクが Amazon S3 にアクセスできません。

Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: REQUEST_ID

この問題を解決するには、「アクセス許可エラー」を参照してください。


関連情報

ログファイルを表示する

AWS公式
AWS公式更新しました 2年前