本文介紹Hive服務異常的排查方法和解決方案。
異常排查
如果用戶端遇到異常或效能等問題,您可以按照如下步驟進行排查:
排查異常時間段機器CPU、記憶體、網路以及磁碟是否有異常。
排查組件是否正常:
檢查訪問叢集的Hive組件中HiveMetaStore和HiveServer2巡檢項是否有異常提示,如有則需要繼續根據對應巡檢項指標進行排查。例如GC指標提示記憶體使用量率過高,則需要調整記憶體。具體操作,請參見Hive記憶體參數調整。
如果服務正常,則可查看叢集監控頁中Hive組件HiveMetaStore和HiveServer2的關鍵計量監控項,根據指標判斷服務參數是否需要調整。具體操作,請參見Hive巡檢項及服務關鍵計量說明。
可繼續對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參數主要防止異常用戶端暴力破解資料庫密碼,建議您不要將該參數值設定過大。
登入資料庫,執行如下命令,查看當前值。
show global variables like '%max_connect_errors%'執行如下命令,將當前值修改為大一點的數值。
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.listeners和hive.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(其他參數不變)。