Hive服务停止导致Flume收集数据到Hive后无法通过Hue使用分区查询

时间:2024-04-11 19:18:05

首先要说明的是本篇所解决的问题

1、hive分区没创建成功。

2、分区下面小文件过多。

3、合并小文件后新生成的文件没有按指定格式压缩。

 

 

数据流场景如下图:

Hive服务停止导致Flume收集数据到Hive后无法通过Hue使用分区查询

 

Hive分区按每小时4个每15分钟生成一个的策略,也就是说每小时会有mm=00、mm=15、mm=30、mm=45 四个分区。

问题背景:

当时在通过Cloudera Manager做HDFS的HA操作,因此要停止Hive服务执行更新Hive MetaStore NameNode操作,导致执行2个小时的过程中没有生成hive表的相对分区。

问题1解决方法:

1、先使用命令行到hive对应的hdfs的路径下查看是否有通过flume传过来的.log数据文件,发现有。

2、执行alter table prd_ods_xxx add partition (pt ='20200704',hh='14',mm='00')。

 

问题2解决方法:

1、执行insert overwrite table prd_ods_xxx partition(pt ='20200704',hh='14',mm='00')
      select messege from prd_ods_xxx where pt ='20200704' and hh='14' and mm='00';

正常情况下执行以上步骤就会将数据添加到指定分区。可能在执行过程中会出现get: Cannot obtain block length for LocatedBlock{BP-873722476-10.100.11.1-1560838431306:blk_1078888545_5148026... ...等信息,原因是由于文件异常关闭。

解决办法:到hdfs指定分区找到异常文件执行命令:

hdfs fsck /user/hive/warehouse/xxxxxx/pt=20200704/hh=14/mm=45/2020070414.1593845100264.log 

Hive服务停止导致Flume收集数据到Hive后无法通过Hue使用分区查询

block文件处于打开状态

执行: hdfs debug recoverLease -path /user/hive/warehouse/xxxx/pt=20200704/hh=14/mm=45/2020070414.1593845100264.log 

Hive服务停止导致Flume收集数据到Hive后无法通过Hue使用分区查询

 

问题3解决方法:

设置以下配置:

set hive.exec.compress.output=true;

set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;