注:本文是為了配合《
spark核心設計的藝術——架構設計與實現
》一書的內容而編寫,目的是為了節省成本、方便讀者查閱。書中附錄d的內容都在本文呈現。
metrics是codahale提供的第三方度量倉庫。metrics作為一款監控指標的度量類庫,可以為第三方庫提供輔助統計資訊,還可以將度量資料傳送給ganglia和graphite以提供圖形化的監控。
本文將對metrics中的核心類進行介紹,方便讀者對spark度量系統更加細緻深入的理解。
metricregistry是metrics提供的度量容器,這裡先列出metricregistry的主要結構。
public class metricregistry implements metricset
從上面**可以看出metricregistry中會快取各種度量和***,下面對metricregistry中的一些方法進行介紹。
功能描述:構建形如「字串1.字串2…字串n-1.字串n」這樣的字串。任何空值或空字串都將被過濾。
public static string name(string name, string... names)
}return builder.tostring();
}
功能描述:當有新的metric新增到concurrentmapmetrics時,呼叫此方法。根據metric的子介面的不同,呼叫不同方法。例如:gauge則呼叫***的ongaugeadded;counter則呼叫***的oncounteradded;histogram則呼叫***的onhistogramadded。
private void notifylistenerofaddedmetric(metricregistrylistener listener, metric metric, string name) else if (metric instanceof counter) else if (metric instanceof histogram) else if (metric instanceof meter) else if (metric instanceof timer) else
}
功能描述:當有新的metric新增到concurrentmapmetrics時,呼叫此方法。遍歷呼叫***快取listlisteners中的所有***,呼叫notifylistenerofaddedmetric。
private void onmetricadded(string name, metric metric)
}
功能描述:如果metric的型別是metric並且metrics中還沒有此metric,則將它新增到metrics;
如果metric的型別是metricset,則metricset中包含的所有新的metric新增到快取concurrentmapmetrics;以上新增過程都伴隨onmetricadded的呼叫。
public t register(string name, t metric) throws illegalargumentexception else else
}return metric;
} private void registerall(string prefix, metricset metrics) throws illegalargumentexception else }}
gauge是metrics提供的用於估計度量值的特質,其實現如下:
public inte***ce gaugeextends metric
slf4jreporter是metrics提供的使用實現了slf4j介面的實現類的方法,將度量輸出到日誌的類。
功能描述:將度量輸出到日誌的方法。
@override
public void report(sortedmapgauges,
sortedmapcounters,
sortedmaphistograms,
sortedmapmeters,
sortedmaptimers)
for (entryentry : counters.entryset())
for (entryentry : histograms.entryset())
for (entryentry : meters.entryset())
for (entryentry : timers.entryset()) }}
功能描述:將估計度量輸出到日誌的方法。(備註:
slf4jreporter的
report
方法中分別對
gauge
、counter
、histogram
、meter
及timer
進行輸出,為說明問題,附錄
d只挑選了對
gauge
metrics
原始碼。)
private void loggauge(string name, gauge gauge) , value={}", prefix(name), gauge.getvalue());
}
slf4jreporter的日誌輸出依賴於loggerproxy,根據loggerproxy的類名,我們知道這是乙個有關日誌輸出的**類,其實現如下:
/* private class to allow logger configuration */
static abstract class loggerproxy
abstract void log(marker marker, string format, object... arguments);
abstract boolean isenabled(marker marker);
}
可以看到loggerproxy實際上不過是**了org.slf4j.logger介面對日誌輸出。
scheduledreporter是consolereporter、csvreporter、slf4jreporter及graphitereporter的共同父類,scheduledreporter中的很多方法被子類所共用。
功能描述:啟動度量輸出工作,實質為定時器不斷地呼叫report方法輸出。
public void start(long period, timeunit unit) catch (runtimeexception ex) #report. exception was suppressed.", scheduledreporter.this.getclass().get******name(), ex);}}
}, period, period, unit);
}
功能描述:停止度量輸出工作,實質為停止定時器。
public void stop()
}} catch (interruptedexception ie)
}
經過近一年的準備,《
spark核心設計的藝術 架構設計與實現
》一書現已出版發行,圖書如圖:
京東:
京東:
附錄 養城之戰
西元前511年 吳王闔閭三年 夏,吳國派出使臣,責令徐國 今安徽泗縣 和鐘吾國 今江蘇宿遷東北 交出領兵在外的公子掩餘和燭庸。二國依仗有強楚撐腰,拒不從命,並私自放走二公子,讓他們去投奔楚國。楚昭王十分得意,立即派出大員隆重迎接二公子,並讓二公子在養地 今河南沈丘縣 暫時住。接著,又命令莠尹然 左司...
Storm入門之附錄A
storm客戶端能讓我們使用命令管理集群中的拓撲。按照以下步驟安裝storm客戶端 把storm目錄加入path環境變數,這樣就不用每次都輸入全路徑執行storm了。如果我們使用了 usr local bin storm,執行export path path usr local bin storm。...
附錄A 術語表
這裡列出了本書中用到的一些技術術語,在別的地方你也能找到它們,不過我想還是把它們集中一處,以便查詢。堆表示程式可用的記憶體區,也叫動態記憶體區。堆記憶體的分配與釋放次序是隨機的,這就是說,如果你按次序分配三塊記憶體,那麼到時並不按分配時的次序釋放記憶體。堆管理器會負責所有操作,你只需簡單地使用get...