日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

多租戶和資源劃分

Doris的多租戶和資源隔離方案,主要目的是為了多用戶在同一Doris集群內(nèi)進(jìn)行數(shù)據(jù)操作時(shí),減少相互之間的干擾,能夠?qū)⒓嘿Y源更合理的分配給各用戶。該方案主要分為兩部分,一是集群內(nèi)節(jié)點(diǎn)級(jí)別的資源組劃分,二是針對(duì)單個(gè)查詢的資源限制。本文介紹節(jié)點(diǎn)與資源劃分。

Doris中的節(jié)點(diǎn)

Doris集群中有兩類節(jié)點(diǎn):Frontend(FE)和Backend(BE)。

  • FE主要負(fù)責(zé)元數(shù)據(jù)管理、集群管理、用戶請(qǐng)求的接入和查詢計(jì)劃的解析等工作。

  • BE主要負(fù)責(zé)數(shù)據(jù)存儲(chǔ)、查詢計(jì)劃的執(zhí)行等工作。

FE不參與數(shù)據(jù)的處理計(jì)算等工作,因此是一個(gè)資源消耗較低的節(jié)點(diǎn)。而BE負(fù)責(zé)所有的數(shù)據(jù)計(jì)算、任務(wù)處理,屬于資源消耗型的節(jié)點(diǎn)。因此,本文所介紹的資源劃分及資源限制方案,適用于BE節(jié)點(diǎn)。FE節(jié)點(diǎn)因?yàn)橘Y源消耗相對(duì)較低,并且還可以橫向擴(kuò)展,通常無需做資源上的隔離和限制,由所有用戶共享即可。

節(jié)點(diǎn)資源劃分

