全部產品
Search
文件中心

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

更新時間:Jul 01, 2024

JindoFS在EMR-3.27.0及之後版本中支援使用Raft-RocksDB-OTS作為Jindo中繼資料服務(Namespace Service)的儲存。1個EMR JindoFS叢集建立3個Master節點群組成1個Raft執行個體,執行個體的每個Peer節點使用本地RocksDB儲存中繼資料資訊。

前提條件

  • 建立Tablestore執行個體,推薦使用高效能執行個體,詳情請參見建立執行個體
    說明 需要開啟事務功能。
  • 建立3 Master的EMR叢集,詳情請參見建立叢集3 Master

背景資訊

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服務的namespace頁簽。
    1. 在左側導覽列,單擊叢集服務 > SmartData
    2. 單擊配置頁簽。
    3. 服務配置地區,單擊namespace頁簽。
  4. 在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-addressClient端訪問raft執行個體的3個Master地址(固定值)emr-header-1:8101,emr-header-2:8101,emr-header-3:8101
    說明 如果不需要使用OTS遠端儲存,直接執行步驟6步驟7;如果需要使用OTS遠端儲存,請執行步驟5~步驟7
  5. 可選:配置遠端OTS非同步儲存。
    在SmartData服務的namespace頁簽,設定如下參數。
    參數參數說明樣本
    namespace.ots.instanceTablestore執行個體名稱。emr-jfs
    namespace.ots.accessKeyTablestore執行個體的AccessKey ID。kkkkkk
    namespace.ots.accessSecretTablestore執行個體的AccessKey Secret。XXXXXX
    namespace.ots.endpointTablestore執行個體的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後端
  3. 初始化配置。
    在SmartData服務的namespace頁簽,設定以下參數。
    參數描述樣本
    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服務的namespace頁簽,設定以下參數。
    參數描述樣本
    namespace.backend.raft.async.ots.enabled是否開啟OTS非同步上傳,包括:
    • true
    • false
    true
    namespace.backend.raft.recovery.mode是否開啟從OTS恢複中繼資料,包括:
    • true
    • false
    false
  9. 重啟叢集。
    1. 單擊上方的叢集管理頁簽。
    2. 叢集管理頁面,單擊相應叢集所在行的更多 > 重啟