大数据时代快速SQL引擎-Impala( 十 )

通常情况下 , 我们会考虑两种方式的集群部署:混合部署和独立部署 , 下图分别展示了混合部署与独立部署时的各节点结构 。 混合部署意味着将Impala集群部署在Hadoop集群之上 , 共享整个Hadoop集群的资源;独立部署则是单独使用部分机器只部署HDFS和Impala , 前者的优势是Impala可以和Hadoop集群共享数据 , 不需要进行数据的拷贝 , 但是存在Impala和Hadoop集群抢占资源的情况 , 进而可能影响Impala的查询性能(MR任务也可能被Impala影响) , 而后者可以提供稳定的高性能 , 但是需要持续的从Hadoop集群拷贝数据到Impala集群上 , 增加了ETL的复杂度 。 两种方式各有优劣 , 但是针对前一种部署方案 , 需要考虑如何分配资源的问题 , 首先在混合部署的情况下不可能再让Impalad进程常驻(这样相当于把每一个NodeManager的资源分出去了一部分 , 并且不能充分利用集群资源) , 但是YARN的资源分配机制延迟太大 , 对于Impala的查询速度有很大的影响 , 于是Impala很早就设计了一种在YARN上完成Impala资源调度的方案——Llama(Low Latency Application MAster) , 它其实是一个AM的角色 , 对于Impala而言 。 它的要求是在查询执行之前必须确保需要的资源可用 , 否则可能出现一个Impalad的阻塞而影响整个查询的响应速度(木桶原理) , Llama会在Impala查询之前申请足够的资源 , 并且在查询完成之后尽可能的缓存资源 , 只有当YARN需要将该部分资源用于其它工作时 , Llama才会将资源释放 。 虽然Llama尽可能的保持资源 , 但是当混合部署的情况下 , 还是可能存在Impala查询获取不到资源的情况 , 所以为了保证高性能 , 还是建议独立部署 。

推荐阅读