JindoFS是一種雲原生的檔案系統,結合OSS和本機存放區,成為E-MapReduce產品的新一代儲存系統,為上層計算提供了高效可靠的儲存。本文主要說明JindoFS的配置使用方式,以及介紹一些典型的應用情境。
概述
JindoFS 提供了Block Storage模式(Block)和緩衝模式(Cache)的儲存模式。
JindoFS採用了本機存放區和OSS的異構多備份機制,Storage Service提供了資料存放區能力,首先使用OSS作為儲存後端,保證資料的高可靠性,同時利用本機存放區實現冗餘備份,利用本地的備份,可以加速資料讀取;另外,JindoFS 的中繼資料通過本地服務Namespace Service管理,從而保證了中繼資料操作的效能(和HDFS中繼資料操作效能相似)。
- E-MapReduce-3.20.0及以上版本支援Jindo FS,您可以在建立叢集時勾選相關服務來使用JindoFS。
- 本文主要是E-MapReduce-3.22.0 及以上版本的介紹;E-MapReduce-3.20.0及以上版本至E-MapReduce-3.22.0(但不包括)版本的JindoFS 使用說明,請參見SmartData使用說明(EMR-3.20.0~3.22.0版本)。

環境準備
- 建立叢集
選擇 E-MapReduce-3.22.0 及以上版本,勾選可選服務中的SmartData,具體操作步驟請參見建立叢集。

- 配置叢集
SmartData提供的JindoFS檔案系統使用OSS作為儲存後端,因此在使用JindoFS之前需配置一些OSS相關參數。下面提供兩種配置方式,第一種是先建立好叢集,修改Bigboot相關參數,需重啟SmartData服務生效;第二種是建立叢集過程中添加自訂配置,這樣叢集建立好後相關服務就能按照自訂參數啟動:
- 叢集建立好後初始化參數
所有JindoFS相關配置都在Bigboot組件中,配置如下圖所示:
-
在服務配置頁面,單擊bigboot頁簽。

- 單擊自訂配置。

說明- 紅框中為必填的配置項。
- JindoFS支援多命名空間,本文命名空間以test為例。
參數 參數說明 樣本 jfs.namespaces 表示當前JindoFS支援的命名空間,多個命名空間時以逗號隔開。 test jfs.namespaces.test.uri 表示test命名空間的後端儲存。 oss://oss-bucket/oss-dir 說明 該配置也可以配置到OSS bucket下的具體目錄,該命名空間即以該目錄作為根目錄來讀寫資料。jfs.namespaces.test.mode 表示test命名空間為Block Storage模式。 block 說明 JindoFS支援block和cache兩種儲存模式。jfs.namespaces.test.oss.access.key 表示儲存後端OSS的AK。 xxxx 說明 考慮到效能和穩定性,推薦使用同賬戶、同region下的OSS bucket作為儲存後端,此時,E-MapReduce叢集能夠免密訪問OSS,無需配置 AK和secret。jfs.namespaces.test.oss.access.secret 表示儲存後端OSS的secret。 配置完成後儲存並部署,然後在SmartData服務中重啟所有組件,即開始使用JindoFS。

