配置llama实现impala on yarn-验证未通过,仅以此文作为参考

以下内容采自网络,目前验证未通过,仅以此作为参考:

简介:早期的Impala版本中,为了使用Impala,我们通常会在以Client/Server的结构在各个集群节点启动impala-server、impala-state-store和impala-catalog服务,并且在启动过程中无法动态调整内存和CPU的分配。CDH5之后,Impala开始支持Impala-on-yarn模式,通过一个叫做Llama(Long-Lived Application Master)的中间协调Yarn和Impala,向Hadoop Yarn资源管理器申请计算资源。
Llama (Low Latency Application MAster) 是一个 Yarn 的 Application Master,用于协调 Impala 和 Yarn 之间的集群资源的管理和监控。Llama 使 Impala 能够获取、使用和释放资源配额,而不需要 Impala 使用 Yarn 管理的 container 进程。Llama 提供了 Thrift API 来和 Yarn 交互。

1、Llama介绍

Llama(Long-LivedApplicationMaster)是位于ClouderaImpala和HadoopYARN之间,用于协调资源管理的服务系统。在一个Hadoop集群中,Impala可以通过Llama预约、使用以及释放资源分配,以减少执行Impala查询时过多的资源管理用度。只有在Impala中启用资源管理,集群中的Llama服务才真正运作。
默认情况下,YARN根据MapReduce工作的需要按位分配资源,而Impala则需要所有资源在同一时间可用,以保证查询的中间结果能够在不同节点间交换,而不需要拖延查询时间来等待新的资源分配,Llama就是为了在每个Impala查询开始执行前就可保证其需要的资源都可用而出现。
若一个查询执行完毕,Llama会将资源进行缓存,确保在执行Impala子查询时可以使用。这种缓存机制避免了每个查询执行前都需要进行新的资源请求。同时,如果YARN需要该资源用于其他工作,Llama就会将这部分资源还给YARN。
需要注意的是:Llama仅支持YARN,不能与MRv1结合使用,同时,Llama也是通过YARN的配置文件与Hadoop进行协作的。

2、控制计算资源预估

我们提交SQL到Impala后,有时会错误的预估该次查询可能消耗的计算资源,Impala支持用户设置默认的内存和CPU资源申请大小,SQL运行过程中,一旦资源开始紧缺时,Impala会通过Llama向Yarn申请更多的资源来扩展(expanding)当前的预留资源,一旦查询作业完成,Llama通常会将资源还给Yarn。用户可以在启动使用impalad进程时加上-rm_always_use_defaults参数(必选)以及-rm_default_memory=size and -rm_default_cpu_cores(可选),Cloudera官方建议使用Impala-on-yarn时加上这些启动参数,可以让查询资源动态扩展。

3、验证计算资源预估和实际使用

为了使用户能够方便的验证查询语句所使用的集群资源大小,使用EXPLAIN语句可以查询相关内存预估的信息,以及使用到virtual core的大小。使用EXPLAIN并不会真正提交查询

4、资源限制的原理

  CPU限制是通过Linux CGroups机制,Yarn在各个节点启动符合CGroups形式的Container进程

  内存限制是通过限制Impala的查询内存,一旦查询请求被授权,Impala会在执行前设置内存上限。
  
llama配置:

1、下载llama

从cloudera官网下载llama安装包:

http://archive.cloudera.com/cdh5/redhat/7/x86_64/cdh/5.10.0/RPMS/noarch/llama-1.0.0+cdh5.10.0+0-1.cdh5.10.0.p0.71.el7.noarch.rpm
http://archive.cloudera.com/cdh5/redhat/7/x86_64/cdh/5.10.0/RPMS/noarch/llama-doc-1.0.0+cdh5.10.0+0-1.cdh5.10.0.p0.71.el7.noarch.rpm
http://archive.cloudera.com/cdh5/redhat/7/x86_64/cdh/5.10.0/RPMS/noarch/llama-master-1.0.0+cdh5.10.0+0-1.cdh5.10.0.p0.71.el7.noarch.rpm


# ls llama-*
llama-1.0.0+cdh5.10.0+0-1.cdh5.10.0.p0.71.el7.noarch.rpm
llama-doc-1.0.0+cdh5.10.0+0-1.cdh5.10.0.p0.71.el7.noarch.rpm
llama-master-1.0.0+cdh5.10.0+0-1.cdh5.10.0.p0.71.el7.noarch.rpm

2、安装llama

llama需要安装在所有yarn节点上:

# rpm -ivh llama-1.0.0+cdh5.10.0+0-1.cdh5.10.0.p0.71.el7.noarch.rpm
warning: llama-1.0.0+cdh5.10.0+0-1.cdh5.10.0.p0.71.el7.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID e8f86acd: NOKEY
error: Failed dependencies:
     hadoop-yarn is needed by llama-1.0.0+cdh5.10.0+0-1.cdh5.10.0.p0.71.el7.noarch
