クラスターのロギングとデバッグを構成する - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

クラスターのロギングとデバッグを構成する

クラスターの計画時に決定すべき事項の 1 つは、どの程度のデバッグサポートを必要とするかです。データ処理アプリケーションを初めて導入するお客様に対しては、小規模で典型的なデータサブセットを処理するアプリケーションをクラスターでテストすることをお勧めします。これを行う場合は、Amazon S3 へのログファイルのアーカイブなど、Amazon EMR が提供するすべてのデバッグツールを利用する可能性があります。

導入を終了し、データ処理アプリケーションをフル稼働状態に移行させたら、デバッグの規模を縮小してもかまいません。これにより、Amazon S3 にログファイルアーカイブを格納するコストを節約できるほか、Amazon S3 への状態の書き込みが必要でなくなるので、クラスターでの処理負荷を軽減することができます。もちろん、その反面、何かうまくいかないことがあっても問題を調査するのに使用できるツールは少なくなります。

デフォルトログファイル

デフォルトで各クラスターはマスターノードにログファイルを書き込みます。その書き込み先は、/mnt/var/log/ ディレクトリです。書き込まれたログファイルにアクセスするには、SSH を使用してマスターノードに接続します(「SSH を使用してマスターノードConnect。」を参照)。これらのログはマスターノードに存在するため、クラスタがシャットダウンされたか、エラーが発生したためにノードが終了すると、これらのログファイルは使用できなくなります。

何かの設定を有効にしなくても、ログファイルはマスターノードに書き込まれます。これは Amazon EMR および Hadoop のデフォルトの動作です。

クラスターでは、以下のような数種類のログファイルが生成されます。

  • ステップログ— これらのログは Amazon EMR サービスによって生成され、クラスターに関する情報と各ステップの結果を含みます。このログファイルは、マスターノードの /mnt/var/log/hadoop/steps/ ディレクトリに格納されます。各ステップは個別に番号が振られたサブディレクトリにそれぞれの結果を記録します。すなわち、1 番目のステップの場合は /mnt/var/log/hadoop/steps/s-stepId1/ に記録され、2 番目のステップの場合は /mnt/var/log/hadoop/steps/s-stepId2/ に記録される、といった具合です。13 文字のステップ識別子(stepId1、stepId2 など)は、クラスターに固有です。

  • Hadoop および YARN コンポーネントログ— Apache YARN および MapReduce の両方に関連付けられたコンポーネントのログは、たとえば、内の個別のフォルダに保存されます。/mnt/var/log/mnt/var/log にある Hadoop コンポーネントのログファイルの場所は、hadoop-hdfs、hadoop-mapreduce、hadoop-httpfs、hadoop-yarn です。hadoop-state-pusher ディレクトリは、Hadoop の状態プッシャープロセスの出力に使用されます。

  • ブートストラップアクションログ— ブートストラップアクションがジョブで使用された場合に、その結果がログに記録されます。このログファイルは、マスターノードの /mnt/var/log/bootstrap-actions/ ディレクトリに格納されます。各ブートストラップアクションは個別に番号が振られたサブディレクトリにそれぞれの結果を記録します。すなわち、1 番目のブートストラップアクションの場合は /mnt/var/log/bootstrap-actions/1/ に記録され、2 番目のブートストラップアクションの場合は /mnt/var/log/bootstrap-actions/2/ に記録される、といった具合です。

  • インスタンス状態ログ— これらのログは、CPU に関する情報、メモリの状態、およびノードのガベージコレクタースレッドです。このログファイルは、マスターノードの /mnt/var/log/instance-state/ に格納されます。

Amazon S3 にログファイルをアーカイブする

注記

現在、Amazon S3 へのログを集計するには、yarn logsユーティリティ.

クラスターを設定することにより、マスターノードに格納されているログファイルを Amazon S3 に定期的にアーカイブすることができます。これにより、通常のシャットダウンまたはエラーのいずれであっても、クラスターの終了後にログファイルを確実に利用できます。Amazon EMR は、5 分間隔でログファイルを Amazon S3 にアーカイブします。

ログファイルを Amazon S3 にアーカイブするには、クラスターの起動時に、この機能を有効にする必要があります。これは、コンソール、CLI または API を使用すれば可能です。デフォルトでは、コンソールを使用して起動したクラスターは、ログのアーカイブが有効になってます。CLI または API を使用して起動されるクラスターは、Amazon S3 へのログ記録を手動で有効にする必要があります。

