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

简介:早期的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

配置llama实现impala on yarn-验证未通过,仅以此文作为参考的更多相关文章

  1. Llama-impala on yarn的中间协调服务

    本文基于CDH发行版下的Hadoop Yarn和Impala 早期的Impala版本号中.为了使用Impala.我们一般会在以Client/Server的结构在各个集群节点启动impala-serve ...

  2. tomcat环境变量的配置(网上摘,全部验证通过)

    tomcat环境变量的配置   1.===> 进入bin目录下,双击startup.bat看是否报错.一般肯定会报. 2.===> 右键我的电脑===>高级===>环境变量   ...

  3. fileinput 配置项大全,从源码中翻出了很多属性,没那么多时间一一验证,特发出来给大家参考参考

    fileinput 配置项大全,从源码中翻出了很多属性,没那么多时间一一验证,特发出来给大家参考参考 fileinput 配置项大全 option 属性名 属性类型 描述说明 默认值 language ...

  4. 【tomcat】HTTPS访问配置 + restful调用远程HTTPS绕过验证

     单向验证: 第一步: 生成key: keytool -genkey -alias mykey -keyalg RSA -keystore d:/key/testkey keytool -export ...

  5. Squid配置之使用帐号密码验证

      转自: https://blog.csdn.net/atco/article/details/43448885   1.安装squid使用root用户进行操作.先使用rpm检测是否已经安装了sql ...

  6. Linux下ftp安装配置及三种用户的验证

    一.原理简介 二.安装配置 三.三种用户的验证 一.简介 FTP即文件传输协议(File Transfer Protocol),完成各主机的文件共享功能,基于客户端-服务器的协议,工作在应用层,tcp ...

  7. 使用jquery.validation+jquery.poshytip做表单验证--未完待续

    jqueryValidate的具体使用方法很多,这里就不在赘述,这一次只谈一下怎样简单的实现表单验证. 整片文章目的,通过JQvalidation按表单属性配置规则验证,并将验证结果通过poshyti ...

  8. 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)

    前言: shiro因为其简单.可靠.实现方便而成为现在最常用的安全框架,那么这篇文章除了会用简洁明了的方式讲一下基于spring的shiro详细配置和登录注销功能使用之外,也会根据惯例在文章最后总结一 ...

  9. ASP.NET Core Web API + Angular 仿B站(三)后台配置 JWT 的基于 token 的验证

    前言: 本系列文章主要为对所学 Angular 框架的一次微小的实践,对 b站页面作简单的模仿. 本系列文章主要参考资料: 微软文档: https://docs.microsoft.com/zh-cn ...

随机推荐

  1. 跟我学SharePoint2013视频培训课程——版本控制示例(15)

    课程简介 第15天,SharePoint 2013版本控制示例 视频 SharePoint 2013 交流群 41032413

  2. java解惑--摘要

    (1)下面是一个试图解决上述问题的程序,它会打印出什么呢?public class Change{public static void main(String args[]){System.out.p ...

  3. request.GetResponse()超时的解决办法

    var request = (HttpWebRequest)WebRequest.Create(url); request.Timeout = Timeout.Infinite; request.Ke ...

  4. 当 Visual Studio 扩展遇到错误时

    我是遇到了 Github 扩展经常在 Visual Studio 启动时报错,找了一下可以尝试以下方法: 首先卸载插件 然后删除 %LocalAppData%\Microsoft\VisualStud ...

  5. Linux安装R记要

    R在Linux上的安装有一些坑(Windows上安装会方便许多),在这里记录,希望可以减少读者不必要的麻烦.我的服务器是SUSE Linux 64位,无法接入互联网(安全原因,你懂的). 到R官网ht ...

  6. adb命令使用总结

    1.启动/停止 启动 adb server 命令: adb start-server (一般无需手动执行此命令,在运行 adb 命令时若发现 adb server 没有启动会自动调起.) 停止 adb ...

  7. 《转》推荐几个精致的web UI框架

    1.Aliceui Aliceui是支付宝的样式解决方案,是一套精选的基于 spm 生态圈的样式模块集合,是 Arale 的子集,也是一套模块化的样式命名和组织规范,是写 CSS 的更好方式. git ...

  8. 【网络】TCP和UDP的区别以及TCP的三次握手四次释放

    一.两者区别 1.TCP面向连接的运输层协议,UDP无连接 2.TCP是可靠交付,UDP是尽最大努力交付 3.TCP面向字节流,UDP面向报文 4.TCP是点对点连接的,UDP一对一,一对多,多对多都 ...

  9. java中的数据加密3 非对称加密

    非对称加密也加公钥加密,不对称算法使用一对密钥对,一个公钥,一个私钥,使用公钥加密的数据,只有私钥能解开(可用于加密):同时,使用私钥加密的数据,只有公钥能解开(签名).但是速度很慢(比私钥加密慢10 ...

  10. 如何在wiced平台上编译,运行智能彩灯 实时控制彩灯的色调和开关

    https://github.com/WildDogTeam/demo-c-rgblight/tree/master/src/device 恢复出厂的GPIO口在demo_platform.h声明为W ...