# rpm -ivh llama-1.0.0+cdh5.10.0+0-1.cdh5.10.0.p0.71.el7.noarch.rpm --nodeps
warning: llama-1.0.0+cdh5.10.0+0-1.cdh5.10.0.p0.71.el7.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID e8f86acd: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
    1:llama-1.0.0+cdh5.10.0+0-1.cdh5.10################################# [100%]
# rpm -ivh llama-master-1.0.0+cdh5.10.0+0-1.cdh5.10.0.p0.71.el7.noarch.rpm
warning: llama-master-1.0.0+cdh5.10.0+0-1.cdh5.10.0.p0.71.el7.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID e8f86acd: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
    1:llama-master-1.0.0+cdh5.10.0+0-1.################################# [100%]

3、启动和停止

启动:

$ sudo service llama start
停止:

$ sudo service llama stop

4 配置 HA

Llama 使用 Zookeeper 来实现 HA,任一时刻,只有一个 Llama-master 实例是 active的以确保资源不会被分区。

为了从 Yarn 获取资源,Llama 启动 YARN application 并且运行未管理的ApplicationMaster。当一个 Llama 实例宕掉的时候,分配给该实例启动的 application 的所有资源将会被回首,直到这些 application 超时(默认超时时间为10分钟)。当 Llama 运行失败的时候,这些资源将会被杀掉他启动的application的 Llama 回收。

HA 相关配置参数在 /etc/llama/conf/llama-site.xml:

属性                        描述                                                                            默认值
llama.am.cluster.id            Cluster ID of the Llama pair, used to differentiate between different Llamas    llama
llama.am.ha.enabled            Whether to enable Llama HA                                                        false
llama.am.ha.zk-quorum        ZooKeeper quorum to use for leader election and                                 fencing    
llama.am.ha.zk-base            Base znode for leader election and fencing data                                    /llama
llama.am.ha.zk-timeout-ms    The session timeout, in milliseconds, for connections to ZooKeeper quorum        10000
llama.am.ha.zk-acl            ACLs to control access to ZooKeeper                                                world:anyone:rwcda
llama.am.ha.zk-auth            Authorization information to go with the ACLs    

上面必填的两个参数为:

llama.am.ha.enabled : true
llama.am.ha.zk-quorum : cdh1:21088,cdh2:21088

5 修改 Impala 启动参数

使用 jdbc 方式提交查询到 Impala 时,会出现 number of running queries 20 is over limit 20 的异常,这时候在 impala的 源代码中搜索关键字 number of running queries,可以找到https://github.com/cloudera/Impala/blob/cdh5-1.4_5.1.2/be/src/scheduling/admission-controller.cc,从源代码中可以看到出现该问题和 Llama 有关系,在找不到 llama 的相关配置时,impala 一个队列中能够接受的最大请求数为 20。代码见:RequestPoolService.java

@VisibleForTesting
   TPoolConfigResult getPoolConfig(String pool) {
     TPoolConfigResult result = new TPoolConfigResult();
     int maxMemoryMb = allocationConf_.get().getMaxResources(pool).getMemory();
     result.setMem_limit(
         maxMemoryMb == Integer.MAX_VALUE ? -1 : (long) maxMemoryMb * ByteUnits.MEGABYTE);
     if (llamaConf_ == null) {                                                //llama配置为空
       result.setMax_requests(LLAMA_MAX_PLACED_RESERVATIONS_DEFAULT);
       result.setMax_queued(LLAMA_MAX_QUEUED_RESERVATIONS_DEFAULT);
     } else {
       // Capture the current llamaConf_ in case it changes while we're using it.
       Configuration currentLlamaConf = llamaConf_;
       result.setMax_requests(getLlamaPoolConfigValue(currentLlamaConf, pool,
           LLAMA_MAX_PLACED_RESERVATIONS_KEY,
           LLAMA_MAX_PLACED_RESERVATIONS_DEFAULT));  //20
       result.setMax_queued(getLlamaPoolConfigValue(currentLlamaConf, pool,
           LLAMA_MAX_QUEUED_RESERVATIONS_KEY,
           LLAMA_MAX_QUEUED_RESERVATIONS_DEFAULT));
     }
     LOG.trace("getPoolConfig(pool={}): mem_limit={}, max_requests={}, max_queued={}",
         new Object[] { pool, result.mem_limit, result.max_requests, result.max_queued });
     return result;
   }
  
目前,参考 Admission Control and Query Queuing,在不安装和使用 llama 情况下,找到的一种解决办法是:

修改 impala 启动参数(/etc/default/impala),添加 ` -default_pool_max_requests=-1`,该参数设置每一个队列的最大请求数,如果为-1,则表示不做限制。

6. 使用

6.1 Llama Application Master

6.2 Llama Admin Command Line tool

6.3 Llama Node Manager Auxiliary Service

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值