Linux ベースの HDInsight で Apache Hadoop サービスのヒープ ダンプを有効にする
ヒープ ダンプには、ダンプが作成された時点の変数の値を含む、アプリケーションのメモリのスナップショットが含まれています。 これらは、実行時に発生する問題を診断するのに便利です。
サービス
次のサービスのヒープ ダンプを有効にできます。
- Apache hcatalog - tempelton
- Apache hive - hiveserver2、metastore、derbyserver
- mapreduce - jobhistoryserver
- Apache yarn - resourcemanager、nodemanager、timelineserver
- Apache hdfs - datanode、secondarynamenode、namenode
HDInsight によって実行されるマップと削減のプロセスに対して、ヒープ ダンプを有効にすることもできます。
ヒープ ダンプ構成について
ヒープ ダンプは、サービスの開始時にオプション (opts またはパラメーターとも呼ばれる) を JVM に渡すことによって有効になります。 ほとんどの Apache Hadoop サービスでは、サービスを開始するのに使用されるシェル スクリプトを変更することで、これらのオプションを渡すことができます。
各スクリプトには、JVM に渡されるオプションを含む *_OPTS のエクスポートが含まれています。 たとえば、hadoop env.sh スクリプトには、export HADOOP_NAMENODE_OPTS=
で始まる行に NameNode サービスのオプションが含まれています。
これらの処理が MapReduce サービスの子プロセスである場合は、マップと削減のプロセスが多少異なります。 マップや削減のプロセスはそれぞれ子コンテナーで実行され、JVM オプションを含む 2 つのエントリがあります。 どちらも mapred-site.xmlに含まれています。
- mapreduce.admin.map.child.java.opts
- mapreduce.admin.reduce.child.java.opts
注意
Apache Ambari がクラスター内のノード間の変更のレプリケーションを処理するように、Ambari を使用してスクリプトと mapred-site.xml 設定の両方を変更することをお勧めします。 具体的な手順については、「Apache Ambari の使用」セクションを参照してください。
ヒープ ダンプを有効にする
次のオプションは、OutOfMemoryError が発生したときに、ヒープ ダンプを有効にします。
-XX:+HeapDumpOnOutOfMemoryError
+ は、このオプションが有効になっていることを示します。 既定では無効になっています。
警告
ヒープ ダンプは、ダンプ ファイルが大きくなる可能性があるため、既定では HDInsight の Hadoop サービスで無効になっています。 トラブルシューティングのために有効にした場合は、問題を再現してダンプ ファイルを収集したら、忘れずに無効にしてください。
ダンプの場所
ダンプ ファイルの既定の場所は、現在の作業ディレクトリです。 次のオプションを使用して、ファイルの保存先を制御できます。
-XX:HeapDumpPath=/path
たとえば、-XX:HeapDumpPath=/tmp
を使用すると、ダンプは /tmp ディレクトリに保存されます。
スクリプト
OutOfMemoryError が発生したときに、スクリプトをトリガーすることもできます。 たとえば、通知をトリガーすると、エラーが発生したことがわかります。 OutOfMemoryError に対してスクリプトをトリガーするには、次のオプションを使用します。
-XX:OnOutOfMemoryError=/path/to/script
Note
Apache Hadoop は分散システムなので、使用するスクリプトは、サービスを実行しているクラスター内のすべてのノードに配置する必要があります。
また、スクリプトはサービスが実行するアカウントからアクセスできる場所にあり、実行権限を提供する必要もあります。 たとえば、スクリプトを /usr/local/bin
に保存し、chmod go+rx /usr/local/bin/filename.sh
を使用して読み取りと実行権限を付与できます。
Apache Ambari の使用
サービスの構成を変更するには、次の手順を実行します。
Web ブラウザーから、
https://CLUSTERNAME.azurehdinsight.net
に移動します。ここで、CLUSTERNAME
はクラスターの名前です。左側の一覧を使用して、変更するサービス領域を選択します。 たとえば、 [HDFS]です。 中央の領域で、 [Configs] タブを選択します。
[フィルター] エントリに「opts」と入力します。 このテキストを含む項目のみが表示されます。
ヒープ ダンプを有効にするサービスの *_OPTS エントリを検索し、有効にするオプションを追加します。 次の図では、
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/
を HADOOP_NAMENODE_OPTS エントリに追加しました。Note
マップまたは削減の子プロセスのヒープ ダンプが有効になっている場合は、mapreduce.admin.map.child.java.opts と mapreduce.admin.reduce.child.java.opts というフィールドを探します。
[保存] ボタンを押して、変更を保存します。 変更を説明する短いメモを入力できます。
変更が適用されると、再起動が必要であることを示すアイコンが 1 つ以上のサービスの横に表示されます。
再起動が必要な各サービスを選択し、[サービス アクション] ボタンを使用して [メンテナンス モードの有効化] を選択します。 メンテナンス モードは、再起動したときに、このサービスからアラートが生成されないようにします。
メンテナンス モードを有効にしたら、サービスの [再起動] ボタンを使用して [すべてを再起動] を選択します。
Note
[再起動] ボタンのエントリは、サービスによって異なる場合があります。
サービスが再開したら、[サービス アクション] ボタンを使用して [メンテナンス モードの無効化] を選択します。 これにより、Ambari はサービスのアラートの監視を再開します。