SAS Viya (51)

教學目標

初步了解在 SAS Viya 3.4 平台中更新授權碼的基本概念。

重點概念

首先 SAS Viya 提供授權檔主要由兩個檔案格式所組成,分別為為文字檔格式 (.txt) 和 JSON Web Tokon 檔格式 (.jwt),不同的 SAS Viya 產品將會採用不同授權的檔案格式,並且 SAS Cloud Analytic Services (CAS) 和 SAS Programming Run-time Environment (SPRE) 皆使用相同的授權,在安裝期間授權檔將會被套用至 CAS In-memory Compute Engine 和 SAS Programming Run-time Environment 中,請注意每台 CAS 伺服器皆需要套用授權檔,像是 CAS Controller、CAS Secondary Controller 和 CAS Worker。

接著當我們發現授權碼快要到期時,將要如何套用新的授權碼檔呢?建議透過 Ansible 工具套用新的授權碼檔至至 CAS Controller 、 CAS Secondary Controller 和 CAS Worker 和 SAS Programming Run-time Environment 中,相關步驟如下所示:

  1. 登入至 Ansible Controller 所在的機器,不一是 CAS Controller 伺服器,並且複製兩個授權檔至「sas_viya_playbook」資料夾中。
  2. 編輯「vars.yml」設定檔中的「LICENSE_FILENAME」和「LICENSE_COMPOSITE_FILENAME」對應授權檔案,「LICENSE_FILENAME」對應文字檔格式 (.txt) 和「LICENSE_COMPOSITE_FILENAME」對應 JSON Web Tokon 檔格式 (.jwt)。
  3. 以「Ansible」工具執行「apply-license.yml」腳本檔套用授權檔,請注意若有多台 CAS 伺服器,則建議使用「inventory」檔進行部署。

編輯「vars.yml」設定檔

1
2
3
4
5
6
7
# The name of the license file on the Ansible machine.
LICENSE_FILENAME: "SASViyaV0300_XXXXXX_Linux_x86-64.txt"

# The name of the composite license file on the Ansible machine.
# If both files are present, the playbook will use the
# composite license file.
LICENSE_COMPOSITE_FILENAME: "SASViyaV0300_XXXXXX_YYYYYYYY_Linux_x86-64.jwt"

執行「apply-license.yml」腳本檔

1
# ansible-playbook apply-license.yml

再來當授權碼更新完成之後,我們就能夠登入至 SAS Studio V 輸入以下指令確認是否成功更新授權碼至 CAS 伺服器,主要會顯示關於、系統和授權碼三個部份的資訊。

確認 CAS 伺服器中的授權碼資訊

1
2
CAS CASAUTO;
CAS CASAUTO LISTABOUT;

最後我們除了確認 CAS 伺服器中的授權碼資訊,建議也針對 SAS 伺服器進行確認,主要登入至 SAS Studio V 輸入以下指令確認是否成功更新授權碼至 SAS 伺服器,主要會顯示授權碼、SAS Viya 產品的資訊。

確認 SAS 伺服器中的授權碼資訊

1
PROC SETINIT;RUN;

相關資源

SAS 系統管理 (102)

教學目標

初步了解 SAS 9 平台中網頁應用程式伺服器的重點概念。

重點概念

首先 SAS 9 平台中的網頁應用程式伺服器皆是基於 Pivotal tc Server 開發,所謂 tc Server 主要是基於開放源始碼 Apache Tomcat ,所謂 Tomcat 主要是由 Apache 軟體基金會下 Jakarta 專案開發的 Servlet 容器,按照 Sun Microsystems 提供的技術規範,實現了對 Servlet 和 JavaServer Page(JSP)的支援,並且實作網站應用程式伺服器的一些功能。而 Tomcat 最外層的容器稱為 Server 代表整個伺服器,其中至少包括一個 Service,主要用於具體提供服務,而 Service 主要包括兩個部分,分別為 Connector 和 Container,所謂 Connector 主要是負責網路連線和請求回應等相關事件,所謂 Container 主要是用於封裝和管理 Servlet 以及處理相關請求。請注意一個 Tomcat 只能有一個 Server,一個 Server 可以包括多個 Service,一個 Service 可以包括多個 Connector,但是只能有一個 Container。

