impala参数之‘impala.disableHmsSync‘=‘true‘
参考文章 https://cloud.tencent.com/developer/article/2007738
impala官方文档https://impala.apache.org/docs/build/impala-3.4.pdfhttps://impala.apache.org/docs/build/impala-3.4.pdf
第657-658页
这个参数什么用,顾名思义就是禁止hms数据同步,具体表现是什么呢?为什么要设置呢,该怎么设置呢。一起学习下。
首先我们要了解impala和hive的关系
简单来说impala只是一个数据读取和处理的工具,具体就是读取hdfs表目录下的文件,放到内存里解析(个人理解)。这里存在一个什么问题呢?理论上hive里所有的表和数据都可以通过impala去读取,因为impala基于内存的读取的非常快,但同时页很消耗内存,关键是hive的元数据信息不一定及时同步到impala
1.为什么设置这个参数?
因为不是所有的表都需要通过impala的,大部分是一些结果表,每天更新的一些维表,需要作为报表每天都会有数据更新,这种数据才是真的impala处理的。大部份表其实都不需要,比如你新建了一个test表,只是自己在hive坐下测试,根本不需要通过impala实时查询。但问题的关键就在于这里,impala默认读取所有的表,表的数据越来越多,有时候会读取就会出现问题,所以解决。
直接开测
CREATE DATABASE odsccdata WITH DBPROPERTIES ('impala.disableHmsSync'='true');
desc database extended odsccdata;
CREATE DATABASE cc_test
desc database extended cc_test
建表
create table odsccdata.test1(id int );
create table cc_test.test1(id int );
impala查询
select * from cc_test.test1 -- 直接查看
select * from cc_test.test1 -- 无法查看
invalidate metadata odsccdata.test1 --手动刷新
select * from odsccdata.test1
上面的实验可以看到 如果我们将db设置为disablehmssync之后,所建的表不会被impala采集信息了,需要手动去刷新,这样减少了impala的工作量,肯定能提高效率。
还有的参数可以设置
hms_event_polling_interval_s 设置这个间隔 官方建议设置小于5s
hms_event_polling_interval_s flag set to a positive integer to enable the feature and set the polling
frequency in seconds. We recommend the value to be less than 5 seconds
