All Products
Search
Document Center

Object Storage Service:Migrasikan tabel dan partisi Hive ke layanan OSS-HDFS

Last Updated:Mar 21, 2026

Gunakan perintah MoveTo dari JindoTable untuk memigrasikan tabel Apache Hive dan partisinya ke OSS-HDFS. Perintah ini menyalin data yang mendasarinya dan secara otomatis memperbarui Hive metastore sehingga kueri tetap berfungsi tanpa modifikasi setelah migrasi.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster E-MapReduce (EMR) yang menjalankan versi 3.36.0 atau lebih baru (tidak termasuk 3.39.x), atau versi 5.2.0 atau lebih baru (tidak termasuk 5.5.x)

  • Tabel Hive terpartisi dengan data yang telah ditulis. Contoh dalam topik ini menggunakan tabel bernama test_table dengan kunci partisi dt.

  • OSS-HDFS diaktifkan pada bucket Anda, dengan izin akses yang telah dikonfigurasi. Lihat Connect non-EMR clusters to OSS-HDFS.

Cara kerja

MoveTo melakukan migrasi tabel atau partisi Hive dalam dua langkah: menyalin data ke jalur tujuan, lalu memperbarui lokasi partisi di Hive metastore. Karena pembaruan metadata dilakukan secara otomatis, kueri downstream akan mengarah ke lokasi baru tanpa intervensi manual. JindoTable juga menyediakan langkah-langkah protektif untuk memastikan integritas data dan keamanan selama migrasi.

Untuk mempersempit cakupan migrasi, berikan kondisi filter bersama parameter -c. Misalnya, migrasikan hanya partisi yang nilai kuncinya melebihi ambang batas tertentu atau hanya partisi yang dibuat sebelum tanggal tertentu.

Penting

Hanya satu proses MoveTo yang dapat berjalan pada satu kluster dalam satu waktu. Jika Anda memulai proses kedua saat proses pertama sedang berjalan, permintaan tersebut akan ditolak karena kunci konfigurasi sedang digunakan. Tunggu hingga proses yang sedang berjalan selesai, atau hentikan proses tersebut dan mulai yang baru.

Sebelum menjalankan migrasi penuh, gunakan flag -e (explain) untuk melihat pratinjau partisi yang akan dipindahkan tanpa mentransfer data apa pun. Ini memastikan cakupan migrasi sebelum Anda menjalankannya.

Migrasikan partisi ke OSS-HDFS

  1. Login ke kluster EMR Anda melalui SSH. Lihat Log on to a cluster.

  2. Lihat pratinjau partisi yang akan dimigrasikan menggunakan mode explain. Ganti " dt > 'v' " dengan kondisi filter yang sesuai dengan partisi Anda.

       sudo jindotable -moveTo \
         -t tdb.test_table \
         -d oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/data/tdb.test_table \
         -c " dt > 'v' " \
         -e

    Output yang diharapkan:

       Found 1 partitions to move:
             dt=value-2
       MoveTo finished for table tdb.test_table to destination oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/data/tdb.test_table with condition " dt > 'v' " (explain only).
  3. Jalankan migrasi. Hapus flag -e untuk memindahkan data.

       sudo jindotable -moveTo \
         -t tdb.test_table \
         -d oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/data/tdb.test_table \
         -c " dt > 'v' "

    Output yang diharapkan:

       Found 1 partitions in total, and all are successfully moved.
       Successfully moved partitions:
           dt=value-2
       No failed partition.
       MoveTo finished for table tdb.test_table to destination oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/data/tdb.test_table with condition " dt > 'v' ".
  4. Verifikasi lokasi partisi.

       sudo hive> desc formatted test_table partition (dt='value-2');

    Dalam output, pastikan bahwa Location mengarah ke jalur OSS-HDFS:

       Location: oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/data/tdb.test_table/dt=value-2
  5. (Opsional) Migrasikan kembali partisi ke Hadoop Distributed File System (HDFS). Jika direktori tujuan di HDFS sudah berisi data, migrasi akan gagal dengan pesan error New location is not empty but -overWrite is not enabled. Tambahkan -o untuk menimpa data tersebut.

       sudo jindotable -moveTo \
         -t tdb.test_table \
         -d hdfs://<hdfs-path>/user/hive/warehouse/tdb.db/test_table \
         -c " dt > 'v' " \
         -o

    Output yang diharapkan:

       Found 1 partitions in total, and all are successfully moved.
       Successfully moved partitions:
           dt=value-2
       No failed partition.
       MoveTo finished for table tdb.test_table to destination hdfs:///user/hive/warehouse/tdb.db/test_table with condition " dt > 'v' ", overwriting new locations.

