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

最終更新日: 2020 年 2 月 11 日

大量のデータを 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 コンソールを開いて、[クラスター] を選択します。

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

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

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

トラブルシューティング

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

ステップのログ:

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

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

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

controller: ステップの処理に関する情報。読み込みステップに問題が生じる場合、このログでスタックトレースを探すことができます。
syslog: ステップの 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

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


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?