Hive统计信息是在0.7引入的(https://issues.apache.org/jira/browse/HIVE-33),对于Insert/Load/Merge等DDL操作时在Task后加入一个StatsTask进行统计信息收集,并订阅前置Operator(FileSink/TableScan)的feed.不过现在这个stats并没有使用起来.
线上虽然开启了hive.stats.autogather=true想搜集一些信息,但是ETL Job经常报:[Warning] could notupdate stats,查看日志发现:
ERRORjdbc.JDBCStatsPublisher (JDBCStatsPublisher.java:init(281)) - Error during JDBCinitialization.
java.sql.SQLException:The connection property 'createDatabaseIfNotExist' only accepts values of theform: 'true', 'false', 'yes' or 'no'. The value 'true;user=xxx;password=xxx' isnot in this set.
原来是连接字符串的配置问题,在xml里&需要写成&才可以,修改后生效,可以更新:[num_partitions: xxx, num_files: xxx,num_rows: 0, total_size: xxx, raw_data_size: 0]的XXX的几个变量,但是发现num_rows/raw_data_size这两个值无论如何都无法更新,analyze命令也不管用,看下issue:https://issues.apache.org/jira/browse/HIVE-3324确实有这么个bug,不过并没有很合理的解释,anyway,在hive0.13后使用hadoop counter来做stat publish了,就没这个问题了.
其实如果用来做smallfile分析有这些信息也够了:P