深入解析HetuEngine實(shí)現(xiàn)On Yarn原理
摘要:本文介紹HetuEngine實(shí)現(xiàn)On Yarn的原理,通過(guò)閱讀本文,讀者可以了解HetuEngine如何在資源使用方面融入Hadoop生態(tài)體系。
本文分享自華為云社區(qū)《MRS HetuEngine 特性之 On Yarn原理介紹》,作者:一顆檸檬。
HetuEngine是華為自研高性能分布式SQL查詢&數(shù)據(jù)虛擬化引擎。與大數(shù)據(jù)生態(tài)無(wú)縫融合,實(shí)現(xiàn)海量數(shù)據(jù)秒級(jí)查詢;支持多源異構(gòu)協(xié)同,使能數(shù)據(jù)湖內(nèi)一站式SQL融合分析。在整合開(kāi)源能力的同時(shí),MRS HetuEngine相較于開(kāi)源社區(qū)也做了大量的優(yōu)化,其中一個(gè)重要的特性就是On Yarn。
什么是On Yarn?
顧名思義,就是將進(jìn)程運(yùn)行在Yarn上,由Yarn進(jìn)行資源的管理和調(diào)度。
不論是TrinoDB/PrestoDB還是openLooKeng,部署方式都是將coordinator和worker進(jìn)程直接運(yùn)行在主機(jī)上,與主機(jī)上的其他應(yīng)用程序共享資源,無(wú)法做到資源隔離,并且難以擴(kuò)展。
MRS HetuEngine借助Yarn Service提供的能力,將coordinator和worker進(jìn)程以Yarn application的形式運(yùn)行在Yarn container中,通過(guò)MRS集群的租戶劃分,可以將HetuEngine計(jì)算實(shí)例啟動(dòng)在特定租戶隊(duì)列里,從而實(shí)現(xiàn)資源隔離。
HetuEngine架構(gòu)
下圖是HetuEngine的拓?fù)鋱D。HetuEngine向下可以對(duì)接各類(lèi)數(shù)據(jù)源(比如Hive,GaussDB,HBASE,Elasticsearch等),對(duì)外向用戶提供CLI/JDBC接口。在同一套MRS集群中,HetuEngine可以在不同租戶隊(duì)列中啟動(dòng)多個(gè)HetuEngine計(jì)算實(shí)例,支持一個(gè)租戶隊(duì)列上啟動(dòng)一個(gè)計(jì)算實(shí)例。由HetuEngine的HSBroker實(shí)例與Yarn Service交互,將租戶隊(duì)列與計(jì)算實(shí)例綁定,由HSConsole提供運(yùn)維管理頁(yè)面,對(duì)HetuEngine的多個(gè)計(jì)算實(shí)例進(jìn)行運(yùn)維管理操作,包括啟動(dòng)、停止、刪除計(jì)算實(shí)例,對(duì)計(jì)算實(shí)例進(jìn)行資源配置,擴(kuò)縮容等。
HetuEngine On Yarn原理
如前所述,On Yarn就是把進(jìn)程運(yùn)行在了Yarn 的container中。HetuEngine 是如何實(shí)現(xiàn)將coordinator 和worker運(yùn)行中Yarn中呢?
Yarn Service提供了一系列API以及一個(gè)通用的AM,讓用戶可以調(diào)用API即可將任務(wù)提交到Y(jié)arn上,由Yarn實(shí)現(xiàn)任務(wù)的容器化,對(duì)容器進(jìn)行資源和生命周期管理。詳細(xì)請(qǐng)參考開(kāi)源社區(qū)的介紹。https://hadoop.apache.org/docs/r3.1.0/hadoop-yarn/hadoop-yarn-site/yarn-service/Overview.html
HetuEngine的 On Yarn實(shí)現(xiàn)正是借助了Yarn Service所提供的能力。在HetuEngine的HSBroker中,調(diào)用Yarn Service的API,拉起application,在container中運(yùn)行HetuEngine自己的進(jìn)程,也就是coordinator和worker。其中有以下幾個(gè)關(guān)鍵點(diǎn):
Yarn Service API
創(chuàng)建一個(gè)Yarn Service服務(wù)的接口是/app/v1/services,參數(shù)json結(jié)構(gòu)如下。
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:服務(wù)名稱,顯示在Yarn的resource manager WEB界面servicename;
- version:版本號(hào)
- description:服務(wù)的描述
- components:一個(gè)service中可以包含多個(gè)component,以運(yùn)行不同的任務(wù);
- components.name:component名稱
- number_of_containers:此component中container的數(shù)量;
- artifact:進(jìn)程依賴的資源文件,包含id和type信息,type支持docker和tarball
- launch_command:進(jìn)程啟動(dòng)命令
- resource:此component所需的資源。
HetuEngine的HSBroker根據(jù)用戶輸入構(gòu)造此json,然后調(diào)用Yarn Service API,實(shí)現(xiàn)On Yarn。此外Yarn Service還提供stop/delete等API,也由HSBroker調(diào)用,實(shí)現(xiàn)對(duì)HetuEngine計(jì)算實(shí)例的停止/刪除等運(yùn)維操作。
依賴文件
Yarn Service支持資源文件在HDFS上的形式啟動(dòng)進(jìn)程,其提供的API可以接收tar包以及docker等形式的資源文件,由Yarn Service自行將HDFS上的文件進(jìn)行資源本地化。因此,HetuEngine只需將依賴的jar包和資源文件提前部署在HDFS上的指定位置,在調(diào)用Yarn Service的API時(shí)指定資源文件即可。
租戶綁定
HetuEngine支持將計(jì)算實(shí)例與Yarn的租戶隊(duì)列綁定,每個(gè)隊(duì)列上都可以運(yùn)行一套coordinator + worker的組合?;谇懊鎅arn Service能力,只需在構(gòu)造json時(shí),指定隊(duì)列信息即可。除了隊(duì)列,還可以設(shè)置container的放置策略(plecement policy),這里不進(jìn)行詳述,可以參考yarn的文檔。
資源管理
HetuEngine支持用戶自定義coordinator和worker的個(gè)數(shù)以及CPU內(nèi)存大小。如下圖,在HetuEngine的HSConsole頁(yè)面,用戶可以設(shè)置計(jì)算實(shí)例的CPU,內(nèi)存,節(jié)點(diǎn)個(gè)數(shù)。內(nèi)部實(shí)現(xiàn)是由HSBroker接收用戶輸入,將container運(yùn)行所需的資源大小設(shè)置在json的resource段中。
當(dāng)前HetuEngine支持橫向擴(kuò)展worker的個(gè)數(shù),實(shí)現(xiàn)資源的彈性伸縮。即使在計(jì)算實(shí)例處于運(yùn)行中時(shí),也可以手動(dòng)調(diào)整worker的個(gè)數(shù),無(wú)需重啟計(jì)算實(shí)例。這得益于Yarn Service的API中提供的flex接口,可以實(shí)現(xiàn)向一個(gè)運(yùn)行中的application增加或者減少container的數(shù)量。
客戶端使用
HetuEngine的計(jì)算實(shí)例創(chuàng)建完成后,用戶可以通過(guò)hetu-cli或者JDBC程序進(jìn)行訪問(wèn),需要用戶綁定對(duì)應(yīng)的租戶隊(duì)列權(quán)限,才能向指定的隊(duì)列提交任務(wù)。
Hetu CLI示例:
hetu-cli --catalog hive --tenant tenantName --schema schemaName
租戶名:(可選)租戶名。指定HetuEngine啟動(dòng)的租戶資源隊(duì)列,不指定為租戶的默認(rèn)隊(duì)列。使用此參數(shù)時(shí),kinit的用戶需要具有該租戶對(duì)應(yīng)角色的權(quán)限。
Hetu JDBC示例:
Properties properties = new Properties(); ...… properties.setProperty("tenant", "default"); properties.setProperty("deploymentMode", "on_yarn"); …… connection = DriverManager.getConnection(url, properties); ……
本文主要介紹了HetuEngine On Yarn的原理,其實(shí)現(xiàn)主要是借助了Yarn Service提供的能力,感興趣的讀者可以深入閱讀開(kāi)源社區(qū)相關(guān)的介紹。
到此這篇關(guān)于解析HetuEngine實(shí)現(xiàn)On Yarn原理的文章就介紹到這了,更多相關(guān)HetuEngine實(shí)現(xiàn)On Yarn原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
百萬(wàn)行WPF項(xiàng)目代碼重構(gòu)記錄分析
這篇文章主要為大家介紹了一次百萬(wàn)行WPF項(xiàng)目代碼的重構(gòu)記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Git的基本操作流程及工作區(qū)版本庫(kù)暫存區(qū)的關(guān)系
這篇文章主要為大家介紹了Git的基本操作流程及工作區(qū)版本庫(kù)暫存區(qū)的關(guān)系,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04聯(lián)邦學(xué)習(xí)FedAvg中模型聚合過(guò)程的理解分析
這篇文章主要為大家介紹了FedAvg中模型聚合過(guò)程的理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05微信小程序應(yīng)用號(hào)開(kāi)發(fā)教程詳解
這篇文章主要介紹了微信小程序應(yīng)用號(hào)開(kāi)發(fā)教程詳解的相關(guān)資料,需要的朋友可以參考下2016-09-092018年最值得一讀的互聯(lián)網(wǎng)書(shū)單
2018年已經(jīng)過(guò)去了近三分之二了,是不是感覺(jué)時(shí)光匆匆、一去不復(fù)返,過(guò)去的時(shí)間我們追不回,但是我們可以更加珍惜以后的時(shí)間!下面這篇文章主要給大家分享了2018年最值得一讀的互聯(lián)網(wǎng)書(shū)單,希望以后的日子里大家可以多讀書(shū),讀好書(shū)2018-08-08幾道和「黑洞照片」那種海量數(shù)據(jù)有關(guān)的算法問(wèn)題
昨晚被一則新聞刷屏:北京時(shí)間 4 月 10 日今晚 9 點(diǎn),人類(lèi)首張黑洞照片正式發(fā)布2019-04-04