Hadoop異常Task發現分析

2022-05-05 17:42:08 字數 2459 閱讀 8920

hadoop作為乙個大型的分布式系統,當他的規模不斷的擴大,擴增到一定程度的時候,所使用的業務方自熱而然的也會變多,不同的業務方會提交各種各樣型別的任務,有人提交hive的查詢任務,有人會寫mapreduce解析程式的job.於是這就慢慢產生了乙個叫"多租戶"的概念.多租戶最簡單直接的理解就是乙個大的公共自行車場,被一波人共同使用,自行車被人借光了,你就不能使用了,你就得等.但是,當這個使用者越來越多的時候,乙個很棘手的問題就會發生,某些不良"使用者"獨佔大部分資源,導致其他的使用者根本無法正常使用工作.今天本文所討論的問題就是這個主題.對於此類問題,一般有2種解決方案,乙個是分析管理,人工分析,然後手動操作管理,手動更改配置限定一下個別使用者的資源使用上限,第二種則是使用者的資源隔離,每位使用者都固定分配好多少多少資源,只能用這麼多.論難度而言,後者比前者更有技術難度,因為要改核心**,今天就分析前面1種,就是分析找出這些"大戶".

把上面這個問題對應到hadoop系統中,就是找出哪個user用的container,memory,cpu-vcores最多.單純從hadoop自身提供的一些工具來看,這些其實對於我們的幫助不大,不管說是resourcemanager的後台頁還是jobhistory的歷史job資訊展示頁來看,這些資訊詳細程式還是有的,就是太散,缺乏乙個彙總這些資料資訊的地方.例如1個finished job,我想要知道他是不是異常的job,那麼我當然得需要知道裡面的task異常的多不多,於是我就得在頁面上繼續往裡點.這個數量小一點尚可接受,但是對於集群規模1天可達數萬個job的集群時,根本難以想象.所以我們的初步目標就是2點,1個是彙總一些資料.2分析彙總後的資料,並做一些處理並展示到頁面上,達到最直觀的效果.

我以目前我們公司對這方面的改造為1個例子,讓大家真實的了解如何做到自定義的task篩選.分為2大主題,1個是slow taks,慢任務.第二個是error task,異常任務,這個主要針對的是task attempt.ok,下面仔細的描述下.

在這裡所指的慢任務當然不是僅僅指的是執行時間的長短,只要涉及到時間值的,其他的維度也都是ok的,比如我們做了gc時間慢的,還有1個很關鍵的是啟動時間明顯偏慢的,尤其是啟動時間偏慢的任務,對於我們發現一些異常的問題將會非常有用.而對於這些慢的任務,我們會在頁面上設定乙個文字輸入框,使用者可以傳入自己想要設定的時間閾值.然後在jobinfo中進行過濾處理.下面給出乙個按照執行時間的慢任務篩選:

public mapgetelapsedslowtasks(job job, double ratio) 

for (task task : tasks.values()) else if (task.gettype() == tasktype.reduce

&& tmpelapsedtime >= reduceelapsedthresholdtime)

}return slowtasks;

}

裡面的許多平均值將會在前面的counttaskandattemptes()方法中計算好,這個方法會在前前台頁面中被呼叫.

...

stringbuilder jobstabledata = new stringbuilder("[\n");

jobid jobid = j.getid();

jobinfo job = new jobinfo(jb);

taskmap = null;

slowratio = double.parsedouble($(slow_tasks_ratio));

if($(slow_tasks_type).equals("elapsedtime"))else if($(slow_tasks_type).equals("gctime"))else if ($(slow_tasks_type).equals("slowstart")) else if ($(slow_tasks_type).equals("readdatalean")) else if ($(slow_tasks_type).equals("writedatalean"))

...

然後就是task資訊的展示了.

異常task嘗試的資訊的過濾就比較簡單一些,我們可以直接在前台頁中進行簡單判斷,過濾掉狀態為succeed狀態的記錄,一般剩下的就會是killed和failed,裡面會包含了note資訊,這個對於幫助我們分析問題非常有用.

...

for(entryta: taskattempts.entryset())

if (type == tasktype.map) else

...

新增導航欄:

新增slowtask執行時間等指標:

新增error taskattempt任務嘗試:

實現此邏輯的**鏈結如下,大家可以仔細閱讀這部分的**,從如何把功能加到導航欄上再到設定鏈結位址,都在下面的**鏈結中:

Hadoop異常Task發現分析

hadoop作為乙個大型的分布式系統,當他的規模不斷的擴大,擴增到一定程度的時候,所使用的業務方自熱而然的也會變多,不同的業務方會提交各種各樣型別的任務,有人提交hive的查詢任務,有人會寫mapreduce解析程式的job.於是這就慢慢產生了乙個叫 多租戶 的概念.多租戶最簡單直接的理解就是乙個大...

Task03異常處理

猜數字遊戲 題目描述 電腦產生乙個零到100之間的隨機數字,然後讓使用者來猜,如果使用者猜的數字比這個數字大,提示太大,否則提示太小,當使用者正好猜中電腦會提示,恭喜你猜到了這個數是 在使用者每次猜測之前程式會輸出使用者是第幾次猜測,如果使用者輸入的根本不是乙個數字,程式會告訴使用者 輸入無效 嘗試...

TASK3 異常處理

try 檢測範圍 except exception as reason 出現異常後的處理 首先執行try語句,若沒有異常發生則執行完try語句後結束,若發生異常,try語句中的其他語句將被忽略,異常型別與except中相符則執行except後的語句,不相符則上傳給上層的try語句。try 檢測範圍 ...