全部產品
Search
文件中心

E-MapReduce:Hive服務異常排查及處理

更新時間:Jul 01, 2024

本文介紹Hive服務異常的排查方法和解決方案。

異常排查

如果用戶端遇到異常或效能等問題,您可以按照如下步驟進行排查:

  • 排查異常時間段機器CPU、記憶體、網路以及磁碟是否有異常。

  • 排查組件是否正常:

    1. 檢查訪問叢集的Hive組件中HiveMetaStoreHiveServer2巡檢項是否有異常提示,如有則需要繼續根據對應巡檢項指標進行排查。例如GC指標提示記憶體使用量率過高,則需要調整記憶體。具體操作,請參見Hive記憶體參數調整

    2. 如果服務正常,則可查看叢集監控頁中Hive組件HiveMetaStoreHiveServer2的關鍵計量監控項,根據指標判斷服務參數是否需要調整。具體操作,請參見Hive巡檢項及服務關鍵計量說明

    3. 可繼續對HiveMetaStore或者HiveServer2的日誌進行排查,日誌路徑一般位於/mnt/disk1/log/hive/中,可逐步檢查組件的.log、.err、.out及GC等日誌,判斷HiveMetastore或者HiveServer2出現異常的真實原因。

HiveMetaStore後端資料庫問題

常見異常一:Host xxxx is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

問題原因:用戶端串連資料庫出錯次數太多,導致再次串連時被資料庫拒絕。

解決方案:

  • 方案1:可將資料庫參數max_connect_errors稍微調大,調整後可立即生效。

    重要

    max_connect_errors參數主要防止異常用戶端暴力破解資料庫密碼,建議您不要將該參數值設定過大。

    1. 登入資料庫,執行如下命令,查看當前值。

      show global variables like '%max_connect_errors%'
    2. 執行如下命令,將當前值修改為大一點的數值。

      set global max_connect_errors=[改成較大值]
  • 方案2:執行如下命令,清除出錯的Hosts緩衝或者登入資料庫執行flush hosts

    mysqladmin -u root -p flush-hosts

常見異常二:Metastore Connection Driver : com.mysql.jdbc.Driver Metastore connection User: xxx ,stderr=org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version. Underlying cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Communications link failure

問題原因:自建RDS未初始化Hive Meta資料庫。

解決方案:需要手動初始化Hive Meta資料庫。具體步驟,請參見Metastore初始化

HiveMetaStore問題

常見異常:org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Could not connect to meta store using any of the URIs provided

  • 問題原因1:可能是HiveMetastore中斷或者HiveMetastore壓力過大,例如長時間GC。

    解決方案:

    • 查看Metastore的GC日誌,可以將HiveMetastore記憶體調大。具體操作,請參見Hive記憶體參數調整

    • 查看Metastore的日誌,如果有java.lang.OutOfMemoryError相關報錯,可以將HiveMetastore記憶體調大。具體操作,請參見Hive記憶體參數調整

    • 查看是否有hive.metastore.transactional.event.listenershive.metastore.event.db.listener等配置,部分Listener會導致HiveMetaStore記憶體使用量率快速增長,可以去掉相關Listener之後重啟HiveMetaStore。

    • 如果無明顯原因,但用戶端請求或並發較多,也可以將Metastore記憶體調大,預設記憶體為500 MiB。具體操作,請參見Hive記憶體參數調整

    • 查看Metastore的日誌中的報錯資訊,如果HiveMetastore無法啟動,需要核對資料庫連結配置等是否正確。

  • 問題原因2:可能是用戶端與HiveMetastore之間網路不通,常見於自建ECS用戶端情境。

    解決方案:先查看兩台機器能否連通,如果不能則需要解決機器網路互連的問題。

HiveServer2問題

常見異常一:HiveServer2突然重啟,一段時間內恢複正常

問題原因:HiveServer2可能存在異常。查看執行的SQL或業務壓力是否增大,如果是則通常通過調整服務記憶體可應對或緩解這種問題。

解決方案:推薦根據異常排查步驟分別排查機器環境以及組件自身的問題。

常見異常二:Unexpected end of file when reading from HS2 server. The root cause might be too many concurrent connections

問題原因:HiveServer2壓力過大。

解決方案:排查是否有應用程式層(例如Flink作業等)持續調用Hive CLI,可以關閉持續調用Hive CLI的應用作業來解決問題。如果沒有發現異常應用,可以調整記憶體及hive.server2.thrift.max.worker.threads參數。關於調整記憶體的具體操作,請參見Hive記憶體參數調整

常見異常三:Could not connect to any of [xxx, 10000]

問題原因:HiveServer2可能存在異常。

解決方案:推薦根據異常排查步驟,分別排查機器環境或者組件自身的問題。

常見異常四:java.lang.OutOfMemoryError: Compressed class space

問題原因:HiveServer JVM Compressed class記憶體不足。

解決方案:在EMR控制台Hive服務配置頁面的hive-env.sh頁簽,修改 hive_server2_opts參數,調大Compressed class memory,例如:hive_server2_opts=-XX:CompressedClassSpaceSize=512m(其他參數不變)。