All Products
Search
Document Center

E-MapReduce:Gunakan Raft-RocksDB-Tablestore sebagai backend penyimpanan

Last Updated:Jun 21, 2026

JindoFS dalam E-MapReduce (EMR) 3.27.0 dan versi yang lebih baru mendukung Raft-RocksDB-Tablestore sebagai backend penyimpanan untuk Namespace Service-nya. Dalam kluster EMR JindoFS, tiga node master membentuk instans Raft, dan setiap peer node menggunakan RocksDB lokal untuk menyimpan metadata.

Prasyarat

  • Buat instans Tablestore. Disarankan menggunakan instans kinerja tinggi. Untuk informasi selengkapnya, lihat Aktifkan Tablestore dan buat instans.

    Catatan

    Anda harus mengaktifkan fitur transaksi.

  • Buat kluster E-MapReduce dengan tiga node master. Untuk informasi selengkapnya, lihat Buat kluster. Saat membuat kluster, aktifkan High Availability dan pilih 3 Master untuk Deployment Mode.

Informasi latar belakang

RocksDB menggunakan protokol Raft untuk mereplikasi data di ketiga node master. Anda dapat mengikat kluster ke instans Tablestore, yang berfungsi sebagai backend penyimpanan tambahan untuk JindoFS Namespace Service. Metadata lokal disinkronkan secara asinkron ke instans Tablestore Anda.

Gambar berikut menunjukkan arsitektur ketersediaan tinggi yang menggunakan Raft, RocksDB, dan Tablestore untuk Namespace Service.Raft + RocksDB + Tablestore

Konfigurasikan backend Raft lokal

  1. Setelah membuat kluster EMR, hentikan semua layanan SmartData.

    1. Masuk ke Alibaba Cloud EMR console.

    2. Di bilah navigasi atas, pilih wilayah dan kelompok sumber daya sesuai kebutuhan.

    3. Klik tab Clusters.

    4. Di halaman Clusters, temukan kluster target dan klik Details di kolom Actions.

    5. Di panel navigasi kiri, pilih Services > SmartData.

    6. Di pojok kanan atas, pilih Actions > > Stop All Components.

  2. Tambahkan namespace sesuai kebutuhan.

  3. Buka tab bigboot layanan SmartData.

    1. Di panel navigasi kiri, pilih Services > SmartData.

    2. Klik tab Configure.

    3. Di bagian Service Configuration, klik tab bigboot.

  4. Di tab bigboot layanan SmartData, atur parameter berikut.

    Parameter

    Deskripsi

    Contoh

    namespace.backend.type

    Backend penyimpanan untuk Namespace Service. Nilai yang valid:

    • rocksdb

    • ots

    • raft

    Nilai default adalah rocksdb.

    raft

    namespace.backend.raft.initial-conf

    Alamat tiga node master yang menjalankan instans Raft. Nilai ini bersifat tetap.

    emr-header-1:8103:0,emr-header-2:8103:0,emr-header-3:8103:0

    jfs.namespace.server.rpc-address

    Alamat akses klien untuk tiga node master dari instans Raft. Nilai ini bersifat tetap.

    emr-header-1:8101,emr-header-2:8101,emr-header-3:8101

    Catatan

    Untuk menggunakan Tablestore sebagai backend penyimpanan remote, lakukan langkah 5 hingga langkah 7. Jika tidak, lewati ke langkah 6 dan langkah 7.

  5. Opsional: Konfigurasikan Tablestore untuk penyimpanan asinkron remote.

    Di tab bigboot layanan SmartData, atur parameter berikut.

    Parameter

    Deskripsi

    Contoh

    namespace.ots.instance

    Nama instans Tablestore.

    emr-jfs

    namespace.ots.accessKey

    ID AccessKey untuk instans Tablestore.

    YourAccessKeyID

    namespace.ots.accessSecret

    Rahasia AccessKey untuk instans Tablestore.

    YourAccessKeySecret

    namespace.ots.endpoint

    Titik akhir instans Tablestore. Untuk kluster EMR, disarankan menggunakan endpoint VPC.

    http://emr-jfs.cn-hangzhou.vpc.tablestore.aliyuncs.com

    namespace.backend.raft.async.ots.enabled

    Menentukan apakah akan mengaktifkan unggah data asinkron ke Tablestore. Nilai yang valid:

    • true

    • false

    Jika Anda mengatur parameter ini ke true, Anda harus mengaktifkan fitur ini sebelum layanan SmartData diinisialisasi.

    Catatan

    Anda tidak dapat mengaktifkan fitur ini setelah layanan diinisialisasi karena data di Tablestore akan lebih lama daripada data di RocksDB lokal.

    true

  6. Simpan konfigurasi.

    1. Di pojok kanan atas, klik Save.

    2. Di kotak dialog Confirm, masukkan alasan perubahan dan aktifkan Auto-update Configuration.

    3. Klik OK.

  7. Di pojok kanan atas, pilih Actions > > Start All Components.

