概述
最近一直在倒腾Impala,公司内部也属于刚刚部署使用,初次体验感觉性能还是比较好的(可能是使用Hive过多的原因),并且Impala还可以支持Kudu引擎,这个目前看上去是实时离线统一的较好解决方案,因此考虑在公司内部推广使用,但是一旦给多个产品部署、使用就需要考虑如下的几个问题:
- 部署方式:它决定了以后的扩展性和运维复杂度等。
- 权限隔离:如何做到用户的数据不被他授权的用户查询。
- 资源隔离:用户之间的查询不互相影响,防止出现一个用户的查询因为其他用户资源过度消耗的查询阻塞和影响。
本文我将结合最近对Impala的调研(参考官方文档和部分源代码)分别粗略的谈一下这几个问题的解决方案。
Impala部署的方案:
本人结合Hadoop的部署方式和Impala的特点考虑到目前可用的Impala部署方式分为三种,这三种部署方式需要考虑到Impala和Hadoop集群(称为原集群)的方式,Hadoop集群视为原始数据的存在,Impala的数据需要依赖这部分数据产生。
完全独立部署
部署独立的HDFS,每一个Datanode节点上都启动一个Impalad进程,这种方式可以使得本地化读取最大化,Impalad进程可以利用HDFS的Short Circuit Local Reads机制直接利用Unix Domain Socket获取DN的文件描述符,然后通过共享文件描述符的方式读取数据,当然也会尽可能的使用DN节点的block缓存等,因此性能也是最好的。对于数据的导入有两种方案:1、批量得利用一个共享的H