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控制臺。
- 在頂部菜單欄處,根據實際情況選擇地域和資源組。
- 單擊上方的集群管理頁簽。
- 在集群管理頁面,單擊相應集群所在行的詳情。
- 在左側導航欄,單擊集群服務 > SmartData。
- 單擊右上角的操作 > 停止 All Components。
- 根據使用需求,添加需要的namespace。
- 進入SmartData服務的namespace頁簽。
- 在左側導航欄,單擊集群服務 > SmartData。
- 單擊配置頁簽。
- 在服務配置區域,單擊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 - 保存配置。
- 單擊右上角的保存。
- 在確認修改對話框中,輸入執行原因,開啟自動更新配置。
- 單擊確定。
- 單擊右上角的操作 > 啟動All Components。
從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 - 保存配置。
- 單擊右上角的保存。
- 在確認修改對話框中,輸入執行原因,開啟自動更新配置。
- 單擊確定。
- 單擊右上角的操作 > 啟動All Components。
- 新集群的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 - 重啟集群。
- 單擊上方的集群管理頁簽。
- 在集群管理頁面,單擊相應集群所在行的更多 > 重啟。