Cara kedua dalam seri tentang penggunaan Apache HBase Thrift API
Terakhir kali, kami membahas dasar-dasar tentang menghubungkan ke Hemat melalui Python. Kali ini, Anda akan mempelajari cara menyisipkan dan mendapatkan beberapa baris sekaligus.
Bekerja dengan Tabel
Menggunakan antarmuka Hemat, Anda dapat membuat atau menghapus tabel. Mari kita lihat kode Python yang membuat tabel:
client.createTable(tablename, [Hbase.ColumnDescriptor(name=cfname)])
Dalam cuplikan ini, Anda membuat objek Hbase.ColumnDescriptor. Dalam objek ini, Anda dapat mengatur semua parameter yang berbeda untuk Keluarga Kolom. Dalam hal ini, Anda hanya mengatur nama Keluarga Kolom.
Anda mungkin ingat dari cara sebelumnya bahwa menambahkan file Hbase.thrift ke proyek Anda seringkali berguna. Ini adalah salah satunya:Anda dapat membuka Hbase.thrift dan menemukan definisi ColumnDescriptor dengan semua parameter dan namanya.
Anda dapat mengonfirmasi keberadaan tabel menggunakan kode berikut:
tables = client.getTableNames() found = False for table in tables: if table == tablename: found = True
Kode ini mendapatkan daftar tabel pengguna, mengulanginya, dan menandai ditemukan sebagai benar jika tabel ditemukan.
Anda dapat menghapus tabel menggunakan kode berikut:
client.disableTable(tablename) client.deleteTable(tablename)
Ingat bahwa di HBase, Anda harus menonaktifkan tabel sebelum menghapusnya. Kode ini melakukan hal itu.
Menambahkan Baris dengan Hemat
Hemat memberi kami beberapa cara untuk menambahkan atau memperbarui baris: Satu baris dalam satu waktu, atau beberapa baris sekaligus. Antarmuka Thrift tidak menggunakan objek Put yang sama dengan Java API. Perubahan ini disebut mutasi baris dan menggunakan objek Mutation dan BatchMutation.
mutations = [Hbase.Mutation( column='columnfamily:columndescriptor', value='columnvalue')] client.mutateRow('tablename', 'rowkey', mutations)
Setiap objek Mutation mewakili perubahan ke satu kolom. Untuk menambah atau mengubah kolom lain, Anda cukup menambahkan objek Mutation lain ke daftar mutasi.
Ketika Anda selesai menambahkan objek Mutation, Anda memanggil metode mutateRow. Metode ini menggunakan nama tabel, kunci baris, dan daftar mutasi sebagai argumen.
Menambahkan beberapa baris sekaligus memerlukan beberapa perubahan:
# Create a list of mutations per work of Shakespeare mutationsbatch = [] for line in shakespeare: rowkey = username + "-" + filename + "-" + str(linenumber).zfill(6) mutations = [ Hbase.Mutation(column=messagecolumncf, value=line.strip()), Hbase.Mutation(column=linenumbercolumncf, value=encode(linenumber)), Hbase.Mutation(column=usernamecolumncf, value=username) ] mutationsbatch.append(Hbase.BatchMutation(row=rowkey,mutations=mutations)) # Run the mutations for the work of Shakespeare client.mutateRows(tablename, mutationsbatch)
Dalam contoh ini, Anda masih menggunakan objek Mutation tetapi kali ini Anda harus membungkusnya dalam objek BatchMutation. Objek BatchMutation memungkinkan Anda untuk menentukan kunci baris yang berbeda untuk setiap daftar Mutasi. Anda juga mengubah ke metode mutateRows. Dibutuhkan nama tabel dan objek BatchMutation.
Mendapatkan Baris Dengan Hemat
Menggunakan metode getRow, Anda dapat mengambil satu baris berdasarkan kunci barisnya. Panggilan ini mengembalikan daftar objek TrowResult. Berikut adalah kode untuk mendapatkan dan bekerja dengan output:
rows = client.getRow(tablename, "shakespeare-comedies-000001") for row in rows: message = row.columns.get(messagecolumncf).value linenumber = decode(row.columns.get(linenumbercolumncf).value) rowKey = row.row
Mulai kode dengan permintaan getRow. Get ini akan mengembalikan baris dengan kunci "shakespeare-comedies-000001". Baris ini akan kembali sebagai daftar TRowResult. Menggunakan loop baris, Anda menelusuri daftar baris yang dikembalikan.
Untuk mendapatkan nilai kolom, gunakan column.get(“COLUMNFAMILY:COLUMDESCRIPTOR”). Pastikan untuk menggunakan sintaks penamaan yang tepat.
Ingatlah bahwa ketika berurusan dengan data biner seperti bilangan bulat, Anda harus mengubahnya dari string Python ke jenis apa pun yang seharusnya. Dalam hal ini, Anda mengambil string dan menjadikannya bilangan bulat dengan metode decode.
Mendapatkan beberapa baris sekaligus sangat mirip dengan mendapatkan satu baris. Ini kodenya:
rowKeys = [ "shakespeare-comedies-000001", "shakespeare-comedies-000010", "shakespeare-comedies-000020", "shakespeare-comedies-000100", "shakespeare-comedies-000201" ] rows = client.getRows(tablename, rowKeys)
Alih-alih menentukan satu baris, Anda memasukkan daftar baris. Anda juga mengubah metode menjadi getRows, yang menggunakan nama tabel dan daftar baris sebagai argumen.
Daftar objek TrowResult dikembalikan dan Anda kemudian mengulangi daftar tersebut seperti pada kode baris tunggal.
Dalam cara berikutnya dan terakhir, Anda akan mempelajari cara menggunakan pemindaian dan mendapatkan pengantar tentang beberapa pertimbangan saat memilih antara REST dan Thrift API untuk pengembangan.
Jesse Anderson adalah instruktur untuk Universitas Cloudera.