Apache HBase Master (HMaster) 無法在 Azure HDInsight 中啟動

本文說明與 Azure HDInsight 叢集互動時若遇到問題,可使用哪些疑難排解步驟和可能的解決方案。

情節:Master startup cannot progress, in holding-pattern until region comes online

問題

HMaster 由於下列警告無法啟動:

hbase:namespace,,<timestamp_region_create>.<encoded_region_name>.is NOT online; state={<encoded_region_name> state=OPEN, ts=<some_timestamp>, server=<server_name>}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region onlined. 

例如,參數值在實際訊息中可能不同:

hbase:namespace,,1546588612000.0000010bc582e331e3080d5913a97000. is NOT online; state={0000010bc582e331e3080d5913a97000 state=OPEN, ts=1633935993000, server=<wn fqdn>,16000,1622012792000}; ServerCrashProcedures=false. Master startup cannot progress, in holding-pattern until region onlined.

原因

HMaster 會先檢查區域伺服器上的 WAL 目錄,之後才讓 OPEN 區域重新上線。 在此情況下,如果該目錄不存在,則其尚未開始

解決方法

  1. 使用命令建立此虛擬目錄:sudo -u hbase hdfs dfs -mkdir /hbase-wals/WALs/<wn fqdn>,16000,1622012792000

  2. 從 Ambari UI 重新啟動 HMaster 服務。

如果您要使用 hbase-2.x,則請參閱如何使用 hbck2 來指派命名空間和中繼資料表中的詳細資訊

案例:不可部分完成的重新命名失敗

問題

在啟動程序期間發現非預期的檔案。

原因

在啟動程序期間,HMaster 會執行許多初始化步驟,包括將資料從暫存 (.tmp) 資料夾移至資料資料夾。 HMaster 也會檢視預寫記錄 (WAL) 資料夾,以查看是否有任何沒有回應的區域伺服器。

HMaster 會在 WAL 資料夾上執行基本的列出命令。 如果任何時間 HMaster 在任一資料夾中看到未預期的檔案,則會擲回例外狀況,而且不會啟動。

解決方法

請檢查呼叫堆疊,並嘗試判斷哪一個資料夾可能會造成問題 (例如,它可以是 WAL 資料夾或 .tmp 資料夾)。 接著,在 Azure 儲存體總管中或使用 HDFS 命令嘗試找出問題檔案。 此檔案通常稱為 *-renamePending.json。 (*-renamePending.json 檔案是日誌檔案,用來在 WASB 驅動程式中實作不可部分完成的重新命名作業。由於此實作中發生錯誤 (bug),因此這些檔案可能會在發生處理序損毀等狀況之後遺留下來。)請在 Cloud Explorer 中或使用 HDFS 命令強制刪除此檔案。

這個位置有時候還可能有名稱類似 $$$.$$$ 的暫存檔案。 您必須使用 HDFS ls 命令來查看此檔案;您無法在 Azure 儲存體總管中查看此檔案。 若要刪除此檔案,請使用 HDFS 命令 hdfs dfs -rm /\<path>\/\$\$\$.\$\$\$

執行這些命令之後,HMaster 應立即啟動。


錯誤:未列出任何伺服器位址

問題

您可能會看到訊息,其指出 hbase: meta 資料表不在線上。 執行 hbck 可能會報告 hbase: meta table replicaId 0 is not found on any region.。在 HMaster 記錄中,您可能會看到訊息:No server address listed in hbase: meta for region hbase: backup <region name>

原因

重新啟動 HBase 之後,HMaster 無法初始化。

解決方法

  1. 在 HBase Shell 中,輸入下列命令 (視情況變更實際值):

    scan 'hbase:meta'
    delete 'hbase:meta','hbase:backup <region name>','<column name>'
    
  2. 刪除 hbase: namespace 項目。 此項目可能是掃描 hbase: namespace 資料表時所回報的相同錯誤。

  3. 從 Ambari UI 重新啟動使用中的 HMaster,使 HBase 處於執行中狀態。

  4. 在 HBase Shell 中,若要啟動所有離線資料表,請執行下列命令:

    hbase hbck -ignorePreCheckPermission -fixAssignments
    