Parameter

Baik sudo jindo table -moveTo maupun sudo jindotable -moveTo menerima parameter yang sama.

sudo jindo table -moveTo \
  -t <dbName.tableName> \
  -d <destination path> \
  [-c "<condition>" | -fullTable] \
  [-b/-before <before days>] \
  [-p/-parallel <parallelism>] \
  [-s/-storagePolicy <OSS storage policy>] \
  [-o/-overWrite] \
  [-r/-removeSource] \
  [-skipTrash] \
  [-e/-explain] \
  [-l/-logDir <log directory>]
ParameterWajibDeskripsiCatatan
-t <dbName.tableName>YaTabel yang akan dimigrasikan, dalam format database.table. Contoh: tdb.test_tableMendukung tabel partisi maupun tabel non-partisi
-d <destination path>YaJalur tujuan tingkat tabel. Contoh: oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/data/tdb.test_tableUntuk tabel terpartisi, jalur lengkap partisi adalah <destination path>/<partition key>=<value>
-c "<condition>"Salah satu dari -c atau -fullTable wajib digunakanKondisi filter untuk memilih partisi. Contoh: -c " dt > 'v' "Mendukung operator umum seperti >. User-Defined Functions (UDFs) belum didukung. Tidak dapat digunakan bersamaan dengan -fullTable
-fullTableSalah satu dari -c atau -fullTable wajib digunakanMigrasikan seluruh tabel, termasuk semua partisinyaTidak dapat digunakan bersamaan dengan -c
-b/-before <before days>TidakMigrasikan hanya tabel atau partisi yang dibuat setidaknya N hari yang lalu. Contoh: -b 30Berdasarkan waktu pembuatan, bukan waktu modifikasi terakhir
-p/-parallel <parallelism>TidakJumlah maksimum migrasi partisi konkuren. Default: 1. Contoh: -p 4
-s/-storagePolicy <OSS storage policy>TidakKelas penyimpanan OSS untuk tujuan. Nilai yang valid: Standard (default), IA, Archive, ColdArchive. Contoh: -s IATidak berlaku untuk tujuan OSS-HDFS. Untuk menggunakan ColdArchive, aktifkan Cold Archive pada bucket terlebih dahulu
-o/-overWriteTidakMenimpa jalur tujuan jika sudah berisi dataUntuk tabel terpartisi, hanya jalur tujuan partisi yang dimigrasikan yang akan ditimpa
-r/-removeSourceTidakMenghapus jalur sumber setelah migrasi berhasilUntuk tabel terpartisi, hanya jalur sumber partisi yang dimigrasikan yang akan dihapus
-skipTrashTidakMelewati direktori Trash saat menghapus jalur sumber, sehingga data langsung dihapus dari sistem fileHarus digunakan bersamaan dengan -r/-removeSource
-e/-explainTidakMode explain: mencantumkan partisi yang akan dimigrasikan tanpa memindahkan data apa punGunakan ini untuk memverifikasi cakupan sebelum menjalankan migrasi penuh
-l/-logDir <log directory>TidakDirektori untuk file log. Default: /tmp/<current user>/. Contoh: -l /var/log/jindo

Untuk mendapatkan bantuan dari command line, jalankan:

sudo jindo table -help moveTo

Pemecahan Masalah

Conflicts found

Jika migrasi gagal dengan error Conflicts found:

  1. Pastikan tidak ada alat lain—seperti DistCp atau JindoDistCp—yang sedang menulis data ke jalur tujuan yang sama pada waktu yang bersamaan.

  2. Hapus direktori tujuan yang bertentangan:

    • Untuk tabel non-partisi: hapus direktori tingkat tabel.

    • Untuk tabel terpartisi: hapus direktori tingkat partisi yang bertentangan.

  3. Jangan menghapus direktori sumber.

Setelah konflik terselesaikan, jalankan kembali perintah MoveTo.

Destination directory not empty

Jika Anda melihat pesan New location is not empty but -overWrite is not enabled, artinya jalur tujuan sudah berisi data. Tambahkan -o ke perintah untuk menimpanya.