Pulihkan metadata dari Tablestore

Jika Anda mengaktifkan penyimpanan asinkron remote menggunakan Tablestore pada kluster asli, instans Tablestore berisi salinan lengkap metadata JindoFS. Setelah Anda menghentikan atau melepas kluster asli, Anda dapat memulihkan metadata tersebut ke kluster baru untuk melanjutkan akses ke file Anda.

  1. Opsional: Lakukan pekerjaan persiapan.

    1. Opsional: Kumpulkan statistik metadata (jumlah file dan folder) dari kluster asli.

      [hadoop@emr-header-1 ~]$ hadoop fs -count jfs://test/
              1596      1482809                 25 jfs://test/
          (Jumlah folder) (Jumlah file)
    2. Hentikan semua pekerjaan di kluster asli dan tunggu 30 hingga 120 detik agar metadata tersinkronisasi sepenuhnya ke Tablestore. Jalankan perintah berikut untuk memeriksa status. Jika node LEADER menampilkan _synced=1, data di Tablestore telah tersinkronisasi sepenuhnya.

      jindo jfs -metaStatus -detail

      Berikut adalah contoh output perintah. state: LEADER menunjukkan bahwa node Raft saat ini adalah node LEADER. Indeks log telah diperbarui ke 624625, dan semua replika telah tersinkronisasi.

      [RaftPeerImpl]
      peer_id: xxx
      state: LEADER
      readonly: 0
      term: 2
      conf_index: 1
      peers: xxx
      changing_conf: NO    stage: STAGE_NONE
      election_timer: timeout(5000ms) STOPPED
      vote_timer: timeout(5000ms) STOPPED
      stepdown_timer: timeout(5000ms) SCHEDULING(in 2335ms)
      snapshot_timer: timeout(3600000ms) SCHEDULING(in 150305ms)
      storage: [1, 624625]
      disk_index: 624625
      known_applied_index: 624625
      last_log_id: (index=624625,term=2)
      first_index_pinned: 624625
      state_machine: Idle
      last_committed_index: 624625
      last_snapshot_index: 0
      last_snapshot_term: 0
      snapshot_status: IDLE
      replicator_25769803789@xxx  next_index=624626   flying_append_entries_size=0 idle hc=2301 ac=624261 ic=0
      replicator_32985348833259@xxx    next_index=624626   flying_append_entries_size=0 idle hc=2301 ac=623564 ic=0
      OtsUploader: _lastStopIndex=624624, _synced=1
    3. Hentikan atau lepaskan kluster asli untuk memastikan tidak ada kluster lain yang mengakses instans Tablestore.

  2. Buat kluster baru.

    Buat kluster EMR baru di wilayah yang sama dengan instans Tablestore, lalu hentikan semua layanan SmartData. Untuk informasi selengkapnya, lihat Langkah 1 dalam Konfigurasikan backend Raft lokal.

  3. Inisialisasi konfigurasi.

    Di tab bigboot layanan SmartData, atur parameter berikut.

    Parameter

    Deskripsi

    Contoh

    namespace.backend.raft.async.ots.enabled

    Menentukan apakah akan mengaktifkan unggah data asinkron ke Tablestore. Nilai yang valid:

    • true

    • false

    false

    namespace.backend.raft.recovery.mode

    Menentukan apakah akan mengaktifkan pemulihan metadata dari Tablestore. Nilai yang valid:

    • true

    • false

    true

  4. Simpan konfigurasi.

    1. Di pojok kanan atas, klik Save.

    2. Di kotak dialog Confirm, masukkan alasan perubahan dan aktifkan Auto-update Configuration.

    3. Klik OK.

  5. Di pojok kanan atas, pilih Actions > > Start All Components.

  6. Setelah layanan SmartData di kluster baru dimulai, metadata secara otomatis dipulihkan dari Tablestore ke Raft-RocksDB lokal. Anda dapat menjalankan perintah berikut untuk memantau progres pemulihan.

    jindo jfs -metaStatus -detail

    Setelah menjalankan perintah, pastikan bahwa state dalam output adalah LEADER dan bahwa state dalam bagian [Recovery From OTS Status] adalah FINISH. Hal ini menunjukkan bahwa pemulihan telah selesai. Berikut adalah contoh output:

    [RaftPeerImpl]
    peer_id: xxx:8103:0
    state: LEADER
    readonly: 0
    term: 2
    conf_index: 1
    peers: xxx
    changing_conf: NO    stage: STAGE_NONE
    election_timer: timeout(5000ms) STOPPED
    vote_timer: timeout(5000ms) STOPPED
    stepdown_timer: timeout(5000ms) SCHEDULING(in 3382ms)
    snapshot_timer: timeout(600000ms) SCHEDULING(in 474855ms)
    storage: [1, 153]
    disk_index: 153
    known_applied_index: 153
    last_log_id: (index=153,term=2)
    first_index_pinned: 1
    state_machine: Idle
    last_committed_index: 153
    last_snapshot_index: 1
    last_snapshot_term: 2
    snapshot_status: IDLE
    replicator_1116691496965@xxx: next_index=154   flying_append_entries_size=0 idle hc=262 ac=154 ic=0
    replicator_3311419785217@xxx: next_index=154   flying_append_entries_size=0 idle hc=262 ac=154 ic=0
    
    [Recovery From OTS Status]
    state: FINISH
    [Recovery From OTS Status]
    state: FINISH
    total rows: 1484409
    table `jfs_block_test` 2 rows.
    table `jfs_namespace_cache_ns` 1 rows.
    table `jfs_namespace_test` 1484406 rows.
  7. Opsional: Verifikasi bahwa jumlah file di kluster baru konsisten dengan jumlah file di kluster asli.

    Kluster saat ini berada dalam mode pemulihan read-only.

    # Bandingkan jumlah file untuk memverifikasi konsistensinya dengan kluster asli.
    [hadoop@emr-header-1 ~]$ hadoop fs -count jfs://test/
            1596      1482809                 25 jfs://test/
    # File dapat dibaca secara normal menggunakan perintah cat atau get.
    [hadoop@emr-header-1 ~]$ hadoop fs -cat jfs://test/testfile
    this is a test file
    # Lihat isi direktori.
    [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
    # File tidak dapat dimodifikasi karena kluster berada dalam mode read-only.
    [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. Perbarui konfigurasi untuk mengalihkan kluster ke mode normal dan mengaktifkan unggah data asinkron ke Tablestore.

    Di tab bigboot layanan SmartData, atur parameter berikut.

    Parameter

    Deskripsi

    Contoh

    namespace.backend.raft.async.ots.enabled

    Menentukan apakah akan mengaktifkan unggah data asinkron ke Tablestore. Nilai yang valid:

    • true

    • false

    true

    namespace.backend.raft.recovery.mode

    Menentukan apakah akan mengaktifkan pemulihan metadata dari Tablestore. Nilai yang valid:

    • true

    • false

    false

  9. Mulai ulang kluster.

    1. Klik tab Clusters.

    2. Di halaman Clusters, temukan kluster target dan pilih More > Restart di kolom Actions.