コンソールを使用して Amazon S3 にログファイルをアーカイブするには

  1. で Amazon EMR コンソールを開きます。https://console.aws.amazon.com/elasticmapreduce/

  2. [クラスターの作成] を選択します。

  3. [Go to advanced options] を選択します。

  4. 汎用オプション] の [] セクションログ記録フィールドで、デフォルトのオプションを使用します。[Enabled (有効)]

    これにより、Amazon EMR が Amazon S3 に詳細なログデータをキャプチャするかどうかを決定します。これを設定できるのは、クラスターを作成するときのみです。詳細については、「」を参照してください ログファイルを表示する

  5. S3 フォルダフィールドに、ログを格納する Amazon S3 パスを入力(または参照)します。コンソールを使用して Amazon S3 パスを生成することもできます。バケットに存在しないフォルダの名前を入力した場合、そのフォルダは自動的に作成されます。

    この値が設定されると、Amazon EMR はクラスターの EC2 インスタンスから Amazon S3 にログファイルをコピーします。これにより、クラスターの終了時およびクラスターをホストしている EC2 が終了してもログファイルが失われるのを回避できます。これらのログは、トラブルシューティングに役立ちます。

    詳細については、「」を参照してください。ログファイルを表示する

  6. ログ暗号化[] フィールドで、S3 に保存されたログをAWSKMS カスタマーマネージドキー。次に、を選択します。AWSリストから KMS キーを入力するか、キーの ARN を入力します。また、新しい KMS キーを作成することもできます。

    このオプションは Amazon EMR バージョン 5.30.0 以降でのみ利用できます。このオプションを使用するには、EC2 インスタンスプロファイルと EMR ロールに KMS へのアクセス許可を追加します。詳細については、「」を参照してくださいを使用して Amazon S3 に保存されているログファイルを暗号化するにはAWSKMS カスタマーマネージドキー

  7. クラスターの計画と構成」で説明されているように、クラスターの作成に進みます。

を使用して Amazon S3 に保存されているログファイルを暗号化するにはAWSKMS カスタマーマネージドキー

Amazon EMR バージョン 5.30.0 以降 (Amazon EMR 6.0.0 を除く) では、Amazon S3 に保存されているログファイルをAWSKMS カスタマーマネージドキー。コンソールでこのオプションを有効にするには、「コンソールを使用して Amazon S3 にログファイルをアーカイブするには」の手順に従います。Amazon EC2 インスタンスプロファイルと Amazon EMR ロールは、以下の前提条件を満たしている必要があります。

  • クラスターで使用される Amazon EC2 インスタンスプロファイルには、を使用するアクセス許可が必要です。kms:GenerateDataKey

  • クラスターで使用される Amazon EMR ロールには、を使用するアクセス許可が必要です。kms:DescribeKey

  • Amazon EC2 インスタンスプロファイルと Amazon EMR ロールは、指定されたのキーユーザーのリストに追加する必要がありますAWSKMS カスタマー管理キー(次の手順を参照)。

    1. を開くAWS Key Management Service(AWS KMS) コンソールでhttps://console.aws.amazon.com/kms

    2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。

    3. 変更する CMK のエイリアスを選択します。

    4. [Key Users] のキーの詳細ページで、[Add] を選択します。

    5. キーユーザーの追加ダイアログボックスで、Amazon EC2 インスタンスプロファイルと Amazon EMR ロールを選択します。

    6. [Add] (追加) をクリックします。

詳細については、「」を参照してください。Amazon EMR で使用される IAM サービスロール, およびキーポリシーの使用のAWSキー管理サービス開発者ガイド。

を使用してログファイルを Amazon S3 にアーカイブするにはAWS CLI

を使用してログファイルを Amazon S3 にアーカイブするにはAWS CLIで、create-clusterコマンドを使用して、Amazon S3 ログパスを指定します。--log-uriパラメータ。

  • Amazon S3 にファイルをログに記録するには、次のコマンドを入力して、MyKeyEC2 key pair 名前を使用します。

    aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --log-uri s3://mybucket/logs/ --applications Name=Hadoop Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3

--instance-groups パラメータを使用せずにインスタンス数を指定すると、1 つのマスターノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、コマンドで指定したインスタンスタイプが使用されます。

注記

以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成していない場合は、「aws emr create-default-roles」と入力してそれらを作成してから、create-cluster サブコマンドを入力します。

での Amazon EMR コマンドの使用方法の詳細については、「」を参照してください。AWS CLI「」を参照してください。https://docs.aws.amazon.com/cli/latest/reference/emr

を使用して Amazon S3 のログを集計するにはAWS CLI

注記

現在、yarn logs ユーティリティを使ってログを集計することはできません。この手順でサポートされる集計のみ使用できます。

ログ集計(Hadoop 2.x)では、個々のアプリケーションのすべてのコンテナのログが 1 つのファイルにコンパイルされます。を使用して Amazon S3 へのログ集約を有効にするにはAWS CLIは、クラスターの起動時にブートストラップアクションを使用して、ログの集計を有効にし、ログを格納するバケットを指定します。

  • 重要

    この設定は、以前の EMR 4.x リリースでは動作しませんでした。このオプションを設定する場合は、4.3.0 以降のリリースを使用してください。

    ログ集計を有効にするには、次の内容が含まれる設定ファイル myConfig.json を作成します。

    [ { "Classification": "yarn-site", "Properties": { "yarn.log-aggregation-enable": "true", "yarn.log-aggregation.retain-seconds": "-1", "yarn.nodemanager.remote-app-log-dir": "s3:\/\/mybucket\/logs" } } ]

    次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。

    aws emr create-cluster --name "Test cluster" --release-label emr-4.5.0 --applications Name=Hadoop --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --configurations file://./myConfig.json

    --instance-groups パラメータを使用せずにインスタンス数を指定すると、1 つのマスターノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、コマンドで指定したインスタンスタイプが使用されます。

    注記

    以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成していない場合は、「aws emr create-default-roles」と入力してそれらを作成してから、create-cluster サブコマンドを入力します。

