写点什么

解析 HetuEngine 实现 On Yarn 原理

  • 2022 年 1 月 12 日
  • 本文字数:2509 字

    阅读完需:约 8 分钟

摘要:本文介绍 HetuEngine 实现 On Yarn 的原理,通过阅读本文,读者可以了解 HetuEngine 如何在资源使用方面融入 Hadoop 生态体系。

 

本文分享自华为云社区《MRS HetuEngine 特性之 On Yarn原理介绍》,作者:一颗柠檬。

 

HetuEngine 是华为自研高性能分布式 SQL 查询 &数据虚拟化引擎。与大数据生态无缝融合,实现海量数据秒级查询;支持多源异构协同,使能数据湖内一站式 SQL 融合分析。在整合开源能力的同时,MRS HetuEngine 相较于开源社区也做了大量的优化,其中一个重要的特性就是 On Yarn。

什么是 On Yarn?

 

顾名思义,就是将进程运行在 Yarn 上,由 Yarn 进行资源的管理和调度。

 

不论是 TrinoDB/PrestoDB 还是 openLooKeng,部署方式都是将 coordinator 和 worker 进程直接运行在主机上,与主机上的其他应用程序共享资源,无法做到资源隔离,并且难以扩展。

 

MRS HetuEngine 借助 Yarn Service 提供的能力,将 coordinator 和 worker 进程以 Yarn application 的形式运行在 Yarn container 中,通过 MRS 集群的租户划分,可以将 HetuEngine 计算实例启动在特定租户队列里,从而实现资源隔离。

HetuEngine 架构

 

下图是 HetuEngine 的拓扑图。HetuEngine 向下可以对接各类数据源(比如 Hive,GaussDB,HBASE,Elasticsearch 等),对外向用户提供 CLI/JDBC 接口。在同一套 MRS 集群中,HetuEngine 可以在不同租户队列中启动多个 HetuEngine 计算实例,支持一个租户队列上启动一个计算实例。由 HetuEngine 的 HSBroker 实例与 Yarn Service 交互,将租户队列与计算实例绑定,由 HSConsole 提供运维管理页面,对 HetuEngine 的多个计算实例进行运维管理操作,包括启动、停止、删除计算实例,对计算实例进行资源配置,扩缩容等。

 

 

HetuEngine On Yarn 原理

 

如前所述,On Yarn 就是把进程运行在了 Yarn 的 container 中。HetuEngine 是如何实现将 coordinator 和 worker 运行中 Yarn 中呢?

 

Yarn Service 提供了一系列 API 以及一个通用的 AM,让用户可以调用 API 即可将任务提交到 Yarn 上,由 Yarn 实现任务的容器化,对容器进行资源和生命周期管理。详细请参考开源社区的介绍。https://hadoop.apache.org/docs/r3.1.0/hadoop-yarn/hadoop-yarn-site/yarn-service/Overview.html

 

HetuEngine 的 On Yarn 实现正是借助了 Yarn Service 所提供的能力。在 HetuEngine 的 HSBroker 中,调用 Yarn Service 的 API,拉起 application,在 container 中运行 HetuEngine 自己的进程,也就是 coordinator 和 worker。其中有以下几个关键点:

Yarn Service API


创建一个 Yarn Service 服务的接口是/app/v1/services,参数 json 结构如下。

 

POST /app/v1/services{  "name": "hello-world",  "version": "1.0.0",  "description": "hello world example",  "components" :    [      {        "name": "hello",        "number_of_containers": 1,        "artifact": {          "id": "nginx:latest",          "type": "DOCKER"        },        "launch_command": "./start_nginx.sh",        "resource": {          "cpus": 1,          "memory": "256",          "additional" : {            "yarn.io/gpu" : {              "value" : 4,              "unit" : ""            }          }             }      }    ]
复制代码

 

  • name:服务名称,显示在 Yarn 的 resource manager WEB 界面 servicename;

  • version:版本号

  • description:服务的描述

  • components:一个 service 中可以包含多个 component,以运行不同的任务;

  • components.name:component 名称

  • number_of_containers:此 component 中 container 的数量;

  • artifact:进程依赖的资源文件,包含 id 和 type 信息,type 支持 docker 和 tarball

  • launch_command:进程启动命令

  • resource:此 component 所需的资源。

 

HetuEngine 的 HSBroker 根据用户输入构造此 json,然后调用 Yarn Service API,实现 On Yarn。此外 Yarn Service 还提供 stop/delete 等 API,也由 HSBroker 调用,实现对 HetuEngine 计算实例的停止/删除等运维操作。

依赖文件


Yarn Service 支持资源文件在 HDFS 上的形式启动进程,其提供的 API 可以接收 tar 包以及 docker 等形式的资源文件,由 Yarn Service 自行将 HDFS 上的文件进行资源本地化。因此,HetuEngine 只需将依赖的 jar 包和资源文件提前部署在 HDFS 上的指定位置,在调用 Yarn Service 的 API 时指定资源文件即可。

租户绑定

 

 

HetuEngine 支持将计算实例与 Yarn 的租户队列绑定,每个队列上都可以运行一套 coordinator + worker 的组合。基于前面 Yarn Service 能力,只需在构造 json 时,指定队列信息即可。除了队列,还可以设置 container 的放置策略(plecement policy),这里不进行详述,可以参考 yarn 的文档。

资源管理


HetuEngine 支持用户自定义 coordinator 和 worker 的个数以及 CPU 内存大小。如下图,在 HetuEngine 的 HSConsole 页面,用户可以设置计算实例的 CPU,内存,节点个数。内部实现是由 HSBroker 接收用户输入,将 container 运行所需的资源大小设置在 json 的 resource 段中。

 

 

当前 HetuEngine 支持横向扩展 worker 的个数,实现资源的弹性伸缩。即使在计算实例处于运行中时,也可以手动调整 worker 的个数,无需重启计算实例。这得益于 Yarn Service 的 API 中提供的 flex 接口,可以实现向一个运行中的 application 增加或者减少 container 的数量。

客户端使用

 

HetuEngine 的计算实例创建完成后,用户可以通过 hetu-cli 或者 JDBC 程序进行访问,需要用户绑定对应的租户队列权限,才能向指定的队列提交任务。

 

Hetu CLI 示例:

 

hetu-cli --catalog hive --tenant tenantName --schema schemaName
复制代码

 

租户名:(可选)租户名。指定 HetuEngine 启动的租户资源队列,不指定为租户的默认队列。使用此参数时,kinit 的用户需要具有该租户对应角色的权限。

 

Hetu JDBC 示例:

 

Properties properties = new Properties();...…properties.setProperty("tenant", "default");       properties.setProperty("deploymentMode", "on_yarn");……connection = DriverManager.getConnection(url, properties);……
复制代码

 

本文主要介绍了 HetuEngine On Yarn 的原理,其实现主要是借助了 Yarn Service 提供的能力,感兴趣的读者可以深入阅读开源社区相关的介绍。

 

​​​点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 2
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
解析HetuEngine实现On Yarn原理