在以 Linux 為基礎的 HDInsight 上啟用 Apache Hadoop 服務的堆積傾印

堆積傾印包含應用程式的記憶體快照集,包括建立傾印時變數的值。 因此,它們適用於診斷運行時間發生的問題。

服務

您可以啟用下列服務的堆積傾印:

  • Apache hcatalog - tempelton
  • Apache hive - hiveserver2、中繼存放區、derbyserver
  • mapreduce - jobhistoryserver
  • Apache yarn - resourcemanager、nodemanager、timelineserver
  • Apache hdfs - datanode、secondarynamenode、namenode

您也可以為 HDInsight 所執行的對應和縮減進程啟用堆積傾印。

了解堆積傾印設定

啟動服務時,會將選項(有時稱為選擇或參數)傳遞至 JVM,以啟用堆積傾印。 針對大部分 的 Apache Hadoop 服務,您可以修改用來啟動服務的殼層腳本來傳遞這些選項。

在每個腳本中,都會匯出 *_OPTS,其中包含傳遞至 JVM 的選項。 例如,在 hadoop-env.sh 腳本中,開頭export HADOOP_NAMENODE_OPTS=的行包含 NameNode 服務的選項。

對應和縮減程式稍有不同,因為這些作業是 MapReduce 服務的子進程。 每個對應或縮減進程都會在子容器中執行,而且有兩個專案包含 JVM 選項。 這兩者都包含在 mapred-site.xml

  • mapreduce.admin.map.child.java.opts
  • mapreduce.admin.reduce.child.java.opts

注意

我們建議使用 Apache Ambari 來修改腳本和mapred-site.xml設定,因為 Ambari 會處理在叢集中節點之間復寫變更。 如需特定步驟,請參閱使用 Apache Ambari 一節。

啟用堆積傾印

當 OutOfMemoryError 發生時,下列選項會啟用堆積傾印:

-XX:+HeapDumpOnOutOfMemoryError

+表示已啟用此選項。 預設為停用。

警告

根據預設,HDInsight 上的 Hadoop 服務不會啟用堆積傾印,因為傾印檔案可能很大。 如果您啟用它們以進行疑難解答,請記得在重現問題並收集傾印檔案之後加以停用。

傾印位置

傾印檔案的預設位置是目前的工作目錄。 您可以使用下列選項來控制檔案的儲存位置:

-XX:HeapDumpPath=/path

例如,using -XX:HeapDumpPath=/tmp 會導致傾印儲存在 /tmp 目錄中。

指令碼

當 OutOfMemoryError 發生時,您也可以觸發腳本。 例如,觸發通知,讓您知道發生錯誤。 使用下列選項在 OutOfMemoryError觸發腳稿:

-XX:OnOutOfMemoryError=/path/to/script

注意

由於 Apache Hadoop 是分散式系統,因此使用的任何腳本都必須放在服務執行所在的叢集中的所有節點上。

腳本也必須位於服務執行身分的帳戶可存取的位置,而且必須提供執行許可權。 例如,您可能想要將腳本儲存在 中 /usr/local/bin ,並使用 chmod go+rx /usr/local/bin/filename.sh 來授與讀取和執行許可權。

使用 Apache Ambari

若要修改服務的組態,請使用下列步驟:

  1. 從網頁瀏覽器瀏覽至 https://CLUSTERNAME.azurehdinsight.net,其中 CLUSTERNAME 是叢集的名稱。

  2. 使用左側的 清單,選取您想要修改的服務區域。 例如, HDFS。 在中央區域中,選取 [ 設定] 索引標籤

    Image of Ambari web with HDFS Configs tab selected.

  3. 使用 Filter... 專案,輸入 opts。 只會顯示包含此文字的專案。

    Apache Ambari config filtered list.

  4. 尋找您想要為其啟用堆積傾印之服務的 *_OPTS 專案,並新增您想要啟用的選項。 在下圖中,我已新增 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/HADOOP_NAMENODE_OPTS 專案:

    Apache Ambari hadoop-namenode-opts.

    注意

    啟用對應或縮減子進程的堆積傾印時,尋找名為 mapreduce.admin.map.child.java.optsmapreduce.admin.reduce.child.java.opts 的字段。

    使用 [ 儲存] 按鈕來儲存變更。 您可以輸入描述變更的簡短附註。

  5. 套用變更之後, 重新啟動必要的 圖示會出現在一或多個服務旁邊。

    restart required icon and restart button.

  6. 選取需要重新啟動的每個服務,並使用 [ 服務動作] 按鈕來 開啟維護模式。 維護模式可防止當您重新啟動警示時,從服務產生警示。

    Turn on hdi maintenance mode menu.

  7. 啟用維護模式之後,請使用 服務的 [重新啟動] 按鈕來 重新啟動所有效果

    Apache Ambari Restart All Affected entry.

    注意

    [重新啟動] 按鈕的專案可能與其他服務不同。

  8. 重新啟動服務之後,請使用 [ 服務動作] 按鈕來 關閉維護模式。 此 Ambari 可繼續監視服務的警示。