Leo Yeh's Blog

SAS Viya (5)

教學目標

初步了解 SAS Viya 平台如何設定從 HDFS 中讀取 CSV 檔案。

重點概念

今天在架構師的耐心指導下,了解到文件手冊和系統設定一定要再三確認,不然當發生錯誤時,就會浪費很多時間除錯,此篇主要說明當安裝完 SAS Viya 面臨無法從 HDFS 中讀取 CSV 檔案的情況時,該如何解決,以下所有內容皆在「SAS Viya 3.2 部署手冊」 中詳細說明。

首先當我們嘗試透過 SAS Visual Analytics 讀取 HDFS 時發生「無法連線至 Hadoop 群集」,此問題主要是 Hadoop 設定還未完成,此時請參考「SAS Viya 3.2 部署手冊」中的附錄E 之「Configure the Existing Cloudera Hadoop Cluster to Interoperate with the CAS Server」內容,按照步驟進行,主要步驟有:

確認關鍵檔案

請先確認 /opt/sas/viya/home/SASFoundation/hdatplugins 資料夾中是否具備下述八個檔案:

  1. /opt/sas/viya/home/SASFoundation/hdatplugins/SAS_VERSION
  2. /opt/sas/viya/home/SASFoundation/hdatplugins/sas.cas.hadoop.jar
  3. /opt/sas/viya/home/SASFoundation/hdatplugins/sas.grid.provider.yarn.jar
  4. /opt/sas/viya/home/SASFoundation/hdatplugins/sas.lasr.hadoop.jar
  5. /opt/sas/viya/home/SASFoundation/hdatplugins/sascasfd
  6. /opt/sas/viya/home/SASFoundation/hdatplugins/sashdfsfd
  7. /opt/sas/viya/home/SASFoundation/hdatplugins/start-namenode-cas-hadoop.sh
  8. /opt/sas/viya/home/SASFoundation/hdatplugins/start-datanode-cas-hadoop.sh

若檔案不存在則請透過 sudo rpm -i /sas-hdatplugins-03.00.00-20160315.083831547133.x86_64.rpm 進行安裝。

確認 Hadoop Home 目錄

請確認 Hadoop Home 目錄是否為 /opt/cloudera/parcels/CDH-version/lib/hadoop ,此時可以查看 /opt/sas/viya/home/SASFoundation/cas.settings 中的設定是否正確。

放置 JAR 檔案至每台 Hadoop 機器

請將下述三個 Jar 檔案放置每台 Hadoop 機器上的 /opt/cloudera/parcels/CDH-version/lib/hadoop/lib 目錄中,請注意若沒有放置檔案,則會在 Cloudera Manager 管理網站重新啟動 HDFS 服務時會發生錯誤。

  1. sas.cas.hadoop.jar
  2. sas.lasr.hadoop.jar
  3. sas.grid.provider.yarn.jar

放置執行檔案至每台 Hadoop 機器

請將下述四個執行檔案放置每台 Hadoop 機器上的 /opt/cloudera/parcels/CDH-version/lib/hadoop/bin 目錄中,請注意若少了 sascasfd 檔案,則會發生「HDFS 檔案遺漏資料區塊」的錯誤。

  1. sashdfsfd
  2. sascasfd
  3. start-namenode-cas-hadoop.sh
  4. start-datanode-cas-hadoop.sh

放置 SAS_VERSION 檔案至每台 Hadoop 機器

請將 SAS_VERSION 檔案放置每台 Hadoop 機器上的 /opt/cloudera/parcels/CDH-version/lib/hadoop 目錄中。

設定 HDFS 參數

開啟 Cloudera Manager 管理網站登入 Administrator 管理者帳密設定 HDFS 的參數

參數名稱 屬性值
dfs.namenode.plugins com.sas.cas.hadoop.NameNodeService
dfs.datanode.plugins com.sas.cas.hadoop.DataNodeService

