天天看點

Hive基本所有的application狀态一直處于ACCPETED狀态解決方案:

最近早上來發現hive叢集排程平台所有的任務都處于ACCPETED狀态,之前以為是叢集的原因,重新開機了之後感覺好了,結果第二天來還是同樣的情況,排查了情況沒看到報錯資訊,倒是看到了如下關鍵日志:

not starting application as amIfStarted exceeds amLimit

大緻意思就是不能運作應用因為所需要的資源已經超過最大資源了,如果你的也有類似日志,通過yarn指令檢視各個節點的情況:

yarn node-list all

Hive基本所有的application狀态一直處于ACCPETED狀态解決方案:

如上圖,現在叢集的所有節點均處于RUNNING狀态,如果你的節點有被辨別為UNHEALTH狀态的,那就說明對應節點的資源變得不可用了(記憶體cpu變得不可用),對應的applicaiton就拿不到資源啟動,這是因為在hadoop配置檔案yarn-site.xml中有那麼一個控制節點磁盤最大使用率的參數:

yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage

<property>
         <name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
         <value>98</value>
   </property>
           

這個參數預設是90,也就是該節點磁盤資源使用率超過90%對應的資源就變得不可用了,再使用指令檢視叢集的資源使用情況:

hadoop dfsadmin -report 

Hive基本所有的application狀态一直處于ACCPETED狀态解決方案:

這裡叢集總的使用情況已經超過80%,其實叢集資源超過80%的時候就應該達到告警級别了!

解決方案:

1.因為情況緊急,磁盤使用率已達到92%,無法馬上擴容,眼下隻有将參數調大,将如下參數磁盤使用率最高調至98%(上面)

yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage

不過這隻能緩解燃眉之急,就有了方案2

2.排查數倉資料表占用情況,使用指令(記得替換數倉位址)

hdfs dfs -du -s hdfs://SH1/user/hive/warehouse/nginxlogdb.db/* | sort -nr  > disk.txt 

挑選占用情況比較嚴重并且不太重要的表,将曆史維表删除,隻保留最近一個月的資料,然後!!!!重點來了,這也是hive比較核心的東西,很多公司都不重視,覺得hive就是寫sql,誰不會(鄙視臉,沒看過hive程式設計指南的童鞋們經常寫一些執行低效的sql,直接把資源耗完!當然如果你覺得公司有的是錢買伺服器那就當我沒說),那就是壓縮存儲,hive中幾種壓縮格式請參看下面這篇文章  https://blog.csdn.net/helloxiaozhe/article/details/78465467  ,其中,orc壓縮格式壓縮率是最秀的,本地對同一批資料進行了測試壓縮率高達90%,這是什麼概念,十台伺服器存的資料我現在用一台伺服器就行了!省了九台伺服器的錢!當然最後總體壓縮下來壓縮率維持在60%-70%,也是非常棒的了,選了幾張占用情況比較嚴重的表重做成以orc格式存儲的表,最後叢集磁盤占用直接由90%以上降到40%附近!成功搞定上述問題!具體細節就不細說了,hive中使用orc格式常用做法:

set hive.default.fileformat=orc;

create table tb_name stored as orc as select * from table_name;      // 強烈推薦

create table tb_name(
xxx string
)stored as orc;
           

最後所有application都能無障礙跑了!

繼續閱讀