All Products
Search
Document Center

ApsaraDB for HBase:Gunakan API Java ApsaraDB for HBase untuk mengakses instans ApsaraDB for HBase Performance-enhanced Edition

Last Updated:Mar 29, 2026

Gunakan API Java HBase untuk terhubung ke instans ApsaraDB for HBase Performance-enhanced Edition dan menjalankan operasi DDL serta DML terhadapnya.

Cara kerja

Klien Java HBase menggunakan tiga objek inti. Memahami peran dan perilaku threading-nya membantu mencegah kesalahan koneksi yang paling umum:

ObjectWeightThread-safeResponsibility
ConnectionHeavyweightYa — bagikan di semua threadMengelola koneksi ke kluster. Buat satu kali per aplikasi; tutup saat shutdown.
AdminLightweightOperasi DDL: membuat, menonaktifkan, memotong (truncate), dan menghapus tabel. Buat sesuai kebutuhan dan tutup setelah selesai.
TableLightweightTidak — setiap thread memerlukan instansnya sendiriOperasi DML: put, get, delete, dan scan. Buat per thread dan tutup setelah selesai.

Karena pembuatan objek Connection memerlukan sumber daya tinggi, cukup gunakan satu instans yang dibagikan. Sebaliknya, karena objek Table tidak thread-safe, jangan membagikan instans tersebut antar thread—ambil instans baru dari koneksi untuk setiap thread.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Menginstal SDK ApsaraDB for HBase untuk Java. Untuk informasi selengkapnya, lihat Unduh SDK ApsaraDB for HBase untuk Java.

  • Untuk koneksi jaringan internal: memiliki instance Elastic Compute Service (ECS) yang ditempatkan di virtual private cloud (VPC) yang sama dengan instans HBase, dengan alamat IP instance ECS ditambahkan ke daftar putih instans HBase. Lihat Buat instance ECS dan Konfigurasi daftar putih.

  • Untuk koneksi Internet: daftar putih alamat IP telah dikonfigurasi untuk instans tersebut. Lihat Konfigurasi daftar putih.

Terhubung ke instans Anda

Langkah 1: Dapatkan konfigurasi koneksi klien

  1. Masuk ke Konsol ApsaraDB for HBase.

  2. Pada halaman Clusters, temukan instans tersebut dan klik ID-nya.

    Instances

  3. Di panel navigasi sebelah kiri pada halaman detail instans, klik Database Connection.

  4. Klik Generate Configuration Items. Pada kotak dialog Client Connection Configuration, klik tab Java Configuration lalu salin kode Java-nya.

    Java Configuration

Langkah 2: Inisialisasi klien

Tempel kode konfigurasi Java yang telah disalin ke dalam proyek Anda untuk membuat objek Configuration:

// Buat objek Configuration.
Configuration conf = HBaseConfiguration.create();

// Setel titik akhir. Gunakan titik akhir publik untuk koneksi Internet,
// atau titik akhir yang menghadap VPC untuk koneksi jaringan internal.
// Temukan kedua titik akhir tersebut di halaman Database Connection di konsol.
conf.set("hbase.zookeeper.quorum", "ld-xxxx-proxy-hbaseue.hbaseue.xxx.rds.aliyuncs.com:30020");

// Setel username dan password. Nilai default keduanya adalah "root".
conf.set("hbase.client.username", "root");
conf.set("hbase.client.password", "root");

// Diperlukan hanya jika Anda menggunakan dependensi alihbase-connector.
// Tidak diperlukan jika Anda menggunakan dependensi alihbase-client.
//conf.set("hbase.client.connection.impl", AliHBaseUEClusterConnection.class.getName());

Langkah 3: Buat koneksi

Buat satu objek Connection untuk seluruh siklus hidup aplikasi Anda. Objek ini thread-safe dan dapat digunakan bersama oleh semua thread.

// Connection adalah objek heavyweight — buat sekali dan gunakan ulang.
// Tutup setelah semua operasi selesai untuk mencegah kebocoran koneksi.
Connection connection = ConnectionFactory.createConnection(conf);
Tip: Bungkus koneksi dalam blok try-finally untuk memastikan koneksi selalu ditutup, bahkan jika terjadi exception.

Jalankan operasi DDL dan DML

Operasi DDL

Gunakan objek Admin untuk manajemen tabel. Objek Admin bersifat ringan—buat sesuai kebutuhan dan tutup setelah selesai.

