修复hdfs中的分区数据

时间:2016-09-01 16:24:32

标签: hive

每小时数据以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命令即使成功完成也无济于事。

0 个答案:

没有答案