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参数设置,设置最大锁定内存大小:
3 创建缓存池,
hdfs cacheadmin -addPool test -owner impala -limit 4000000000
指定缓存池的所有者为impala用户。
可以用以下命令查看缓存池的情况;
hdfs cacheadmin -listPools -stats test
至此,缓存池已经成功创建。
接下来验证缓存池对性能提升的实际效果。
*检查下无缓存时的执行效果:
select sum(volume),sum(turnover) from t_his_order
where tdate>='20160701' and tdate<='20190301' ;
上图分别是首次和第二次执行的查询信息,第一次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' ;
可以使用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验证的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向应用数据目录 ( files 数据目录 | lib 应用自带 so 动态库目录 | databases sqlite3 数据库目录 | cache 缓存目录 )(代码片
Android 逆向应用数据目录 ( files 数据目录 | lib 应用自带 so 动态库目录 | databases sqlite3 数据库目录 | cache 缓存目录 )(代码片