接著 Tomcat 中的 Server 主要是由 org.apache.catalina.startup.Catalina 類別服務進行管理,所謂 Catalina 服務就是整個 Tomcat 的管理類別。其中主要有三個方法分別為 load、start 和 stop,主要用於管理整個伺服器的生命週期,load 方法主要用於根據 server.xml 檔案建立伺服器,而 start 方法則是啟動伺服器,至於 stop 方法則是停止伺服器。若以 SAS 平台中 SASServer1_1 伺服器為例,則一開始就會啟動 Catatlina 服務。

啟動 Catatlina 服務

1
2
2018-12-20 13:33:58,597 INFO  (WrapperSimpleAppMain) [org.apache.catalina.startup.Catalina] Initialization processed in 557 ms
2018-12-20 13:33:59,347 INFO (WrapperSimpleAppMain) [org.apache.catalina.core.StandardService] Starting service Catalina

再來 Tomcat 中的 Container 主要是由 Engine、Host、Context 和 Wrapper 四個子容器所組成,所謂 Engine 主要是用於管理多個站點,但是一個 Service 僅會有一個 Engine,所謂 Host 主要代表一個站點,也能夠稱為虛擬主機,所謂 Context 主要代表一個應用程式皆會對應一個 web.xml 設定檔,所謂 Wrapper 主要代表一個 Servlet。其中 Host 和 Context 的差別在於 Context 代表一個應用,預設在 webapps 資料夾下的每個目錄皆是一個應用,其中 ROOT 目錄中存放著主應用,其它目錄存放著子應用。若以 SAS 平台中 SASServer1_1 伺服器為例,則會先啟動 Engine 容器,之後依序部署子應用設定描述檔 (XML 檔案),此外部署過程中會建立 SecureRandom 實體以利產生 Session ID,但在 Windows 平台主要預設會以 SHA1PRNG 演算法為主,所以不影響效能。

啟動 Engine 容器

1
2018-12-20 13:33:59,347 INFO  (WrapperSimpleAppMain) [org.apache.catalina.core.StandardEngine] Starting Servlet Engine: Pivotal tc Runtime 3.0.0.RELEASE/7.0.55.A.RELEASE

部署 XXX 子應用設定

1
2
2018-12-20 13:33:59,347 INFO  (localhost-startStop-4) [org.apache.catalina.startup.HostConfig] Deploying configuration descriptor D:\SAS\Config\Lev1\Web\WebAppServer\SASServer1_1\conf\Catalina\localhost\XXX.xml
2018-12-20 13:34:21,172 INFO (localhost-startStop-2) [org.apache.catalina.startup.HostConfig] Deployment of configuration descriptor D:\SAS\Config\Lev1\Web\WebAppServer\SASServer1_1\conf\Catalina\localhost\XXX.xml has finished in 21,825 ms

建立 SecureRandom 實體

1
[org.apache.catalina.util.SessionIdGenerator] Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [171] milliseconds.

最後當所有子應用皆部署完成之後,就會啟動 Tomcat 伺服器, 若以 SAS 平台中 SASServer1_1 伺服器為例,在實務上客戶端啟動時間通常需要 10 分鐘至 15 分鐘,主要花費的時間皆在於載入子應用設定為主,若子應用設定越多,則啟動時間越慢,至於是否能夠優化啟動時間,就目前測試若採用 m5.xlarge 等級的 AWS 雲端主機 (4 個 vCPU 、 16GB 記憶體和最多 3,500Mbps 的 EBS 頻寬),在不調整硬碟每秒輸入/輸出 (IOPS) 的情況下就能夠將啟動時間縮短為 3 分鐘至 5 分鐘。

啟動 Tomcat 伺服器

1
2
3
2018-12-20 13:36:20,560 INFO  (localhost-startStop-5) [org.apache.catalina.startup.HostConfig] Deploying web application directory D:\SAS\Config\Lev1\Web\WebAppServer\SASServer1_1\webapps\ROOT
2018-12-20 13:36:20,888 INFO (localhost-startStop-5) [org.apache.catalina.startup.HostConfig] Deployment of web application directory D:\SAS\Config\Lev1\Web\WebAppServer\SASServer1_1\webapps\ROOT has finished in 328 ms
2018-12-20 13:36:20,914 INFO (WrapperSimpleAppMain) [org.apache.catalina.startup.Catalina] Server startup in 142317 ms