での Amazon EMR コマンドの使用方法の詳細については、「」を参照してください。AWS CLI「」を参照してください。https://docs.aws.amazon.com/cli/latest/reference/emr

デバッグツールを有効にします

デバッグツールを使うと、EMR コンソールからログファイルを、より容易に参照できます。詳細については、「」を参照してくださいデバッグツールでログファイルを表示する クラスターでデバッグを有効にすると、Amazon EMR によってログファイルが Amazon S3 にアーカイブされ、それらのファイルのインデックスが付けられます。これで、コンソールを使用して、クラスター関するステップ、ジョブ、タスク、およびタスク試行のログを、わかりやすい方法で参照できます。

EMR コンソールでデバッグツールを使用するには、コンソール、CLI、または API を使用してクラスターを起動するときに、デバッグを有効にする必要があります。

Amazon EMR コンソールを使用してデバッグツールを有効にするには

  1. で Amazon EMR コンソールを開きます。https://console.aws.amazon.com/elasticmapreduce/

  2. [クラスターの作成] を選択します。

  3. [Go to advanced options] を選択します。

  4. [Cluster Configuration (クラスターの設定)] セクションの [Logging (ログ記録)] フィールドで、[Enabled (有効)] を選択します。ログ記録を有効にしなければ、デバッグを有効にすることはできません。

  5. S3 の場所をログフォルダ S3 の場所フィールドに、ログを格納する Amazon S3 パスを入力します。

  6. [Debugging (デバッグ)] フィールドで [有効] を選択します。

    デバッグオプションによりAmazon SQS 交換が作成され、Amazon EMR サービスバックエンドにデバッグのメッセージが発行されます。交換にメッセージを発行する際、料金が発生する場合があります。詳細については、「」を参照してくださいhttp://aws.amazon.com/sqs

  7. クラスターの計画と構成」で説明されているように、クラスターの作成に進みます。

AWS CLI を使用してデバッグツールを有効にするには

AWS CLI を使用してデバッグを有効にするには、create-cluster サブコマンドを入力し、--enable-debugging パラメータを指定します。デバッグを有効にするには、--log-uri パラメータも指定する必要があります。

  • AWS CLI を使用してデバッグを有効にするには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。

    aws emr create-cluster --name "Test cluster" --release-label emr-4.1.0 --log-uri s3://mybucket/logs/ --enable-debugging --applications Name=Hadoop Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3

    --instance-groups パラメータを使用せずにインスタンス数を指定すると、1 つのマスターノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、コマンドで指定したインスタンスタイプが使用されます。

    注記

    以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成していない場合は、「aws emr create-default-roles」と入力してそれらを作成してから、create-cluster サブコマンドを入力します。

での Amazon EMR コマンドの使用方法の詳細については、「」を参照してください。AWS CLI「」を参照してください。https://docs.aws.amazon.com/cli/latest/reference/emr

例 Java SDK を使用してデバッグを有効にする

次の StepConfig を使用してデバッグを有効にします。

StepFactory stepFactory = new StepFactory(); StepConfig enabledebugging = new StepConfig() .withName("Enable debugging") .withActionOnFailure("TERMINATE_JOB_FLOW") .withHadoopJarStep(stepFactory.newEnableDebuggingStep());

この例では、new StepFactory() はデフォルトのリージョンとして us-east-1 を使用しています。クラスターが別のリージョンで起動されている場合、new StepFactory("region_name.elasticmapreduce") を使用してリージョンを指定する必要があります (new StepFactory("ap-northeast-2.elasticmapreduce") など)。

デバッグオプション情報

Amazon EMR リリース 4.1.0 から 5.27.0 は、すべてのリージョンでデバッグをサポートしています。他の EMR バージョンでは、デバッグオプションをサポートしていません。

Amazon EMR は、Amazon SQS キューを作成して、デバッグデータを処理します。メッセージ料金が発生する場合があります。ただし、Amazon SQS には最大 1,000,000 件までの無料利用枠があります。詳細については、「」を参照してください。Amazon SQS の詳細ページ

デバッグにはロールの使用が必要です。サービスロールとインスタンスプロファイルですべての Amazon SQS API オペレーションができるようになっている必要があります。ロールが Amazon EMR 管理ポリシーにアタッチされている場合、ロールの変更は必要ありません。カスタムロールの場合、sqs:* アクセス権限を与える必要があります。詳細については、「」を参照してくださいAmazon EMR アクセス権限の IAM サービスロールをAWSサービスとリソース