org.apache.hadoop.hive.ql.stats包含的类与接口如下图所示:

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.