總結 SAS 平台中的網站應用程式伺服器主要以 Tomcat 伺服器為基礎進行開發,因此深入了解 Tomcat 伺服器核心原理將有助於平台開發與維運,此外使用者主要會透過 Apache HTTP Server 網站伺服器連線至不同的網站應用程式伺服器,此時必須要注意網站伺服器設定檔中的「stickysession」參數值是否與網站應用程式伺服器設定檔「context.xml」中的「sessionCookieName」參數值一致,至於為何要一致細節之後再分享啦。

相關資源

SAS 系統管理 (101)

教學目標

初步了解 SAS 9 平台設定 SAS WORK 暫存檔案儲存空間的重點概念。

重點概念

首先 SAS 在工作階段執行期間將會需要暫存的磁碟空間,也就是所謂的 SAS WORK,預設 SAS 會儲存 SAS 暫存檔案至暫存的磁碟空間中,而暫存檔案主要則是當 SAS 階段結束之後將會直接被刪除,若沒有被正常刪除的檔案,則建議透過 SAS 官方所提供 Cleanwork 工具進行清理。

接著我們要如何修改暫存的磁碟空間呢?其實只要修改 sasv9.cfg 設定檔即可,我們僅需要加入以下參數。

修改 sasv9.cfg 設定檔

1
-work /disk1/directory

再來我們要如何設定多個暫存的磁碟空間呢?主要有兩種類型,分別為隨機 (Random) 和空間 (Space),隨機主要就是分散讀寫至不同的磁碟空間,空間主要就是選取最大的磁碟空間,但是設定則需要先建立 /sasinfo/workfiles 檔案,接著再修改 sasv9.cfg 設定檔即可

隨機 (Random)

新增 /sasinfo/workfiles 設定檔

1
2
3
4
/disk1/directory
/disk2/directory
/disk3/directory
method=random

修改 sasv9.cfg 設定檔

1
-work /sasinfo/workfiles

空間 (Space)

新增 /sasinfo/workfiles 設定檔

1
2
3
4
/disk1/directory
/disk2/directory
/disk3/directory
method=space

修改 sasv9.cfg 設定檔

1
-work /sasinfo/workfiles

最後我們可以先從 SAS Work 磁碟空間開始進行 SAS 平台的效能優化,當 SAS Work 磁碟空間讀寫效能越快,則 SAS 平台執行效能相對更佳。此外我們更能夠透過以下 SAS 程式查看其它與效能相關的參數設定,至於要如何更進階優化方式之後再分享啦。

查看效能相關設定選項

1
2
proc options group=performance; 
run;

相關資源

SAS 系統管理 (100)

教學目標

初步了解 SAS 9 平台設定 SAS/ACCESS Interface to Hadoop 的重點概念。

重點概念

首先當使用者需要透過 SAS Enterprise Guide 存取 Hadoop 平台中的資料時,通常會有 ODBC 和 SAS/ACCESS 兩種方式,建議採用 SAS/ACCESS 的方式,以利進行更快速的存取。當我們安裝完成 SAS/ACCESS Interface to Hadoop 之後,則需要透過 SAS 部署管理員工具取得存取 Hadoop 平台所需要的 JAR 檔和設定檔至 SAS 客戶端機器,請注意若是伺服器版本,則 SAS 伺服器對於 Hadoop 平台而言就是 SAS 客戶端機器,我們必須以系統管理員帳號執行 SAS 部署管理員工具,點選「Configure Hadoop Client Files」進行設定,若以 Cloudera 的 Hadoop 平台為例,則我們主要將會連線至 7180 連接埠的 Hadoop 叢集管理伺服器資訊,並且輸入 Hadoop 叢集管理伺服器的管理員帳號和密碼。

