每小时数据以tsv文件的形式添加到hdfs分区 - (日期,小时)。外部表'记录'有那个hdfs位置 - ' hive / log_data'。 例如,划分为分区 - ' hive / log_data / utc_date = 2016-08-31 / utc_hour = 15'
之后运行命令
hive -e "ALTER TABLE logs ADD IF NOT EXISTS PARTITION (utc_date='${DATE}', utc_hour='${HOUR}')"
对于该特定分区,以便在hive Metastore中创建分区 - 就像msck修复表日志一样。 然后运行一个脚本来压缩文件,以便没有太多的小文件。
SET hive.exec.compress.output=true;
insert overwrite into table PARTITION( utc_date = '${hiveconf:DATE}',
utc_hour = '${hiveconf:HOUR}'
select * from logs
where utc_date = '${hiveconf:DATE}'
and utc_hour = '${hiveconf:HOUR}'
对于一种情况,ALTER TABLE添加分区命令在一天中的所有时段都被遗漏。当这个压缩脚本在分区上运行时,问题就出现了,其中的信息在hive Metastore中没有出现。
现在,对于日志表,查询该日期表的任何查询都非常慢,并且与其他日期相比,创建的映射器数量增加了1000倍。
可以采取哪些措施来修复分区。现在运行ALTER或msck命令即使成功完成也无济于事。