節(jié)點(diǎn)資源劃分,是指將一個(gè)Doris集群內(nèi)的BE節(jié)點(diǎn)設(shè)置標(biāo)簽(Tag),標(biāo)簽相同的BE節(jié)點(diǎn)組成一個(gè)資源組(Resource Group)。資源組可以看作是數(shù)據(jù)存儲(chǔ)和計(jì)算的一個(gè)管理單元。下面通過一個(gè)具體示例,來介紹資源組的使用方式。

  1. 為BE節(jié)點(diǎn)設(shè)置標(biāo)簽。例如當(dāng)前Doris集群有6個(gè)BE節(jié)點(diǎn)。分別為host[1-6]。在初始情況下,所有節(jié)點(diǎn)都屬于一個(gè)默認(rèn)資源組(Default)。您可以使用以下命令將這6個(gè)節(jié)點(diǎn)劃分成3個(gè)資源組group_a、group_b、group_c,其中將host[1-2]組成資源組group_a,host[3-4]組成資源組group_b,host[5-6]組成資源組group_c。

    alter system modify backend "host1:9050" set ("tag.location" = "group_a");
    alter system modify backend "host2:9050" set ("tag.location" = "group_a");
    alter system modify backend "host3:9050" set ("tag.location" = "group_b");
    alter system modify backend "host4:9050" set ("tag.location" = "group_b");
    alter system modify backend "host5:9050" set ("tag.location" = "group_c");
    alter system modify backend "host6:9050" set ("tag.location" = "group_c");
    說明

    一個(gè)BE只支持設(shè)置一個(gè)Tag。

  2. 按照資源組分配數(shù)據(jù)。分布資源組劃分好后,可以將用戶數(shù)據(jù)的不同副本分布在不同資源組內(nèi)。例如一張用戶表 UserTable,在3個(gè)資源組內(nèi)各存放一個(gè)副本,則可以通過如下建表語句實(shí)現(xiàn)。

    create table UserTable
    (k1 int, k2 int)
    distributed by hash(k1) buckets 1
    properties(
        "replication_allocation"="tag.location.group_a:1, tag.location.group_b:1, tag.location.group_c:1"
    )
  3. 使用不同資源組進(jìn)行數(shù)據(jù)查詢。

    在前兩步執(zhí)行完成后,您就可以通過設(shè)置用戶的資源使用權(quán)限,來限制某一用戶的查詢。

    說明

    只能使用指定資源組中的節(jié)點(diǎn)來執(zhí)行。

    例如可以通過以下語句,限制user1只能使用group_a資源組中的節(jié)點(diǎn)進(jìn)行數(shù)據(jù)查詢,user2只能使用group_b資源組,而user3可以同時(shí)使用3個(gè)資源組。

    set property for 'user1' 'resource_tags.location' = 'group_a';
    set property for 'user2' 'resource_tags.location' = 'group_b';
    set property for 'user3' 'resource_tags.location' = 'group_a, group_b, group_c';

    設(shè)置完成后,user1在發(fā)起對(duì)UserTable表的查詢時(shí),只會(huì)訪問group_a資源組內(nèi)節(jié)點(diǎn)上的數(shù)據(jù)副本,并且查詢僅會(huì)使用group_a資源組內(nèi)的節(jié)點(diǎn)計(jì)算資源。而user3的查詢可以使用任意資源組內(nèi)的副本和計(jì)算資源。

    通過對(duì)節(jié)點(diǎn)的劃分,以及對(duì)用戶的資源使用限制,實(shí)現(xiàn)了不同用戶查詢上的物理資源隔離。可以給不同的業(yè)務(wù)部門創(chuàng)建不同的用戶,并限制每個(gè)用戶使用不同的資源組。以避免不同業(yè)務(wù)部分之間使用資源干擾。例如集群內(nèi)有一張業(yè)務(wù)表需要共享給所有9個(gè)業(yè)務(wù)部門使用,但是希望能夠盡量避免不同部門之間的資源搶占。您可以為這張表創(chuàng)建3個(gè)副本,分別存儲(chǔ)在3個(gè)資源組中。然后為9個(gè)業(yè)務(wù)部門創(chuàng)建9個(gè)用戶,每3個(gè)用戶限制使用一個(gè)資源組。這樣,資源的競(jìng)爭(zhēng)程度就由9降低到了3。

    其次,針對(duì)在線和離線任務(wù)的隔離。您可以利用資源組的方式實(shí)現(xiàn)。例如可以將節(jié)點(diǎn)劃分為Online和Offline兩個(gè)資源組。表數(shù)據(jù)依然以3副本的方式存儲(chǔ),其中2個(gè)副本存放在Online資源組,1個(gè)副本存放在Offline資源組。Online資源組主要用于高并發(fā)低延遲的在線數(shù)據(jù)服務(wù),而一些大查詢或離線ETL操作,則可以使用Offline資源組中的節(jié)點(diǎn)執(zhí)行。從而實(shí)現(xiàn)在統(tǒng)一集群內(nèi)同時(shí)提供在線和離線服務(wù)的能力。

  4. 導(dǎo)入作業(yè)的資源組分配。導(dǎo)入作業(yè)(包括Insert、Broker Load、Routine Load、Stream Load等)的資源使用可以分為計(jì)算資源和寫入資源兩部分。所以對(duì)于導(dǎo)入作業(yè)的資源組的分配分成兩個(gè)步驟。如果希望導(dǎo)入操作所使用的全部資源都限定在數(shù)據(jù)所在的資源組的話,只需將用戶級(jí)別的Resource Tag設(shè)置為和副本的Resource Tag相同即可。

    • 計(jì)算資源:負(fù)責(zé)讀取數(shù)據(jù)源、數(shù)據(jù)轉(zhuǎn)換和分發(fā)。理論上可以選擇任意節(jié)點(diǎn)完成。

    • 寫入資源:負(fù)責(zé)數(shù)據(jù)編碼、壓縮并寫入磁盤。必須是數(shù)據(jù)副本所在的節(jié)點(diǎn)。

    • 使用用戶級(jí)別的Resource Tag來限定計(jì)算資源所能使用的資源組。

    • 使用副本的Resource Tag來限定寫入資源所能使用的資源組。