try (Admin admin = connection.getAdmin()) {
    // Buat tabel dengan satu keluarga kolom.
    // Di lingkungan produksi, pre-split tabel berdasarkan distribusi data Anda.
    HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("tablename"));
    htd.addFamily(new HColumnDescriptor(Bytes.toBytes("family")));
    admin.createTable(htd);

    // Nonaktifkan tabel.
    admin.disableTable(TableName.valueOf("tablename"));

    // Potong (truncate) tabel (mempertahankan struktur tabel).
    admin.truncateTable(TableName.valueOf("tablename"), true);

    // Hapus tabel.
    admin.deleteTable(TableName.valueOf("tablename"));
}

Operasi DML

Gunakan objek Table untuk operasi data. Karena objek Table tidak thread-safe, setiap thread harus mendapatkan instansnya sendiri dari koneksi.

// Table bersifat lightweight dan tidak thread-safe. Ambil instans baru per thread;
// jangan pernah berbagi instans Table antar thread.
try (Table table = connection.getTable(TableName.valueOf("tablename"))) {
    // Masukkan baris.
    Put put = new Put(Bytes.toBytes("row"));
    put.addColumn(Bytes.toBytes("family"), Bytes.toBytes("qualifier"), Bytes.toBytes("value"));
    table.put(put);

    // Baca satu baris.
    Get get = new Get(Bytes.toBytes("row"));
    Result res = table.get(get);

    // Hapus baris.
    Delete delete = new Delete(Bytes.toBytes("row"));
    table.delete(delete);

    // Pindai rentang baris — akses bergaya kursor pada rentang kunci.
    Scan scan = new Scan(Bytes.toBytes("startRow"), Bytes.toBytes("endRow"));
    ResultScanner scanner = table.getScanner(scan);
    for (Result result : scanner) {
        // Proses setiap hasil.
    }
    scanner.close();
}

Contoh lengkap

Kelas mandiri berikut menggabungkan semua langkah di atas. Salin ke dalam proyek Anda, ganti titik akhir dengan nilai aktual Anda, lalu jalankan untuk memverifikasi konektivitas.

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

public class HBaseQuickStart {
    public static void main(String[] args) throws IOException {
        // --- Konfigurasi ---
        Configuration conf = HBaseConfiguration.create();
        // Ganti dengan titik akhir aktual Anda dari halaman Database Connection.
        conf.set("hbase.zookeeper.quorum", "ld-xxxx-proxy-hbaseue.hbaseue.xxx.rds.aliyuncs.com:30020");
        conf.set("hbase.client.username", "root");
        conf.set("hbase.client.password", "root");
        // Hapus komentar jika menggunakan dependensi alihbase-connector:
        //conf.set("hbase.client.connection.impl", AliHBaseUEClusterConnection.class.getName());

        // --- Koneksi ---
        // Connection bersifat heavyweight — buat sekali dan bagikan di semua thread.
        // Tutup dalam finally untuk mencegah kebocoran koneksi.
        Connection connection = ConnectionFactory.createConnection(conf);
        try {
            // --- DDL: buat tabel ---
            // Admin bersifat lightweight; buat sesuai kebutuhan dan tutup setelah selesai.
            try (Admin admin = connection.getAdmin()) {
                HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("tablename"));
                htd.addFamily(new HColumnDescriptor(Bytes.toBytes("family")));
                // Di lingkungan produksi, pre-split tabel berdasarkan distribusi data Anda.
                admin.createTable(htd);
            }

            // --- DML: tulis dan baca data ---
            // Table bersifat lightweight dan tidak thread-safe.
            // Setiap thread harus mendapatkan instans Table-nya sendiri dari koneksi.
            try (Table table = connection.getTable(TableName.valueOf("tablename"))) {
                // Masukkan baris.
                Put put = new Put(Bytes.toBytes("row"));
                put.addColumn(Bytes.toBytes("family"), Bytes.toBytes("qualifier"), Bytes.toBytes("value"));
                table.put(put);

                // Baca satu baris.
                Get get = new Get(Bytes.toBytes("row"));
                Result res = table.get(get);

                // Pindai rentang baris — akses bergaya kursor pada rentang kunci.
                Scan scan = new Scan(Bytes.toBytes("startRow"), Bytes.toBytes("endRow"));
                ResultScanner scanner = table.getScanner(scan);
                for (Result result : scanner) {
                    // Proses setiap hasil.
                }
                scanner.close();

                // Hapus baris.
                Delete delete = new Delete(Bytes.toBytes("row"));
                table.delete(delete);
            }

            // --- DDL: pembersihan ---
            try (Admin admin = connection.getAdmin()) {
                admin.disableTable(TableName.valueOf("tablename"));
                admin.deleteTable(TableName.valueOf("tablename"));
            }
        } finally {
            connection.close();
        }
    }
}

Langkah berikutnya