接著若是輸入 Hadoop 叢集管理伺服器的管理員帳號和密碼正確無誤,則會自動取得 Hive、Impala、Oozie 服務的主機名稱,請注意此處每個服務僅能夠有一個主機名稱,若有多個則會出現錯誤,無法進行下一步操作。此外我們還需要以 SSH 連線至 Hadoop 叢集伺服器,主要有兩種方式進行驗證,分別為私鑰和密碼,一般來說,就是 root 帳號和密碼,請注意 Hadoop 叢集伺服器必須先啟用允許密碼登入 SSH 連線,才能夠使用密碼方式進行驗證,以及我們還需要設定 SAS 專用的 Hadoop 客戶端 JAR 檔和設定檔目錄,請注意此資料夾是設定至 SAS 客戶端機器中。

再來我們可以選擇是否要執行驗證的步驟,基本上就是在「Run Validation」步驟中勾選「SAS/ACCESS Interface to Hadoop」預設會進行驗證,主要輸入 Hive 相關連線資訊,包括 Schema、使用者和密碼,請注意若是有錯誤發生可以查看 Linux 的設定資料夾「/your-home/.SASAppData/SASDeploymentWizard」或 Windows 的設定 Log 檔資料夾「C:\users\your-account\AppData\Local\SASDeploymentWizard」的記錄檔,以利找出發生錯誤的原因,我們設定時就曾經遇過授權碼不符合或 Hive 帳號沒有權限存取 Schema 導致驗證錯誤。

最後當設定完成「SAS/ACCESS Interface to Hadoop」設定之後,我們就能夠透過客戶端的 SAS Enterprise Guide 工具連線至 SAS 伺服器,並且執行以下 SAS 程式進行 Hadoop 函式庫宣告,以利再次進行 SAS 伺服器存取 Hadoop 平台的測試與驗證。

1
libname hdp hadoop server=hxpduped port=10000 schema=default  user=myusr1 password=mypwd1;

相關資源

SAS 系統管理 (99)

教學目標

初步了解 SAS 9 平台若採用叢集 Metadata 伺服器備份還原的重點概念。

重點概念

首先我們針對 SAS 平台針對任何變更時,則建議先備份 Metadata 中繼資料,以利當發生問題時還原 Metadata 中繼資料,然而若我們部署 SAS 平台時採用叢集 Metadata 伺服器,則會發生無法還原的錯誤訊息「A recovery operation cannot be performed on a running cluster, but only on standalone servers. Bring up a server with startNoCluster on which to run the recovery」。

接著我們要如何解決此問題呢?主要重點在於我們無法使用 SAS Management Console 工具還原以叢集模式執行的 Metadata 伺服器,而是我們必須還原叢集中的一個節點,還原之後當重新啟動叢集時,還原的資料就會自動更新至其它的節點。所以我們必須想辦法不以叢集模式執行 Metadata 伺服器,根據官方文件的解決步驟在於以下指令以非叢集模式執行的 Metadata 伺服器,再進行還原相關步驟。

Windows 平台

1
> metadataserver.bat -startNoCluster

Linux 平台

1
# metadataserver.sh -startNoCluster

再來我們透過執行指令以非叢集模式啟動的 Metadata 伺服器時必須注意三件事情,分別為:

  1. 必須先停止所有叢集 Metadata 伺服器節點之後,再以非叢集模式啟動的 Metadata 伺服器。
  2. 必須確認以啟動 Metadata 伺服器服務的網域帳號在命令提示字元或 PowerShell 執行啟動指令。
  3. 建議將啟動 Metadata 伺服器服務的網域帳號加入至本機管理者群組,以及設定擁有「\Lev1\SASMeta\MetadataServer」完全控制的權限。

最後我們總結遵循以下步驟就能夠針對叢集 Metadata 伺服器進行 Metadata 中繼資料的還原,分別為:

  1. 停止叢集中所有 Metadata 伺服器的節點。
  2. 以非叢集模式啟動的 Metadata 伺服器。
  3. 使用 SAS Management Console 工具連接之後進行 Metadata 中繼資料的還原。
  4. 以叢集模式重新啟動 Metadata 伺服器主要節點。
  5. 啟動叢集 Metadata 伺服器中的其他節點,此時主要節點將會更新 Metadata 中繼資料至其他節點。

相關資源