SAS 9

SAS 系統管理 (103)

教學目標

初步了解如何解決 SAS Enterprise Guide 長時間處理大量資料發生連線中繼的錯誤問題。

重點概念

首先在企業使用 SAS 軟體的我們習慣透過 SAS Enterprise Guide 整理資料,並且產生 SAS 資料集,以利進行統計分析或模型建立等資料科學人工智慧相關實務應用,但是關鍵在於資料且是大量的資料,此時就會發生當 SAS Enterprise Guide 執行 SAS 程式碼超過半小時以上的時間之後,我們將會發生非預期的錯誤無法針對所要求的資源建立連線導致無法正常產生分析結果的資料表,這將會對於業務單位使用 SAS Enterprise Guide 時造成很大的困擾。

接著我們要如何解決上述問題呢?一開始我們先了解 SAS Enterprise Guide 無法在沒有使用者操作的情況下啟動中斷連線,但是有幾種情況可能會造成連線中繼,主要有三種,分別為:

  1. 網路不穩定 (Network instability):如果客戶端和伺服器之間傳輸的資料包遺失,此時 SAS Enterprise Guide 與 SAS Metadata Server 之間的連線可能會被切斷,從而產生先前描述的錯誤。
  2. 防火牆超時 (Firewall time-outs):當連線保持空閒狀態時,可能會由防火牆中繼空閒連線,如果長時間執行的作業始突然中繼連線,或者 SAS Enterprise Guide 長時間處於打開狀態,則中斷連線將可能來自於防火牆使用空閒連線超時的設定。
  3. 工作站上設定省電模式 (Power-saving modes set on the workstation):Windows 作業系統個人電腦在指定的不活動時段內進入低功耗狀態的情況,這種行為經常發生在筆記本電腦上,如果執行 SAS Enterprise Guide 的個人電腦進入低功耗狀態,則可能已禁用網路卡以節省電量,此時若發生這種情況 SAS Enterprise Guide 與中繼資料伺服器之間的連線將會遺失。

而 SAS Enterprise Guide 主要連線兩個連接埠,分別為中繼資料伺服器 (8561) 和工作區伺服器 (8591),當作業運行很長時間時,雖然 SAS Enterprise Guide 和中繼資料伺服器和工作區伺服器在連接埠上連線保持活動狀態。但是中繼資料伺服器連接埠在作業執行時處於空閒狀態,如果設定傳輸控制協議(TCP)超時以中斷空閒連接,則會中斷它,如果防火牆是中斷連線的根因,則可以透過增加為防火牆設置的超時間隔來阻止中斷連線的發生。

再來我們可以在工作區伺服器上設定 keepalive 參數,以利確保防火牆不會中斷不活動的已連接的客戶端, 所謂 keepalive 參數主要是定期向非活動的客戶端發送事件包,以防止網路防火牆中斷連線,其中事件包的間隔主要以秒為單位,最小值為 30 秒,零值將關閉 keepalive 參數,至於修改步驟為:

  1. 開啟「SAS Management Console」工具,登入「sasadm@saspw」帳號密碼。
  2. 在「Server Manager」->「SASApp」->「SASApp - Logical Workspace Server」上按右鍵選擇「Properties」。
  3. 在「Option server parameters」參數中輸入「keepalive=300」代表每五分鐘發送事件包防止網路防火牆中斷連線,按下「OK」。

當設定完成上述設定之後,我們需要關閉再重新啟動 SAS Enterprise Guide 才會生效,以利我們透過 SAS Enterprise Guide 長時間處理大量資料,此外請注意最新版本的 SAS Enterprise Guide,現在預設超時為 30 分鐘,所以 keeplive 的時間必須小於 30 分鐘,至於 SAS Enterprise Guide 的超時可以在 SAS Enterprise Guide 的「Options」->「Data」->「Performance」中勾選「Close data grid after period of inactivity (specify in minutes):」,輸入超時時間以分鐘為單位進行修改 。

最後 SAS Enterprise Guide 無法重新建立與中繼資料伺服器的新連線,若要維護使用者的連線,則 SAS Enterprise Guide 必須保持與中繼資料伺服器的連線,若是該連線中斷就無法重新建立連線,並且發生錯誤,以及 SAS 日誌無法提供有關中斷原因的任何資訊,因為當連線中斷時 SAS 日誌只能顯示連線已中斷。

相關資源

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 中繼資料至其他節點。

相關資源