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-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服務的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
  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. 集群管理頁面,單擊相應集群所在行的更多 > 重啟