org.apache.hadoop.hive.ql.stats包含的類與接口如下圖所示:
其中:
接口:
ClientStatsPublisher :
包含run方法,在hive中並沒有其他類實現該方法,這個主要用於hive stats擴展使用。具體實現需要由
hive.client.stats.publishers這個參數決定,這個參數是用逗號隔開的stats publisher,這些stats publisher被每一個job調用。
該參數默認爲空。其中client stats publisher是實現ClientStatsPublisher 該接口的java類的名稱。
StatsPublisher:
發佈stats的接口,聲明瞭init,connect,publishStat,closeConnection等方法,需要發佈stats的類都需要實現該接口。
init方法:
這個方法需要一次初始化,可能創建數據庫和表(如果不存在)。爲了達到僅初始化一次的目的,這個方法需要在hive client端調用,而不是mapper/reducer調用。
參數:hconf HiveConf : 包含用於連接中間stats數據庫的配置參數信息。
返回值:如果初始化成功,返回true,否則返回false
connect方法:
連接到中間stats數據庫。
參數:hconf HiveConf : 包含用於連接中間stats數據庫的配置參數信息。
返回值:如果連接成功,返回true,否則返回false
publishStat方法:
這個方法發佈一個給定的統計信息到一個磁盤存儲,可能是hbase或者Mysql
參數:fileID :一個字符串標識,統計信息被所有的mapper/reducer發佈然後被收集,這個ID對於每個task每個輸出的partition是唯一的。
如:輸出目錄名稱(每個FileSinkOperator唯一)+分區規格(僅用於動態分區)+taskID(task文件的最後部分)
stats:一個鍵值對集合,key是發佈統計信息的名稱,value是給定統計信息的值。
返回值: 如果成功返回true,否則返回false
closeConnection方法:
關閉臨時存儲連接。
StatsAggregator:
收集Stats的接口。
connect方法:
連接到中間stats數據庫。
參數:hconf HiveConf : 包含用於連接中間stats數據庫的配置參數信息。
sourceTask
返回值:如果連接成功,返回true,否則返回false
aggregateStats方法:
這個方法從所用的task中聚集給定的統計信息,聚集完後,這個方法會自動的將所用記錄清除。
keyPrefix:key的前綴用於StatsPublisher進行發佈stats,例如,如果StatsPublisher用一下合成key值發佈stats:
輸出目錄名稱(每個FileSinkOperator唯一)+分區規格(僅用於動態分區)+taskID(task文件的最後部分)
那麼keyPrefix將會是開頭的前兩個組件合成。
statType:一個被髮布的字符串,不是key值,例如:numRows
返回值:一個long值,轉化爲String類型,如果有任何異常或錯誤,將會返回null
closeConnection方法:
關閉臨時存儲連接。
cleanUp方法:
在stats被收集之後調用該方法;一旦我們支持多個統計信息,我們將不會執行在收集後自動執行cleanUp。
這個方法調用後,closeConnection必須調用。
這個方法同樣可以用於清除統計信息,儘管信息沒有被收集。通常發生於,job失敗或者強制停止發佈一些統計信息。
keyPrefix:key的前綴用於StatsPublisher進行發佈stats。
返回值:cleanup成功返回true,否則false
StatsCollectionTaskIndependent:
這個是一個maker interface,用於區分stats publisher / aggregator,是否每個task都跟蹤stats.