1. 介绍

Llama (Low Latency Application MAster) 是一个 Yarn 的 Application Master,用于协调 Impala 和 Yarn 之间的集群资源的管理和监控。Llama 使 Impala 能够获取、使用和释放资源配额,而不需要 Impala 使用 Yarn 管理的 container 进程。Llama 提供了 Thrift API 来和 Yarn 交互。

个人理解,Llama 的作用就是使 Impala 能够工作在 YARN 之上,使得 Impala 和 YARN 共享集群资源,提供低延迟的查询。

  • Llama 官网地址: http://cloudera.github.io/llama/
  • Llama 源码: https://github.com/cloudera/llama

    2. 架构

    3. Llama 安装

    3.1 安装 llama

    Llama 需要安装在装有 Yarn 的节点上。

    在 rhel 系统上安装:

    $ sudo yum install llama-master
    

    3.2 配置

    Llama 只能和 Yarn 配合工作,不能用于 MRv1。

    Llama 的配置文件在 /etc/llama/conf/ 目录,llama-site.xml 默认配置在 http://cloudera.github.io/llama/llama-site.html

    3.3 启动和停止

    $ sudo service llama start
    
    $ sudo service llama stop
    

    3.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

    3.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,则表示不做限制。

    4. 使用

    4.1 Llama Application Master

    4.2 Llama Admin Command Line tool

    4.3 Llama Node Manager Auxiliary Service

    EeSen、FSMN、CLDNN、BERT、Transformer-XL…你都掌握了吗?一文总结语音识别必备经典模型(2)
    EeSen、FSMN、CLDNN、BERT、Transformer-XL…你都掌握了吗?一文总结语音识别必备经典模型
    EeSen、FSMN、CLDNN、BERT、Transformer-XL…你都掌握了吗?一文总结语音识别必备经典模型(1)
    EeSen、FSMN、CLDNN、BERT、Transformer-XL…你都掌握了吗?一文总结语音识别必备经典模型
    EeSen、FSMN、CLDNN、BERT、Transformer-XL…你都掌握了吗?一文总结语音识别必备经典模型(3)
    EeSen、FSMN、CLDNN、BERT、Transformer-XL…你都掌握了吗?一文总结语音识别必备经典模型
    ELMo、GPT、BERT、X-Transformer…你都掌握了吗?一文总结文本分类必备经典模型(五)
    ELMo、GPT、BERT、X-Transformer…你都掌握了吗?一文总结文本分类必备经典模型
    ELMo、GPT、BERT、X-Transformer…你都掌握了吗?一文总结文本分类必备经典模型(四)
    ELMo、GPT、BERT、X-Transformer…你都掌握了吗?一文总结文本分类必备经典模型
    ELMo、GPT、BERT、X-Transformer…你都掌握了吗?一文总结文本分类必备经典模型(三)
    ELMo、GPT、BERT、X-Transformer…你都掌握了吗?一文总结文本分类必备经典模型(三)
    Transformers回顾 :从BERT到GPT4
    人工智能已成为近年来最受关注的话题之一,由于神经网络的发展,曾经被认为纯粹是科幻小说中的服务现在正在成为现实。从对话代理到媒体内容生成,人工智能正在改变我们与技术互动的方式。特别是机器学习 (ML) 模型在自然语言处理 (NLP) 领域取得了重大进展。一个关键的突破是引入了“自注意力”和用于序列处理的Transformers架构,这使得之前主导该领域的几个关键问题得以解决。
    MobileNet实战:tensorflow2.X版本,MobileNetV2图像分类任务(小数据集)
    本例提取了植物幼苗数据集中的部分数据做数据集,数据集共有12种类别,今天我和大家一起实现tensorflow2.X版本图像分类任务,分类的模型使用MobileNetV2,MobileNetV2在MobileNetV1的基础上增加了线性瓶颈(Linear Bottleneck)和倒残差(Inverted Residual)是一种轻量级的网络,适合应用在真实的移动端应用场景。
    MobileNet实战:tensorflow2.X版本,MobileNetV2图像分类任务(大数据集)
    本例提取了植物幼苗数据集中的部分数据做数据集,数据集共有12种类别,今天我和大家一起实现tensorflow2.X版本图像分类任务,分类的模型使用MobileNetV2。本文实现的算法有一下几个特点: 1、自定义了图片加载方式,更加灵活高效,不用将图片一次性加载到内存中,节省内存,适合大规模数据集。 2、加载模型的预训练权重,训练时间更短。 3、数据增强选用albumentations。
    MobileNet实战:tensorflow2.X版本,MobileNetV1图像分类任务(小数据集)
    本例提取了植物幼苗数据集中的部分数据做数据集,数据集共有12种类别,今天我和大家一起实现tensorflow2.X版本图像分类任务,分类的模型使用MobileNet,其核心是采用了深度可分离卷积,其不仅可以降低模型计算复杂度,而且可以大大降低模型大小,本文使用的案例训练出来的模型只有38M,适合应用在真实的移动端应用场景。
    MobileNet实战:tensorflow2.X版本,MobileNetV1图像分类任务(大数据集)
    本例提取了植物幼苗数据集中的部分数据做数据集,数据集共有12种类别,今天我和大家一起实现tensorflow2.X版本图像分类任务,分类的模型使用MobileNetV1。本文实现的算法有一下几个特点: 1、自定义了图片加载方式,更加灵活高效,不用将图片一次性加载到内存中,节省内存,适合大规模数据集。 2、加载模型的预训练权重,训练时间更短。 3、数据增强选用albumentations。
    ML 模型再训练无法解决的问题(mona)
    信任人工智能系统并不容易。考虑到机器学习模型可能失败的各种边缘情况,以及对其预测背后的流程缺乏可见性,以及难以将其输出与下游业务结果相关联,难怪企业领导者经常对人工智能持有一些怀疑态度。
  •