impala同步hive数据

一、impala同步hive的元数据的两种方式
1、invalidate metadata
对于通过Hive创建,删除或者修改表等操作,Impala无法自动感知到Hive元数据的变化,想让Impala识别到这个变化需要在impala shell中输入invalidate metadata,该语句会使得impala原元数据失效并且重新从元数据库同步元数据信息。可以对所有表执行,也可以指定某张表

invalidate metadata;    -- 废除所有表的元数据; 这种命令一般禁用
invalidate metadata [table];   -- 废除表table的元数据

2、refresh
对于通过hive加载,插入,改变的数据操作,或者通过hdfs对数据进行改变的操作,impala都无法自动识别数据的变化,可以使用REFRESH table_name,该语句可以让impala识别到数据的变化,可以对某张表更新元数据,也可以对某张表的某分区更新元数据。

refresh [table];                           -- 刷新表table的元数据
refresh [table] partition [partition];     -- 刷新表table的partition分区元数据

3、同步元数据生产脚本(适合表结构没变的)

#bin/sh
set -e
shopt -s expand_aliases  #这里是可以在shell里面用重命名
.~/.bash_profiles
typeset -u sub_part_flag #把变量转换成大写
# typeset的-l选项将一个变量的字符变成小写
# typeset的-u选项将一个变量的字符变成大写
table_name=$1
part_name=$2
sub_part_flag=$3
dw_hdfs_path="/user/hive/warehouse"
if ["x${sub_part_flag}!=xY"];then  
--如果参数3输入的是非Y的字符,那么代表没有二级分区的
	sync_cmd="use impala;refresh ${table_name} partition(${part_name})"
	echo "`date`:sync_cmd=${sync_cmd}"
	impala2 -e "${sync_cmd}"
	echo "date`:finish:${sync_cmd}"
else
	part_hdfs_path="${dw_hdfs_path}"/$({echo ${table_name}} | sed "s/\./\.db\//")/$(echo {part_name}| sed "s/ //g;s/'//g;s/\,/\//")
	for sub_part in $({hdfs dfs -ls ${part_hdfs_path} | grep ^d | awk -F"/" '{print $NF}'| awk -F"=" '{print $1"='\''"$2"'\''"}');do
	sync_cmd="use impala;refresh ${table_name} partition(${part_name},${sub_part})"
	echo "`date`:sync_cmd"
	impala2 -e "${sync_cmd}"
	echo "`date`:finnish:${sync_cmd}"
	done
	echo "$part_hdfs_path"
fi

4、总结

  • invalidate metadata 会加载相关表的所有元数据信息,这个操作对于有很多分区的大表成本非常高,refresh加载元数据更快,因为它只要加载新增的数据文件块的位置数据,如果数仓中发生了增删表或改变表结构的行为,如create table、drop table、alter table add column等,就使用invalidate metadata [table]语句。
  • 如果数仓中某表加入了新数据,或者有分区的改动,如load data、alter table add partition等,就使用refresh [table] (partition [partition])语句。
  • invalidate metadata比起refresh而言要重量级得多,并且它造成impalad之间查询不一致也会更严重。因此,也几乎禁止使用 不带表名的invalidate metadata语句。
  • 如果数仓中涉及到非常大批量的元数据更改,那么建议直接重启catalogd和statestored,这总比使用不带表名的invalidate metadata来得高效一些。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值