全部產品
Search
文件中心

E-MapReduce:使用Raft-RocksDB-Tablestore作為儲存後端

更新時間:Mar 13, 2025

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 + RocksDB + Tablestore

配置本地raft後端

  1. 建立EMR叢集後,暫停SmartData所有服務。

    1. 登入阿里雲E-MapReduce控制台

    2. 在頂部功能表列處,根據實際情況選擇地區和資源群組

    3. 單擊上方的叢集管理頁簽。

    4. 叢集管理頁面,單擊相應叢集所在行的詳情

    5. 在左側導覽列,單擊叢集服務 > SmartData

    6. 單擊右上方的操作 > 停止 All Components

  2. 根據使用需求,添加需要的namespace。

  3. 進入SmartData服務的bigboot頁簽。

    1. 在左側導覽列單擊叢集服務 > SmartData

    2. 單擊配置頁簽。

    3. 服務配置地區,單擊bigboot頁簽。

  4. 在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遠端儲存,直接執行步驟6步驟7;如果需要使用OTS遠端儲存,請執行步驟5~步驟7

  5. 可選:配置遠端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

  6. 儲存配置。

    1. 單擊右上方的儲存

    2. 確認修改對話方塊中,輸入執行原因,開啟自動更新配置

    3. 單擊確定

  7. 單擊右上方的操作 > 啟動All Components

從Tablestore恢複中繼資料資訊

如果您在原創組群開啟了遠端Tablestore非同步儲存,則Tablestore上會有1份完整的JindoFS中繼資料的副本。您可以在停止或釋放原創組群後,在新建立的叢集上恢複原先的中繼資料,從而繼續訪問之前儲存的檔案。

  1. 可選:準備工作。

    1. 可選:統計原創組群的中繼資料資訊(檔案和檔案夾數量)。

      [hadoop@emr-header-1 ~]$ hadoop fs -count jfs://test/
              1596      1482809                 25 jfs://test/
          (檔案夾個數) (檔案個數)
    2. 停止原創組群的作業,等待30~120秒左右,等待原創組群的資料已經完全同步到Tablestore。執行以下命令查看狀態。如果LEADER節點顯示_synced=1,則表示Tablestore為最新資料,同步完成。

      jindo jfs -metaStatus -detail

      查看狀態

    3. 停止或釋放原創組群,確保沒有其它叢集正在訪問當前的Tablestore執行個體。

  2. 建立新叢集。

    建立與Tablestore執行個體相同Region的EMR叢集,暫停SmartData所有服務。詳情請參見配置本地raft後端中的步驟1

  3. 初始化配置。

    在SmartData服務的bigboot頁簽,設定以下參數。

    參數

    描述

    樣本

    namespace.backend.raft.async.ots.enabled

    是否開啟OTS非同步上傳,包括:

    • true

    • false

    false

    namespace.backend.raft.recovery.mode

    是否開啟從OTS恢複中繼資料,包括:

    • true

    • false

    true

  4. 儲存配置。

    1. 單擊右上方的儲存

    2. 確認修改對話方塊中,輸入執行原因,開啟自動更新配置

    3. 單擊確定

  5. 單擊右上方的操作 > 啟動 All Components

  6. 新叢集的SmartData服務啟動後,自動從OTS恢複中繼資料到本地Raft-RocksDB上,可以通過以下命令查看恢複進度。

    jindo jfs -metaStatus -detail

    如圖所示,LEADER節點的state為FINISH表示恢複完成。查看狀態

  7. 可選:執行以下操作,可以比較一下檔案數量與原創組群是否一致。

    此時的叢集為復原模式,也是唯讀模式。

    # 對比檔案數量一致
    [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.
  8. 修改配置,將叢集設定為正常模式,開啟OTS非同步上傳功能。

    在SmartData服務的bigboot頁簽,設定以下參數。

    參數

    描述

    樣本

    namespace.backend.raft.async.ots.enabled

    是否開啟OTS非同步上傳,包括:

    • true

    • false

    true

    namespace.backend.raft.recovery.mode

    是否開啟從OTS恢複中繼資料,包括:

    • true

    • false

    false

  9. 重啟叢集。

    1. 單擊上方的叢集管理頁簽。

    2. 叢集管理頁面,單擊相應叢集所在行的更多 > 重啟