Leo Yeh's Blog

SAS Viya (84)

教學目標

初步了解 SAS Viya 平台 CAS 資源管理設定政策的基本概念。

重點概念

首先 CAS 資源管理可用於限制 CAS 資源利用率,我們主要針對 CAS 伺服器定義政策限制 CAS 伺服器的 CPU 和磁碟快取暫存的資源,像是對於特定的使用者角色會有不同的資源分配,或者在企業中不同部門將會進行系統資源的成本比例分攤管理與控制,至於為何不採用多個 CAS 伺服器呢?與多個 CAS 伺服器的比較表,請參考下表。

技術 優點 缺點
CAS 資源管理 無需額外的機器,較少資料維護管理,以及無需額外授權。 分享 CAS 伺服器的資源。
多個 CAS 伺服器 無需分享 CAS 伺服器的資源。 需要額外的機器、較多資料維護管理,以及需要額外授權。

其中政策只能由 CAS 超級使用者進行建立和管理,並且應用於分散式 CAS 伺服器中的所有機器,以及透過「sas-admin」指令工具將政策定義儲存在 SAS 設定伺服器 (Consul) 中,然而當我們要開始使用 CAS 資源管理之前必須先安裝「cgroups」內核功能,也就是安裝「libcgroup 」和「libcgroup-tools 」的 Linux 套件,並且確認「cgroups」的檔案系統已經被掛載,請參考 以下步驟:

1
2
3
4
# sudo yum -y install libcgroup libcgroup-tools
# systemctl start cgconfig
# systemctl enable cgconfig
# ls /sys/fs/cgroup

接著我們需要編輯「/opt/sas/viya/config/etc/cas/default/casconfig_usermods.lua」設定檔在其中增加「env.CAS_ENABLE_CONSUL_RESOURCE_MANAGEMENT=true」設定值,並且重新啟動 CAS Controller 伺服器,請參考 以下步驟:

1
# systemctl restart sas-viya-cascontroller-default

再來我們需要透過「sas-admin」指令工具建立政策定義範本,請參考 以下步驟:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# cd /opt/sas/viya
# mkdir policy
# cd /opt/sas/viya/home/bin
# ./sas-admin cas generate-cas-samples --output-location /opt/sas/viya/policy
Generating sample templates for use in creating caslibs...

Generating sample files for use in creating formats...

Generating sample files for use in creating CAS resource management policies...

Generating the MD5 checksums...

All available samples have been generated and are located in "/opt/sas/viya/policy".
# cd /opt/sas/viya/policy
# ls
caslib-templates formats-examples md5.txt policies-examples
# cd policies-examples
# ls
cas-shared-default-priority-2.json globalCaslibs.json priorityAssignments.json

此時我們將會發現產生了三個政策定義範本的檔案,其格式為 JSON,分別為:

  1. globalCaslibs.json
  2. cas-shared-default-priority-2.json
  3. priorityAssignments.json

其中所謂 globalCaslibs.json 為全域 CASLIBS 政策其主要用於在全域 CASLIB 上暫存空間的儲存配額,並且僅有一個全域 CASLIBS 政策定義檔。所謂 cas-shared-default-priority-2.json 為優先等級政策其主要用於在個人 CASLIB 上暫存空間的儲存配額和 CPU 核心數使用限制,並且最多五個優先等級政策定義檔,優先級從 1 (最高) 至 5 (最低) 進行編號。所謂 priorityAssignments.json 為強制特定用戶的優先等級,並且僅有一個強制特定用戶的優先等級定義檔。

編輯「cas-shared-default-priority-2.json」政策定義檔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# vi cas-shared-default-priority-2.json 
{
"_COMMENT_1_": "These are sample values and are not intended for actual use.",
"_COMMENT_2_": "The following limits have been set.",
"_COMMENT_3_": "55 CPU Shares",
"_COMMENT_4_": "9.31GB quota for all casuser caslibs",
"_COMMENT_5_": "27.94GB quota for all HDFS casuser caslibs",
"_COMMENT_6_": "4.66GB quota for all session-scoped tables",
"attributes": {
"cpu": "55",
"globalCasuser": "10000000000",
"globalCasuserHdfs": "30000000000",
"sessionTables": "5000000000"
},
"name": "cas-shared-default-priority-2",
"type": "priorityLevels"
}

編輯「globalCaslibs.json」政策定義檔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# vi globalCaslibs.json
{
"_COMMENT_1_": "These are sample values and are not intended for actual use.",
"_COMMENT_2_": "The following limits have been set.",
"_COMMENT_3_": "CustomerCreatedCaslib1 has a quota of 37.25GB.",
"_COMMENT_4_": "Public has a quota of 4.66GB.",
"_COMMENT_5_": "ReferenceData has a quota of 13.97GB.",
"_COMMENT_6_": "SystemData has a quota of 18.63GB.",
"attributes": {
"CustomerCreatedCaslib1": "40000000000",
"Public": "5000000000",
"ReferenceData": "15000000000",
"SystemData": "20000000000"
},
"name": "globalCaslibs",
"type": "globalCaslibs"
}

編輯「priorityAssignments.json」政策定義檔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# vi priorityAssignments.json
{
"_COMMENT_1_": "These are sample values and are not intended for actual use.",
"_COMMENT_2_": "The following assignments have been specified.",
"_COMMENT_3_": "userID1 is in priority level 5.",
"_COMMENT_4_": "userID2 is in priority level 2.",
"_COMMENT_5_": "userID3 is in priority level 3.",
"_COMMENT_6_": "userID4 is in priority level 4.",
"attributes": {
"userID1": "5",
"userID2": "2",
"userID3": "3",
"userID4": "4"
},
"name": "priorityAssignments",
"type": "priorityAssignments"
}

當我們編輯完成政策定義檔之後,請透過「sas-admin」指令工具將政策定義儲存在 SAS 設定伺服器 (Consul) 中,請參考 以下步驟:

1
2
3
4
# cd /opt/sas/viya/home/bin
# ./sas-admin cas servers policies define global-caslibs --server cas-shared-default --source-file cas-shared-default-globalCaslibs.json
# ./sas-admin cas servers policies define priority-levels --server cas-shared-default --priority 1 --source-file cas-shared-default-priority-2.json
# ./sas-admin cas servers policies define priority-assignments --server cas-shared-default --source-file cas-shared-default-priorityAssignments.json

最後我們需要在 SAS Environment Manager 中建立名為「cas-shared-default-priority-2」的客製群組,並且將多個 CAS 使用者分配給該群組,請注意客製群組名稱必須與優先等級政策的名稱對應。當設定完成之後,當使用者建立 CAS 連線會話時,其將會搜尋該使用者的群組,如果能夠找到對應的 CAS 政策,則 CAS 伺服器會在相應的 cgroup 中強制執行任何 CPU 限制和任何暫存儲存空間的配額限制,同時如果該使用者具有多個優先等級政策對應群組的成員,則 CAS 伺服器會將其分配給最低優先等級政策,其優先等級主要是從 1 (最高) 到 5 (最低) 編號。此外若超過限制,則會在操作時產生「XXX quota exceeded.」或「TKCASTAB_QUOTA_EXCEEDED」的錯誤訊息。

相關資源

⬅️ Go back