-
- 建立叢集時添加自訂配置
E-MapReduce叢集在建立叢集時支援添加自訂配置,以同region下免密訪問OSS為例,如下圖勾選軟體自訂配置,配置命名空間test的相關配置,詳情如下:
[ { "ServiceName":"BIGBOOT", "FileName":"bigboot", "ConfigKey":"jfs.namespaces","ConfigValue":"test" },{ "ServiceName":"BIGBOOT", "FileName":"bigboot", "ConfigKey":"jfs.namespaces.test.uri", "ConfigValue":"oss://oss-bucket/oss-dir" },{ "ServiceName":"BIGBOOT", "FileName":"bigboot", "ConfigKey":"jfs.namespaces.test.mode", "ConfigValue":"block" } ]
- 叢集建立好後初始化參數
使用 JindoFS
JindoFS使用上與HDFS類似,提供jfs首碼,將jfs替代hdfs即可使用。
目前,JindoFS能夠支援 EMR 叢集上的大部分計算群組件,包括 Hadoop、Hive、Spark、Flink、Presto、Impala。
簡單樣本:
- Shell命令
hadoop fs -ls jfs://your-namespace/ hadoop fs -mkdir jfs://your-namespace/test-dir hadoop fs -put test.log jfs://your-namespace/test-dir/ hadoop fs -get jfs://your-namespace/test-dir/test.log ./ - MapReduce作業
hadoop jar /usr/lib/hadoop-current/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar teragen -Dmapred.map.tasks=1000 10737418240 jfs://your-namespace/terasort/input hadoop jar /usr/lib/hadoop-current/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar terasort -Dmapred.reduce.tasks=1000 jfs://your-namespace/terasort/input jfs://your-namespace/terasort/output - Spark-SQL
CREATE EXTERNAL TABLE IF NOT EXISTS src_jfs (key INT, value STRING) location 'jfs://your-namespace/Spark_sql_test/';
磁碟空間水位控制
JindoFS後端基於OSS,可以提供海量的儲存,但是本地碟的容量是有限的,因此JindoFS會自動淘汰本地較冷的資料備份。我們提供了node.data-dirs.watermark.high.ratio和node.data-dirs.watermark.low.ratio這兩個參數用來調節本機存放區的使用容量,值均為0~1的小數表示使用比例,JindoFS預設使用所有資料盤,每塊盤的使用容量預設即為資料盤大小。前者表示使用量上水位比例,每塊資料盤的JindoFS佔用的空間到達上水位即會開始清理淘汰;後者表示使用量下水位比例,觸發清理後會將JindoFS的佔用空間清理到下水位。使用者可以通過設定上水位比例調節期望分給JindoFS的磁碟空間,下水位必須小於上水位,設定合理的值即可。
儲存策略
JindoFS提供了Storage Policy功能,提供更加靈活的儲存策略適應不同的儲存需求,可以對目錄設定以下四種儲存策略:
| 策略 | 策略說明 |
| COLD | 表示資料僅在OSS上有一個備份,沒有本地備份,適用於冷資料存放區。 |
| WARM |
預設策略。 表示資料在OSS和本地分別有一個備份, 本地備份能夠有效提供後續的讀取加速。 |
| HOT | 表示資料在OSS 上有一個備份,本地有多個備份,針對一些最熱的資料提供更進一步的加速效果。 |
| TEMP | 表示資料僅有一個本地備份,針對一些臨時性資料,提供高效能的讀寫,但降低了資料的高可靠性,適用於一些臨時資料的存取。 |
JindoFS 提供了Admin工具設定目錄的Storage Policy(預設為 WARM),新增的檔案將會以父目錄所指定的 Storage Policy 進行儲存,使用方式如下:
jindo dfsadmin -R -setStoragePolicy [path] [policy]
通過以下命令,擷取某個目錄的儲存策略:
jindo dfsadmin -getStoragePolicy [path]
Admin 工具
-
Admin工具提供archive命令,實現對冷資料的歸檔。
此命令提供了一種使用者顯式淘汰本機資料塊的方式。Hive分區表按天分區,假如業務上對一周前的分區資料認為不會再經常訪問,那麼就可以定期將一周前的分區目錄執行archive,淘汰本地備份,檔案備份將僅僅保留在後端OSS 上。
Archive命令的使用方式如下:
jindo dfsadmin -archive [path]說明 [path]為需要歸檔檔案的所在目錄路徑。 -
Admin工具提供jindo命令,為Namespace Service提供了一些管理員功能命令。
jindo dfsadmin [-options]說明 可以通過jindo dfsadmin --help命令擷取協助資訊。
- diff命令主要用來顯示本機資料與後端儲存系統資料之間的差異。
jindo dfsadmin -R -diff [path]說明 預設情況下比較[path]目錄的子目錄中中繼資料之間的差異,-R選項表示遞迴比較[path]目錄下所有的路徑。 - sync命令用於同步本地與後端儲存之前的中繼資料。
jindo dfsadmin -R -sync [path]說明[path]表示需要同步中繼資料的路徑,預設只會同步[path]的下一級目錄,-R選項表示遞迴比較[path]目錄下所有的路徑。