JindoFS在EMR-3.27.0及之後版本中支援使用Raft-RocksDB-OTS作為Jindo中繼資料服務(Namespace Service)的儲存。1個EMR JindoFS叢集建立3個Master節點群組成1個Raft執行個體,執行個體的每個Peer節點使用本地RocksDB儲存中繼資料資訊。
前提條件
建立Tablestore執行個體,推薦使用高效能執行個體,詳情請參見開通服務並建立執行個體。
說明需要開啟事務功能。
建立3 Master的EMR叢集,詳情請參見建立叢集。

背景資訊
RocksDB通過Raft協議實現3個節點之間的複製。叢集可以綁定1個Tablestore(OTS)執行個體,作為Jindo的中繼資料服務的額外儲存介質,本地的中繼資料資訊會即時非同步地同步到使用者的Tablestore執行個體上。
中繼資料服務-多機Raft-RocksDB-Tablestore+HA如下圖所示。
配置本地raft後端
建立EMR叢集後,暫停SmartData所有服務。
在頂部功能表列處,根據實際情況選擇地區和資源群組。
單擊上方的叢集管理頁簽。
在叢集管理頁面,單擊相應叢集所在行的詳情。
在左側導覽列,單擊。
單擊右上方的。
根據使用需求,添加需要的namespace。
進入SmartData服務的bigboot頁簽。
在左側導覽列單擊。
單擊配置頁簽。
在服務配置地區,單擊bigboot頁簽。
在SmartData服務的bigboot頁簽,設定以下參數。
參數
描述
樣本
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服務的bigboot頁簽,設定以下參數。
參數
參數說明
樣本
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後端中的步驟1。
初始化配置。
在SmartData服務的bigboot頁簽,設定以下參數。
參數
描述
樣本
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服務的bigboot頁簽,設定以下參數。
參數
描述
樣本
namespace.backend.raft.async.ots.enabled
是否開啟OTS非同步上傳,包括:
true
false
true
namespace.backend.raft.recovery.mode
是否開啟從OTS恢複中繼資料,包括:
true
false
false
重啟叢集。
單擊上方的叢集管理頁簽。
在叢集管理頁面,單擊相應叢集所在行的。