單查詢資源限制

上面的資源組方法是節(jié)點(diǎn)級(jí)別的資源隔離和限制,但在資源組內(nèi)也可能發(fā)生資源搶占問題。例如,上面所述的將3個(gè)業(yè)務(wù)部門安排在同一資源組內(nèi)的示例,雖然該方法降低了資源競(jìng)爭(zhēng)程度,但是3個(gè)部門的查詢依然有可能相互影響。

因此,除了資源組方案外,Doris還提供了對(duì)單查詢的資源限制功能。目前Doris對(duì)單查詢的資源限制主要分為CPU和內(nèi)存限制兩方面。

  • 內(nèi)存限制:Doris可以限制一個(gè)查詢被允許使用的最大內(nèi)存開銷,以保證集群的內(nèi)存資源不會(huì)被某一個(gè)查詢?nèi)空加谩?/p>

    可以通過以下方式設(shè)置內(nèi)存限制:

    # 設(shè)置會(huì)話變量exec_mem_limit,則之后該會(huì)話內(nèi)(連接內(nèi))的所有查詢都使用這個(gè)內(nèi)存限制。
    set exec_mem_limit=1G;
    # 設(shè)置全局變量exec_mem_limit,則之后所有新會(huì)話(新連接)的所有查詢都使用這個(gè)內(nèi)存限制。
    set global exec_mem_limit=1G;
    # 在SQL中設(shè)置變量exec_mem_limit,則該變量?jī)H影響這個(gè)SQL。
    select /*+ SET_VAR(exec_mem_limit=1G) */ id, name from tbl where xxx;

    Doris的查詢引擎是基于全內(nèi)存的MPP查詢框架。當(dāng)一個(gè)查詢的內(nèi)存使用超過限制后,查詢會(huì)被終止。因此,當(dāng)一個(gè)查詢無法在合理的內(nèi)存限制下運(yùn)行時(shí),您需要通過一些SQL優(yōu)化手段或集群擴(kuò)容的方式來解決。

  • CPU限制:

    您可以通過以下方式限制查詢的CPU資源。

    # 設(shè)置會(huì)話變量cpu_resource_limit,則之后該會(huì)話內(nèi)(連接內(nèi))的所有查詢都使用這個(gè)CPU限制。
    set cpu_resource_limit = 2
    # 設(shè)置用戶的屬性cpu_resource_limit,則所有該用戶的查詢情況都使用這個(gè)CPU限制。該屬性的優(yōu)先級(jí)高于會(huì)話變量cpu_resource_limit
    set property for 'user1' 'cpu_resource_limit' = '3';

    cpu_resource_limit的取值是一個(gè)相對(duì)值,取值越大則能夠使用的CPU資源越多。但一個(gè)查詢能使用的CPU上限也取決于表的分區(qū)分桶數(shù)。通常一個(gè)查詢的最大CPU使用量和查詢涉及到的Tablet數(shù)量正相關(guān)。特殊情況下,假設(shè)一個(gè)查詢僅涉及到一個(gè)Tablet,則即使cpu_resource_limit設(shè)置一個(gè)較大值,也僅能使用1個(gè)CPU資源。

通過內(nèi)存和CPU的資源限制,可以在一個(gè)資源組內(nèi),將用戶的查詢進(jìn)行更細(xì)粒度的資源劃分。例如可以讓部分時(shí)效性要求不高,但是計(jì)算量很大的離線任務(wù)使用更少的CPU資源和更多的內(nèi)存資源;而部分延遲敏感的在線任務(wù),使用更多的CPU資源以及合理的內(nèi)存資源。

最佳實(shí)踐和向下兼容

