Jigar が、大量のデータを
Amazon S3 から
EMR クラスターの HDFS にコピーする方法を説明します

Jigar_SEA

大量のデータを Amazon Simple Storage Service (Amazon S3) から Amazon EMR クラスターにコピーしたいのですが、最適な方法を教えてください。

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

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

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

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

3.     [Add step] を選択し、次のいずれかのオプションを選択します。
[Step type] で、[Custom JAR] を選択します。
[Name] に、S3DistCp ステップの名前を入力します。
[JAR location] に、「command-runner.jar」と入力します。詳しくは、「Command Runner」をご覧ください。
[Arguments] に、次のようなオプションを入力します。s3-dist-cp --src=s3://s3distcp-source/input-data --dest=hdfs://output-folder1
[Action on failure] で、[Continue] を選択します。

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

5.    ステップのステータスが [Completed] に変更されたら、次のようなコマンドを実行してファイルがクラスターにコピーされたことを確認します。

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

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

トラブルシューティング

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

ステップのログ:

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

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

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

  • controller:ステップの処理に関する情報。読み込みステップに問題が生じる場合、このログでスタックトレースを探すことができます。
  • syslog:ステップの Hadoop ジョブの実行についての説明。
  • stderr:Hadoop がステップを実行中の標準エラーチャネル。
  • stdout:Hadoop がステップを実行中の標準の出力チャネル。

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

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

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

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

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

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

共通エラー

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

ステップの 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.

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

S3 の権限エラー。

ステップの stderr ログに次のようなエラーメッセージが表示される場合は、権限の問題のため S3DistCp タスクが 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 サポートセンターをご覧ください。

公開日: 2018 年 09 月 27 日