情節:java.io.IOException: Timedout

問題

HMaster 逾時,發生類似以下的嚴重例外狀況:java.io.IOException: Timedout 300000ms waiting for namespace table to be assigned

原因

如果您有許多資料表和區域在重新啟動 HMaster 服務時尚未排清,則可能會遇到此問題。 逾時是 HMaster 的已知缺陷。 一般叢集啟動工作可能需要很長的時間。 如果命名空間資料表尚未指派,HMaster 會關閉。 在存在大量未清除的資料且逾時 5 分鐘不足的情況下,會發生長時間的啟動作業。

解決方法

  1. 從 Apache Ambari UI,移至 HBase> [設定]。 在自訂 hbase-site.xml 檔案中,新增下列設定:

    Key: hbase.master.namespace.init.timeout Value: 2400000  
    
  2. 重新啟動必要的服務 (HMaster,以及其他可能的 HBase 服務)。


案例:頻繁的區域伺服器重新啟動

問題

節點會定期重新開機。 從區域伺服器記錄,您可能會看到類似下列的項目:

2017-05-09 17:45:07,683 WARN  [JvmPauseMonitor] util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 31000ms
2017-05-09 17:45:07,683 WARN  [JvmPauseMonitor] util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 31000ms
2017-05-09 17:45:07,683 WARN  [JvmPauseMonitor] util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 31000ms

原因:zookeeper 工作階段逾時

regionserver JVM GC 暫停。 暫停會導致 regionserver 沒有回應,且無法在 zookeeper 工作階段逾時 40 秒內將活動訊號傳送給 HMaster。 HMaster 認為 regionserver 已經死亡,而且會中止和重新啟動 regionserver

如要排解問題,請變更 Zookeeper 工作階段逾時,不僅僅是 hbase-site 設定 zookeeper.session.timeout,也需要變更 Zookeeper zoo.cfg 設定 maxSessionTimeout

  1. 存取 Ambari UI,移至 [HBase] -> [組態] -> [設定],在 [逾時] 區段中,變更 Zookeeper 工作階段逾時的值。

  2. 存取 Ambari UI,移至 [Zookeeper] -> [組態] -> [自訂]zoo.cfg,新增/變更下列設定。 請確定值與 HBase zookeeper.session.timeout 相同。

    Key: maxSessionTimeout Value: 120000  
    
  3. 將必要的服務重新啟動。

原因:多載的 RegionServer

請遵循 Number of regions per RS - upper bound 以計算上限。 例如:8000 (Region server Heap -- Xmx in MB) * 0.4 (hbase.regionserver.global.memstore.size) /64 (hbase.regionserver.hlog.blocksize/2) = 50

如要排解問題,請擴大您的 HBase 叢集。


案例:記錄分割失敗

問題

HMasters 無法在 HBase 叢集上出現。

原因

次要儲存體帳戶的 HDFS 和 HBase 設定設定錯誤。

解決方法

set hbase.rootdir: wasb://@.blob.core.windows.net/hbase 並重新啟動 Ambari 上的服務。


下一步

如果您沒有看到您的問題,或無法解決您的問題,請瀏覽下列其中一個管道以取得更多支援:

  • 透過 Azure 社群支援獲得由 Azure 專家所提供的解答。

  • 連線至 @AzureSupport,這是用來改善客戶體驗的官方 Microsoft Azure 帳戶。 將 Azure 社群連線到正確的資源:解答、支援和專家。

  • 如果需要更多協助,您可在 Azure 入口網站提交支援要求。 從功能表列中選取 [支援] 或開啟 [說明 + 支援] 中樞。 如需詳細資訊,請參閱如何建立 Azure 支援要求。 Microsoft Azure 訂用帳戶包括訂用帳戶管理及帳務支援的存取權,而技術支援由其中一項 Azure 支援方案提供。