Tag劃分和CPU限制是v0.15版本中的新功能。為了保證可以從老版本平滑升級(jí),Doris做了如下的向下兼容:

  • 每個(gè)BE節(jié)點(diǎn)會(huì)有一個(gè)默認(rèn)的Tag:"tag.location": "default"

  • 通過alter system add backend語句新增的BE節(jié)點(diǎn)也會(huì)默認(rèn)設(shè)置Tag"tag.location": "default"

  • 所有表的副本分布默認(rèn)修改為"tag.location.default:xx”。其中xx為原副本數(shù)量。

  • 您依然可以通過"replication_num" = "xx"在建表語句中指定副本數(shù),這種屬性將會(huì)自動(dòng)轉(zhuǎn)換成"tag.location.default:xx,從而保證無需修改原建表語句。

  • 默認(rèn)情況下,單查詢的內(nèi)存限制為單節(jié)點(diǎn)2 GiB,CPU資源無限制,和原有行為保持一致。且resource_tags.location屬性為空,即默認(rèn)情況下,您可以訪問任意Tag的BE,和原有行為保持一致。

例如,從原集群升級(jí)到v0.15版本后,您可以參考如下步驟開始使用資源劃分功能。

  1. 關(guān)閉數(shù)據(jù)修復(fù)與均衡邏輯。

    因?yàn)樯?jí)后,BE的默認(rèn)Tag為"tag.location": "default",而表的默認(rèn)副本分布為"tag.location.default:xx。所以如果直接修改BE的Tag,系統(tǒng)會(huì)自動(dòng)檢測(cè)到副本分布的變化,從而開始數(shù)據(jù)重分布,這可能會(huì)占用部分系統(tǒng)資源。您可以在修改Tag前,先關(guān)閉數(shù)據(jù)修復(fù)與均衡邏輯,以保證在規(guī)劃資源時(shí),不會(huì)有副本重分布的操作。

    ADMIN SET FRONTEND CONFIG ("disable_balance" = "true");
    ADMIN SET FRONTEND CONFIG ("disable_tablet_scheduler" = "true");
  2. 設(shè)置Tag和表副本分布。

    通過alter system modify backend語句進(jìn)行BE的Tag設(shè)置,以及通過alter table語句修改表的副本分布策略。

    alter system modify backend "host1:9050, 1212:9050" set ("tag.location" = "group_a");
    alter table my_table modify partition p1 set ("replication_allocation" = "tag.location.group_a:2");
  3. 開啟數(shù)據(jù)修復(fù)與均衡邏輯。

    在Tag和副本分布都設(shè)置完畢后,可以開啟數(shù)據(jù)修復(fù)與均衡邏輯來觸發(fā)數(shù)據(jù)的重分布。

    ADMIN SET FRONTEND CONFIG ("disable_balance" = "false");
    ADMIN SET FRONTEND CONFIG ("disable_tablet_scheduler" = "false");

    該過程根據(jù)涉及到的數(shù)據(jù)量會(huì)持續(xù)一段時(shí)間,并且會(huì)導(dǎo)致部分Colocation Table無法進(jìn)行Colocation規(guī)劃(因?yàn)楦北驹谶w移中)。可以通過show proc "/cluster_balance/" 來查看進(jìn)度,也可以通過show proc "/statistic"UnhealthyTabletNum的數(shù)量來判斷進(jìn)度。當(dāng)UnhealthyTabletNum降為0時(shí),則代表數(shù)據(jù)重分布完畢。

  4. 設(shè)置用戶的資源標(biāo)簽權(quán)限。

    數(shù)據(jù)重分布完畢后,可以開始設(shè)置用戶的資源標(biāo)簽權(quán)限。默認(rèn)情況下,用戶的resource_tags.location屬性為空,即可以訪問任意Tag的BE。所以在前面步驟中,不會(huì)影響到已有用戶的正常查詢。當(dāng)resource_tags.location屬性非空時(shí),用戶將被限制訪問指定Tag的BE。