IMPALA-HDFS缓存与IMPALA验证

Posted 南山笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IMPALA-HDFS缓存与IMPALA验证相关的知识,希望对你有一定的参考价值。

Impala 1.4版本以上,impala可以使用HDFS的cache机制,将频繁访问的数据缓存到HDFS cache中,可以更有效的使用内存提升重复执行的查询效率。

LINUX OS cache相比,HDFDS缓存机制可以保证需要缓存的数据,不会因为内存不足或者最近不频繁使用等原因被从内存中交换出去,同时也规避了校验开销以及memory to memory的拷贝。

适用范围:较小的经常被访问的表,或者频繁被访问的分区表,其大小适合装载到cache中。该表仅为使用hdfs存储的impala表,不包括hbase表或者kudu表等。


使用HDFS缓存首先基于HDFS创建CACHE,如下:

1 检查系统参数设置:

2 检查hdfs参数设置,设置最大锁定内存大小:

IMPALA(3)-HDFS缓存与IMPALA验证

3 创建缓存池,

hdfs cacheadmin -addPool test -owner impala -limit 4000000000

指定缓存池的所有者为impala用户。

可以用以下命令查看缓存池的情况;

hdfs cacheadmin -listPools -stats test


IMPALA(3)-HDFS缓存与IMPALA验证

至此,缓存池已经成功创建。

 

接下来验证缓存池对性能提升的实际效果。

*检查下无缓存时的执行效果:

select sum(volume),sum(turnover) from t_his_orderwhere tdate>='20160701' and tdate<='20190301' ;

IMPALA(3)-HDFS缓存与IMPALA验证

上图分别是首次和第二次执行的查询信息,第一次5.9s,之后为3.1s,多次执行为2.8,2.9,3.0等,从执行计划上看,计划一致,皆为本地读,读取字节为113.8M,差异在于第二次的平均吞吐量有较为明显的提升。

首次读取时完全从文件中加载,再次执行是则是LINUX OS Cache中进行读取,所以在性能上有明显的提升。

*将表加载HDFS CACHE中,进行相同的验证过程。

将表cache到hdfs缓存中,如下:

alter table t_his_order set cached in 'test' ;

IMPALA(3)-HDFS缓存与IMPALA验证可以使用show table stats t_his_order检查缓存的情况。

执行上述的查询语句,检查执行情况,可以看出缓存后,已无磁盘读取,但是性能其实后前述操作系统缓存后的性能差异不大。

    

相较之前访问,数据完全从缓存加载,impala使用的内存也明显下降。

小结:

从上述测试中,可以相较于文件系统cache,hdfs缓存机制对单个SQL的访问性能方面,其效果并不显著。

其价值更多在于将频繁访问的表固定在hdfs缓存中,防止了文件系统cache数据被交换出去的场景,保证执行性能一致性和稳定性。

 

须知事项:

1、启用表的hdfs cache的注意事项:

针对cache表的特定DDL语句,会被阻塞执行,如alter table set location等,此时先需要取消cache,再执行DDL。

对于cache表,新增数据会自动cache。但是如果cache已满,则会出现插入报错。

执行drop命令时,会自动取消该表的cache缓存,无需特殊处理。

2、Impala HDFS缓存功能与Impala内存限制交互如下:

hdfs缓存池的最大大小通过HDFS cacheadmin命令在外部指定给Impala。

访问hdfs缓存的数据避免了内存到内存的复制操作,涉及缓存数据的查询在Impala端所需的内存少于对未缓存数据的等效查询,减少的内存有助于提高高并发工作负载下的可伸缩性。

 

参考:

https://impala.apache.org/docs/build/html/topics/impala_perf_hdfs_caching.html

No.21。

以上是关于IMPALA-HDFS缓存与IMPALA验证的主要内容,如果未能解决你的问题,请参考以下文章

在 Impala 中自动执行“验证元数据”

使用本地 Impala 连接执行单元测试用例

验证坐标在某片坐标区域内 php 代码

Impala MetaData问题

Android 逆向应用数据目录 ( files 数据目录 | lib 应用自带 so 动态库目录 | databases sqlite3 数据库目录 | cache 缓存目录 )(代码片

Android 逆向应用数据目录 ( files 数据目录 | lib 应用自带 so 动态库目录 | databases sqlite3 数据库目录 | cache 缓存目录 )(代码片