JindoFS在EMR-3.27.0及之後版本中支援使用Raft-RocksDB-OTS作為Jindo中繼資料服務(Namespace Service)的儲存。1個EMR JindoFS叢集建立3個Master節點群組成1個Raft執行個體,執行個體的每個Peer節點使用本地RocksDB儲存中繼資料資訊。
前提條件
背景資訊
RocksDB通過Raft協議實現3個節點之間的複製。叢集可以綁定1個Tablestore(OTS)執行個體,作為Jindo的中繼資料服務的額外儲存介質,本地的中繼資料資訊會即時非同步地同步到使用者的Tablestore執行個體上。
中繼資料服務-多機Raft-RocksDB-Tablestore+HA如下圖所示。

配置本地raft後端
- 建立EMR叢集後,暫停SmartData所有服務。
- 登入阿里雲E-MapReduce控制台。
- 在頂部功能表列處,根據實際情況選擇地區和資源群組。
- 單擊上方的叢集管理頁簽。
- 在叢集管理頁面,單擊相應叢集所在行的詳情。
- 在左側導覽列,單擊。
- 單擊右上方的。
- 登入阿里雲E-MapReduce控制台。
- 根據使用需求,添加需要的namespace。
- 進入SmartData服務的namespace頁簽。
- 在左側導覽列,單擊。
- 單擊配置頁簽。
- 在服務配置地區,單擊namespace頁簽。
- 在SmartData服務的namespace頁簽,設定如下參數。
參數 描述 樣本 namespace.backend.type 設定namespace後端儲存類型,支援: - rocksdb
- ots
- raft
預設為rocksdb。
raft namespace.backend.raft.initial-conf 部署raft執行個體的3個Master地址(固定值)。 emr-header-1:8103:0,emr-header-2:8103:0,emr-header-3:8103:0 jfs.namespace.server.rpc-address Client端訪問raft執行個體的3個Master地址(固定值) emr-header-1:8101,emr-header-2:8101,emr-header-3:8101 - 可選:配置遠端OTS非同步儲存。在SmartData服務的namespace頁簽,設定如下參數。
參數 參數說明 樣本 namespace.ots.instance Tablestore執行個體名稱。 emr-jfs namespace.ots.accessKey Tablestore執行個體的AccessKey ID。 kkkkkk namespace.ots.accessSecret Tablestore執行個體的AccessKey Secret。 XXXXXX namespace.ots.endpoint Tablestore執行個體的Endpoint地址,通常EMR叢集,推薦使用VPC地址。 http://emr-jfs.cn-hangzhou.vpc.tablestore.aliyuncs.com namespace.backend.raft.async.ots.enabled 是否開啟OTS非同步上傳,包括: - true
- false
當設定為true時,需要在SmartData服務完成初始化前,開啟OTS非同步上傳功能。說明 如果SmartData服務已完成初始化,則不能再開啟該功能。因為OTS的資料已經落後於本地RocksDB的資料。true - 儲存配置。
- 單擊右上方的儲存。
- 在確認修改對話方塊中,輸入執行原因,開啟自動更新配置。
- 單擊確定。
- 單擊右上方的。
從Tablestore恢複中繼資料資訊
如果您在原創組群開啟了遠端Tablestore非同步儲存,則Tablestore上會有1份完整的JindoFS中繼資料的副本。您可以在停止或釋放原創組群後,在新建立的叢集上恢複原先的中繼資料,從而繼續訪問之前儲存的檔案。
- 可選:準備工作。
- 可選:統計原創組群的中繼資料資訊(檔案和檔案夾數量)。
[hadoop@emr-header-1 ~]$ hadoop fs -count jfs://test/ 1596 1482809 25 jfs://test/ (檔案夾個數) (檔案個數) - 停止原創組群的作業,等待30~120秒左右,等待原創組群的資料已經完全同步到Tablestore。執行以下命令查看狀態。如果LEADER節點顯示
_synced=1,則表示Tablestore為最新資料,同步完成。jindo jfs -metaStatus -detail
- 停止或釋放原創組群,確保沒有其它叢集正在訪問當前的Tablestore執行個體。
- 可選:統計原創組群的中繼資料資訊(檔案和檔案夾數量)。
- 建立新叢集。建立與Tablestore執行個體相同Region的EMR叢集,暫停SmartData所有服務。詳情請參見配置本地raft後端。
- 初始化配置。在SmartData服務的namespace頁簽,設定以下參數。
參數 描述 樣本 namespace.backend.raft.async.ots.enabled 是否開啟OTS非同步上傳,包括: - true
- false
false namespace.backend.raft.recovery.mode 是否開啟從OTS恢複中繼資料,包括: - true
- false
true - 儲存配置。
- 單擊右上方的儲存。
- 在確認修改對話方塊中,輸入執行原因,開啟自動更新配置。
- 單擊確定。
- 單擊右上方的。
- 新叢集的SmartData服務啟動後,自動從OTS恢複中繼資料到本地Raft-RocksDB上,可以通過以下命令查看恢複進度。
jindo jfs -metaStatus -detail如圖所示,LEADER節點的state為FINISH表示恢複完成。
- 可選:執行以下操作,可以比較一下檔案數量與原創組群是否一致。此時的叢集為復原模式,也是唯讀模式。
# 對比檔案數量一致 [hadoop@emr-header-1 ~]$ hadoop fs -count jfs://test/ 1596 1482809 25 jfs://test/ # 檔案可正常讀取(cat、get命令) [hadoop@emr-header-1 ~]$ hadoop fs -cat jfs://test/testfile this is a test file # 查看目錄 [hadoop@emr-header-1 ~]$ hadoop fs -ls jfs://test/ Found 3 items drwxrwxr-x - root root 0 2020-03-25 14:54 jfs://test/emr-header-1.cluster-50087 -rw-r----- 1 hadoop hadoop 5 2020-03-25 14:50 jfs://test/haha-12096RANDOM.txt -rw-r----- 1 hadoop hadoop 20 2020-03-25 15:07 jfs://test/testfile # 唯讀狀態,不可修改檔案 [hadoop@emr-header-1 ~]$ hadoop fs -rm jfs://test/testfile java.io.IOException: ErrorCode : 25021 , ErrorMsg: Namespace is under recovery mode, and is read-only. - 修改配置,將叢集設定為正常模式,開啟OTS非同步上傳功能。在SmartData服務的namespace頁簽,設定以下參數。
參數 描述 樣本 namespace.backend.raft.async.ots.enabled 是否開啟OTS非同步上傳,包括: - true
- false
true namespace.backend.raft.recovery.mode 是否開啟從OTS恢複中繼資料,包括: - true
- false
false - 重啟叢集。
- 單擊上方的叢集管理頁簽。
- 在叢集管理頁面,單擊相應叢集所在行的。
- 單擊上方的叢集管理頁簽。
