クラスターのログ記録とデバッグを設定する - Amazon EMR

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

クラスターのログ記録とデバッグを設定する

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

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

デフォルトログファイル

デフォルトで各クラスターはプライマリノードにログファイルを書き込みます。その書き込み先は、/mnt/var/log/ ディレクトリです。書き込まれたログファイルにアクセスするには、SSH を使用してプライマリノードに接続します (「SSH を使用してプライマリノードに接続する」を参照)。

注記

Amazon EMR リリース 6.8.0 以前を使用している場合、ログファイルはクラスターの終了時に Amazon S3 に保存されるため、プライマリノードが終了するとログファイルにアクセスできなくなります。Amazon EMR リリース 6.9.0 以降は、クラスターのスケールダウン中にログを Amazon S3 にアーカイブするため、クラスターで生成されたログファイルは、ノードが終了した後も保持されます。

何かの設定を有効にしなくても、ログファイルはプライマリノードに書き込まれます。これは、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 コンポーネントログ — 例えば MapReduce、Apache YARN と の両方に関連付けられているコンポーネントのログは、 の個別のフォルダに含まれています/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/ に格納されます。

Simple Storage Service (Amazon S3) にログファイルをアーカイブする

注記

現在、yarn logs ユーティリティを使って Simple Storage Service (Amazon S3) にログを集計することはできません。

Amazon EMR リリース 6.9.0 以降は、クラスターのスケールダウン中にログを Amazon S3 にアーカイブするため、クラスターで生成されたログファイルは、ノードが終了した後も保持されます。この動作は自動的に有効になるため、有効にするために何もする必要はありません。Amazon EMR リリース 6.8.0 以前は、クラスターを設定することにより、プライマリノードに格納されているログファイルを Simple Storage Service (Amazon S3) に定期的にアーカイブすることができます。こうすれば、クラスターの終了の理由が通常のシャットダウンかエラーのいずれであっても、クラスターの終了後にログファイルを確実に利用できます。Amazon EMR は、5 分間隔でログファイルを Simple Storage Service (Amazon S3) にアーカイブします。

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

注記

Amazon EMR コンソールは、再設計され、使いやすくなりました。古いコンソールと新しいコンソールエクスペリエンスの違いについては、「Amazon EMR コンソール」を参照してください。

New console
新しいコンソールを使用して Simple Storage Service (Amazon S3) にログファイルをアーカイブするには
  1. にサインインし AWS Management Console、https://console.aws.amazon.com/emr で Amazon EMR コンソールを開きます。

  2. 左側のナビゲーションペインの [EMR on EC2] で、[クラスター] を選択し、[クラスターの作成] を選択します

  3. [クラスターログ] で、[クラスター固有のログを Amazon S3 に公開] チェックボックスを選択します。

  4. [Amazon S3 のロケーション] フィールドに、ログを格納する Simple Storage Service (Amazon S3) のパスを入力 (または参照) します。バケットに存在しないフォルダの名前を入力した場合、Amazon S3 によりそのフォルダが作成されます。

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

  5. オプションで、[クラスター固有のログを暗号化] チェックボックスを選択します。次に、リストから AWS KMS キーを選択するか、キー ARN を入力するか、新しいキーを作成します。このオプションは、Amazon EMR バージョン 5.30.0 以降 (バージョン 6.0.0 は除く) でのみ使用できます。このオプションを使用するには、EC2 インスタンスプロファイルと Amazon EMR ロール AWS KMS の アクセス許可を に追加します。詳細については、「AWS KMS カスタマーマネージドキーを使用して Simple Storage Service (Amazon S3) に格納されたログファイルを暗号化するには」を参照してください。

  6. クラスターに適用するその他のオプションを選択します。

  7. クラスターを起動するには、[クラスターの作成] を選択します。

Old console
古いコンソールを使用して Simple Storage Service (Amazon S3) にログファイルをアーカイブするには
  1. 新しい Amazon EMR コンソールに移動し、サイドナビゲーションから [古いコンソールに切り替え] を選択します。古いコンソールに切り替えたときの動作の詳細については、「Using the old console」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

  1. Simple Storage Service (Amazon S3) にログファイルをアーカイブするには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。

    aws emr create-cluster --name "Test cluster" --release-label emr-7.1.0 --log-uri s3://DOC-EXAMPLE-BUCKET/logs --applications Name=Hadoop Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3
  2. --instance-groups パラメータを使用せずにインスタンス数を指定すると、1 つのプライマリノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、コマンドで指定したインスタンスタイプが使用されます。

    注記

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

AWS KMS カスタマーマネージドキーを使用して Simple Storage Service (Amazon S3) に格納されたログファイルを暗号化するには

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

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

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

  • 次の手順で示すように、Amazon EC2 インスタンスプロファイルと Amazon EMR ロールを、指定された AWS KMS カスタマーマネージドキーのキーユーザーのリストに追加する必要があります。

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

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

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

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

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

    6. 追加を選択します。

詳細については、「 Key Management Service デベロッパーガイド」の「Amazon EMR で使用される IAM サービスロール」および「キーポリシーの使用」を参照してください。 AWS

AWS CLIを使用して Simple Storage Service (Amazon S3) でログを集計するには

注記

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

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

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

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

    次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。さらに、赤色のテキストはいずれも独自の設定に置き換えることができます。

    aws emr create-cluster --name "Test cluster" \ --release-label emr-7.1.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、AWS CLI 「 コマンドリファレンス」を参照してください。

ログの場所

次のリストに、Amazon S3 のすべてのログタイプとそれらの場所を示します。Amazon EMR の問題のトラブルシューティングにこれらを使用できます。

ステップログ

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/steps/<step-id>/

アプリケーションログ

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/containers/

この場所には、stderr コンテナと stdoutdirectory.infoprelaunch.out、および launch_container.sh ログが含まれます。

リソースマネージャーログ

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/applications/hadoop-yarn/

Hadoop HDFS

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/applications/hadoop-hdfs/

この場所には NameNode、、 DataNode、および YARN TimelineServer ログが含まれます。

ノードマネージャーログ

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/applications/hadoop-yarn/

インスタンス状態ログ

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/daemons/instance-state/

Amazon EMR プロビジョニングログ

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/provision-node/*

Hive ログ

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/applications/hive/*

  • クラスター上の Hive ログを見つけるには、アスタリスク (*) を削除して、/var/log/hive/ を上記のリンクに追加します。

  • HiveServer2 つのログを検索するには、アスタリスク (*) を削除し、上記のリンクvar/log/hive/hiveserver2.logに を追加します。

  • HiveCLI ログを見つけるには、アスタリスク (*) を削除して、/var/log/hive/user/hadoop/hive.log を上記のリンクに追加します。

  • Hive メタストアサーバーログを見つけるには、アスタリスク (*) を削除して、/var/log/hive/user/hive/hive.log を上記のリンクに追加します。

Tez アプリケーションのプライマリノードまたはタスクノードで障害が発生している場合は、適切な Hadoop コンテナのログを提供してください。