接著針對 Service-Wide Group 中 Advanced 下的 HDFS Service Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml 屬性設定 XML,可以點選 「View as XML」進行設定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<property>
<name>com.sas.cas.service.allow.put</name>
<value>true</value>
</property>
<property>
<name>com.sas.cas.hadoop.service.namenode.port</name>
<value>15452</value>
</property>
<property>
<name>com.sas.cas.hadoop.service.datanode.port</name>
<value>15453</value>
</property>
<property>
<name> dfs.namenode.fs-limits.min-block-size</name>
<value>0</value>
</property>

再來針對 Gateway Default Group 中 Advanced 下的 HDFS Client Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml 屬性設定 XML。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<property>
<name>com.sas.cas.service.allow.put</name>
<value>true</value>
</property>
<property>
<name>com.sas.cas.hadoop.service.namenode.port</name>
<value>15452</value>
</property>
<property>
<name>com.sas.cas.hadoop.service.datanode.port</name>
<value>15453</value>
</property>
<property>
<name> dfs.namenode.fs-limits.min-block-size</name>
<value>0</value>
</property>

最後針對 Gateway Default Group 中 Advanced 下的 HDFS Client Environment Advanced Configuration Snippet for hadoop-env.sh (Safety Valve) 屬性設定 JAVA_HOME 的變數,文件手冊中主要是寫 JAVA_HOME=/usr/lib/java/jdk1.7.0_07,但若為 JDK 8.0 ,則會是 JAVA_HOME=/usr/lib/java/jdk1.8.0,所以請特別注意 JAVA 路徑是否正確。當確認 HDFS 參數設定無誤,就能夠按下「Save」進行儲存。

重新啟動 HDFS 服務

開啟 Cloudera Manager 管理網站登入 Administrator 管理者帳密重新啟動 HFDS 服務

驗證 CAS SASHDAT 存取 HDFS

在 HDFS 中建立 test 目錄,設定權限為 777。

1
2
hadoop fs -mkdir /test
hadoop fs -chmod 777 /test

開啟 SAS Studio 網站執行下述程式驗證 CAS SASHDAT 是否能夠正常存取 HDFS。

1
2
3
4
5
6
cas mysession;
caslib testhdat datasource=(srctype="hdfs") path="/test";
proc casutil;
load data=sashelp.zipcode;
save casdata="zipcode" replace;
run;

若出現以下訊息就代表成功。

1
NOTE: Cloud Analytic Services saved the file zipcode.sashdat to HDFS in caslib
TESTHDAT.

驗證從 HDFS 中讀取 CSV 檔案

主要開啟 SAS Visual Analytics 網站,點選項目選單中「資料」,此時會頁面會轉至 SAS Environment Manager 網站中,此時我們就能夠從「資料館」中點選 HDFS 資料來源中的 CSV 檔案載入至記憶體中,請注意若載入過程中發生「HDFS 檔案遺漏資料區塊」的錯誤,那請確認是否缺少 sascasfd 檔案至 /opt/cloudera/parcels/CDH-version/lib/hadoop/bin 目錄中

此外本篇的應用情境在文件中也有提到,主要內容為 CAS SASHDAT 可以存取 HDFS , 其中 SASHDAT 檔案格式支援 SAS 格式,並且透過 CAS 最佳化記憶體處理,同時允許使用者儲存和讀取 HDFS 中的資料,請注意需要透過 SAS 針對 Hadoop 的外掛檔案在 Hadoop 節點機器上的設定才能夠完成此情境的需求,也就是本篇的重點

總結無論是「放置外掛檔案」或「HDFS 參數設定」總共九個步驟請一定要確認三次以上,因為我只確認一次沒看仔細文件手冊的關鍵內容,導致後續錯誤問題發生,浪費大家的時間,好在有架構師的耐心指導才能夠解決,真該好好反省,下次不能再犯同樣的錯誤了,若是我們設定無誤理應就能夠在 SAS Viya 中從 HDFS 中讀取 CSV 等不同格式的檔案資料,以利實踐大數據管理與進階分析的應用。

相關資源

⬅️ Go back