本文主要介紹JindoFS的配置使用方式,以及一些典型的應用情境。
概述
JindoFS是一種雲原生的檔案系統,結合OSS和本機存放區,成為E-MapReduce產品的新一代儲存系統,為上層計算提供了高效可靠的儲存。
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.20.0及以上版本至E-MapReduce-3.22.0(但不包括)版本的介紹;E-MapReduce-3.22.0 及以上版本的JindoFS 使用說明,請參見SmartData使用說明(EMR-3.22.0~3.25.1版本)。

應用情境
E-MapReduce目前提供了三種巨量資料儲存系統,E-MapReduce OssFileSystem、E-MapReduce HDFS和E-MapReduce JindoFS,其中OssFileSystem和JindoFS都是雲上儲存的解決方案,下表為這三種儲存系統和開源OSS各自的特點。
| 特點 | 開源OSS | E-MapReduce OssFileSystem | E-MapReduce HDFS | E-MapReduce JindoFS |
| 儲存空間 | 海量 | 海量 | 取決於叢集規模 | 海量 |
| 可靠性 | 高 | 高 | 高 | 高 |
| 吞吐率因素 | 服務端 | 叢集內磁碟緩衝 | 叢集內磁碟 | 叢集內磁碟 |
| 中繼資料效率 | 慢 | 中 | 快 | 快 |
| 擴容操作 | 容易 | 容易 | 容易 | 容易 |
| 縮容操作 | 容易 | 容易 | 需Decommission | 容易 |
| 資料本地化 | 無 | 弱 | 強 | 較強 |
JindoFSBlock Storage模式具有以下幾個特點:
- 海量彈性的儲存空間,基於OSS作為儲存後端,儲存不受限於本地叢集,而且本地叢集能夠自由Auto Scaling。
- 能夠利用本地叢集的儲存資源加速資料讀取,適合具有一定本機存放區能力的叢集,能夠利用有限的本機存放區提升吞吐率,特別對於一寫多讀的情境效果顯著。
- 中繼資料操作效率高,能夠與HDFS相當,能夠有效規避OSS檔案系統中繼資料操作耗時以及高頻訪問下可能引發不穩定的問題。
- 能夠最大限度保證執行作業時的資料本地化,減少網路傳輸的壓力,進一步提升讀取效能。
環境準備
- 建立叢集
選擇E-MapReduce-3.20.0及以上版本至E-MapReduce-3.22.0(但不包括)版本,勾選可選服務中的SmartData和Bigboot,建立叢集詳情請參見建立叢集。Bigboot 服務提供了E-MapReduce平台上的基礎的分散式資料管理互動服務以及一些組件管理監控和支援性服務,SmartData服務基於Bigboot之上對應用程式層提供了JindoFS檔案系統。

- 配置叢集
SmartData提供的JindoFS檔案系統使用OSS作為儲存後端,因此在使用JindoFS之前需配置一些OSS相關參數。下面提供兩種配置方式,第一種是先建立好叢集,修改Bigboot相關參數,需重啟SmartData服務生效;第二種是建立叢集過程中添加自訂配置,這樣叢集建立好後相關服務就能按照自訂參數啟動。
- 叢集建立好後參數初始化
oss.access.bucket為OSS bucket的名稱。oss.data-dir為JindoFS在OSS bucket中所使用的目錄(註:該目錄為 JindoFS後端儲存目錄,產生的資料不能人為破壞,並且保證該目錄僅用於JindoFS後端儲存,JindoFS在寫入資料時會自動建立使用者所配置的目錄,無需在OSS上事先建立)。oss.access.endpoint為bucket所在的地區。oss.access.key為儲存後端OSS的AccessKey ID。oss.access.secret為儲存後端OSS的AccessKey Secret。
考慮到效能和穩定性,推薦使用同region下的OSS bucket作為儲存後端,此時,E-MapReduce叢集能夠免密訪問OSS,無需配置AccessKey ID和AccessKey Secret。
所有JindoFS相關配置都在Bigboot組件中,配置如下圖所示,紅框中為必填的配置項。
說明 JindoFS支援多命名空間,本文命名空間以test為例。配置完成後儲存並部署,然後在SmartData服務中重啟所有組件,即開始使用JindoFS。

- 建立叢集時添加自訂配置
E-MapReduce叢集在建立叢集時支援添加自訂配置,以同region下免密訪問OSS為例,如下圖勾選軟體自訂配置,添加如下配置,配置
oss.data-dir和oss.access.bucket。[ { "ServiceName":"BIGBOOT", "FileName":"bigboot", "ConfigKey":"oss.data-dir", "ConfigValue":"jindoFS-1" }, { "ServiceName":"BIGBOOT", "FileName":"bigboot", "ConfigKey":"oss.access.bucket", "ConfigValue":"oss-bucket-name" } ]
- 叢集建立好後參數初始化
使用JindoFS
hadoop fs -ls jfs:/// hadoop fs -mkdir jfs:///test-dirhadoop fs -put test.log jfs:///test-dir/
目前,JindoFS能夠支援 E-MapReduce 叢集上的 Hadoop、Hive、Spark的作業進行訪問,其餘組件尚未完全支援。磁碟空間水位控制
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工具還提供archive命令,實現對冷資料的歸檔。
此命令提供了一種使用者顯式淘汰本機資料塊的方式。Hive分區表按天分區,假如業務上對一周前的分區資料認為不會再經常訪問,那麼就可以定期將一周前的分區目錄執行archive,淘汰本地備份,檔案備份將僅僅保留在後端OSS上。
Archive命令的使用方式如下:
jindo dfsadmin -archive [path]