Leo Yeh's Blog

SAS Viya (14)

教學目標

初步了解如何解決無法載入資料至 CASLIBS 的「Could not open file to flush memory contents」錯誤問題。

重點概念

首先 SAS Cloud Analytics Services (CAS) 主要是 In-Memory 的伺服器,同時分析 In-Memory 的資料表。伺服器的目標主要是有效率的使用記憶體和提供分析資料量可用實體記憶體最佳的效能。為了符合目標,伺服器使用以檔案為基礎的記憶體對應,也就是 SASHDAT 檔案,此時 CAS 伺服器記憶體將會對應至已經存在於磁碟中適當的 SASHDAT 檔案,同時伺服務會透過「CAS_DISK_CACHE」環境變數指定儲存暫存檔案的目錄路徑。

接著當我們安裝完成 SAS Viya 之後嘗試下述程式碼,將會發生「Could not open file to flush memory contents」錯誤問題,又或者我們透過 SAS Environment Manager 載入 CASLIBS 函式庫中的任何資料表時也會發生「Could not open file to flush memory contents」錯誤問題,此時我們可能會透過 「http://localhost:8777」連接埠的 CAS 監控網站查看工作階段是否正確,但是會發現工作階段已經正常建立和記錄,所以問題不是工作階段建立不正確所導致 。

1
2
3
4
PROC CASUTIL;
LOAD DATA=sashelp.cars OUTCASLIB="CASUSER"
CASOUT="demoTable" PROMOTE;
RUN;

再來我們更進一步去思考為何是無法在記憶體中開啟檔案呢?此時若了解 CAS 基礎概念就會知道,載入記憶體的檔案會先寫入至「CAS_DISK_CACHE」環境變數指定儲存暫存檔案的目錄路徑中。所以我們就確認每台機器中所對應儲存暫存檔案的目錄路徑權限是否為所有人皆能夠存取,若不是則請透過下述指令設定該目錄為所有人皆能夠存取,即可解決「Could not open file to flush memory contents」錯誤問題。

1
$chmod -R 777 /sas/tmp

最後若是我們要修改「CAS_DISK_CACHE」環境變數指定儲存暫存檔案的目錄路徑,則可以透過下述指令進行設定,並且重新啟動 CAS 伺服器即可。請注意 SASHDAT 檔案若是來自於類型為 HDFS 的 CASLIBS 函式庫時則不會使用「CAS_DISK_CACHE」環境變數指定儲存暫存檔案的目錄路徑。

1
2
$ vi /opt/sas/viya/config/etc/cas/default/casconfig.lua
env.CAS_DISK_CACHE = '/sas/tmp'

總結我們可以透過設定的方式解決無法載入資料至 CASLIBS 的「Could not open file to flush memory contents」錯誤問題。

相關資源

⬅️ Go back