HBase
 sql >> Teknologi Basis Data >  >> NoSQL >> HBase

Pengindeksan Email Menggunakan Cloudera Search dan HBase

Dalam posting saya sebelumnya, Anda telah mempelajari cara mengindeks pesan email dalam mode batch, dan hampir secara real time, menggunakan Apache Flume dengan MorphlineSolrSink. Dalam postingan ini, Anda akan mempelajari cara mengindeks email menggunakan Cloudera Search dengan Apache HBase dan Lily HBase Indexer, yang dikelola oleh NGDATA dan Cloudera. (Jika Anda belum membaca posting sebelumnya, saya sarankan Anda melakukannya sebagai latar belakang sebelum membaca.)

Metode hampir real-time mana yang harus dipilih, HBase Indexer atau Flume MorphlineSolrSink, yang akan sepenuhnya bergantung pada kasus penggunaan Anda, tetapi di bawah ini adalah beberapa hal yang perlu dipertimbangkan saat membuat keputusan tersebut:

  • Apakah HBase merupakan media penyimpanan yang optimal untuk kasus penggunaan tertentu?
  • Apakah data sudah diserap ke HBase?
  • Apakah ada pola akses yang mengharuskan file disimpan dalam format selain HFiles?
  • Jika HBase saat ini tidak berjalan, apakah akan ada sumber daya perangkat keras yang cukup untuk menjalankannya?

Ada dua cara untuk mengonfigurasi Cloudera Search untuk mengindeks dokumen yang disimpan di HBase:untuk mengubah file konfigurasi secara langsung dan memulai Lily HBase Indexer secara manual atau sebagai layanan, atau untuk mengonfigurasi semuanya menggunakan Cloudera Manager. Posting ini akan fokus pada yang terakhir, karena sejauh ini merupakan cara termudah untuk mengaktifkan Pencarian di HBase — atau layanan lain di CDH, dalam hal ini.

Memahami Replikasi HBase dan Pengindeks Lily HBase

Saat merancang solusi ini, Cloudera mengidentifikasi empat persyaratan utama agar pengindeksan HBase efektif:

  • Latensi pengindeksan harus mendekati waktu nyata (detik) dan dapat disetel
  • Indeks Solr pada akhirnya harus konsisten dengan tabel HBase saat penyisipan, pembaruan, dan penghapusan diterapkan ke HBase
  • Mekanisme pengindeksan harus skalabel dan toleran terhadap kesalahan
  • Proses pengindeksan tidak dapat memperlambat penulisan HBase

Untuk memenuhi persyaratan ini, Cloudera Search menggunakan mekanisme replikasi asli HBase. Bagi mereka yang tidak terbiasa dengan replikasi HBase, berikut adalah ringkasan singkat dan tingkat tinggi:

Saat pembaruan diterapkan ke write-ahead-log (WAL), HBase RegionServer mendengarkan pembaruan ini di utas terpisah. Ketika buffer utas itu diisi atau mencapai akhir file, itu mengirimkan kumpulan dengan semua pembaruan yang direplikasi ke rekan RegionServer yang berjalan di kluster yang berbeda. Oleh karena itu, WAL sangat penting agar pengindeksan berfungsi.

Cloudera Search menggunakan mekanisme replikasi HBase, yang mendengarkan peristiwa mutasi baris HBase dan, alih-alih mengirim pembaruan ke RegionServer yang berbeda, mengirimkannya ke Lily HBase Indexer. Pada gilirannya, Lily HBase Indexer menerapkan logika transformasi Cloudera Morphlines, memecah peristiwa ke dalam bidang Solr dan meneruskannya ke Server Apache Solr.

Ada keuntungan utama menggunakan replikasi HBase dibandingkan mengimplementasikan fungsi yang sama dalam koprosesor HBase. Pertama, replikasi bekerja secara paralel dan asinkron dengan data yang diserap ke HBase. Oleh karena itu, pengindeksan Cloudera Search tidak menambahkan latensi atau ketidakstabilan operasional apa pun ke operasi HBase rutin. Kedua, menggunakan metode replikasi memungkinkan perubahan langsung yang mulus pada logika transformasi. Sebaliknya, untuk melakukan perubahan melalui modifikasi koprosesor memerlukan restart RegionServer, yang akan membuat data tidak tersedia untuk pengguna HBase. Mungkin yang paling penting adalah penerapan koprosesor cukup mengganggu dan, jika tidak diuji dengan benar, dapat mengganggu kinerja HBase.

Alur ini diilustrasikan di bawah ini:

Menginstal Pencarian Cloudera dan Menerapkan Pengindeks Lily HBase

Cloudera Manager mengunduh dan menyebarkan Cloudera Search sebagai satu paket secara otomatis. Yang harus Anda lakukan adalah mengeklik ikon “Paket” di navigasi atas, memilih versi Solr, dan mengunduh, mendistribusikan, dan mengaktifkannya:

Seperti disebutkan sebelumnya, Pencarian Cloudera bergantung pada replikasi HBase, dan oleh karena itu, itu akan diaktifkan selanjutnya. Aktifkan replikasi dengan mengeklik HBase Service->Configuration->Backup dan memastikan "Aktifkan Replikasi HBase" dan "Aktifkan Pengindeksan" keduanya dicentang. Jika perlu, simpan perubahan dan mulai ulang layanan HBase.

Untuk menambahkan Lily HBase Indexer, buka Layanan->Tambah Layanan , pilih “Pengindeks Keystore”, dan tambahkan, arahkan ke instance HBase yang akan digunakan untuk pemrosesan email:

Mengonfigurasi Solr

Selanjutnya, konfigurasikan Solr persis seperti yang dijelaskan dalam posting sebelumnya di sini.

  1. Buat contoh file konfigurasi schema.xml:
    $ solrctl --zk localhost:2181/solr \instancedir --generate $HOME/emailSearchConfig

  2. Edit file schema.xml di $HOME/emailSearchConfig, dengan file konfigurasi yang akan menentukan bidang yang relevan dengan pemrosesan email. Salinan lengkap file dapat ditemukan di tautan ini.
  3. Unggah konfigurasi Solr ke ZooKeeper:
    $ solrctl --zk localhost:2181/solr instancedir \--create email_collection $HOME/emailSearchConfig

  4. Buat koleksi Solr:
    $ solrctl --zk localhost:2181/solr collection \--create email_collection -s 1

Mendaftarkan Pengindeks

Langkah ini diperlukan untuk menambah dan mengkonfigurasi pengindeks dan replikasi HBase. Perintah di bawah ini akan memperbarui ZooKeeper dan menambahkan myindexer sebagai rekan replikasi untuk HBase. Itu juga akan memasukkan konfigurasi ke ZooKeeper, yang akan digunakan Lily HBase Indexer untuk menunjuk ke koleksi yang tepat di Solr.

$ hbase-indexer add-indexer -n myindexer -c indexer-config.xml \ -cp solr.zk=localhost:2181/solr \ -cp solr.collection=collection1

Argumen:

  • -n myindexer – menentukan nama pengindeks yang akan didaftarkan di ZooKeeper
  • -c indexer-config.xml – file konfigurasi yang akan menentukan perilaku pengindeks
  • -cp solr.zk=localhost:2181/solr  – menentukan lokasi konfigurasi ZooKeeper dan Solr. Ini harus diperbarui dengan lokasi khusus lingkungan ZooKeeper.
  • -cp solr.collection=collection1 – menentukan koleksi mana yang akan diperbarui. Ingat langkah Konfigurasi Solr tempat kita membuat koleksi1.

File index-config.xml relatif mudah dalam kasus ini; yang dilakukannya hanyalah menentukan kepada pengindeks tabel mana yang akan dilihat, kelas yang akan digunakan sebagai mapper (com.ngdata.hbaseindexer.morphline.MorphlineResultToSolrMapper), dan lokasi file konfigurasi Morphline. Jenis pemetaan diatur ke kolom karena kami ingin mendapatkan setiap sel sebagai dokumen Solr individual. Secara default tipe pemetaan diatur ke baris , dalam hal ini dokumen Solr menjadi baris penuh.

Param name="morphlineFile" menentukan lokasi file konfigurasi Morphlines. Lokasi bisa menjadi jalur absolut dari file Morphlines Anda, tetapi karena Anda menggunakan Cloudera Manager, tentukan jalur relatifnya:“morphlines.conf”.

  

Isi dari file konfigurasi hbase-indexer dapat ditemukan di link ini.

Untuk referensi lengkap dari perintah hbase-indexer, cukup untuk menjalankan perintah tanpa argumen:

$ hbase-indexerUsage:hbase-indexer  dimana  opsi dari salah satu kategori berikut:ALAT tambah pengindeks pemutakhiran pengindeks hapus pengindeks daftar pengindeks PROCESS MANAGEMENT server jalankan server HBase Indexer nodeREPLICATION (EVENT PROCESSING) ALAT replikasi-status replikasi-tungguPACKAGE MANAGEMENT classpath dump versi hbase CLASSPATH cetak versi atau CLASSNAME menjalankan kelas bernama CLASSNAMEKebanyakan perintah mencetak bantuan saat dipanggil tanpa parameter.

Mengonfigurasi dan Memulai Pengindeks Lily HBase

Jika Anda ingat, saat Anda menambahkan Lily HBase Indexer, Anda menentukan instance HBase yang terkait dengannya. Oleh karena itu, Anda tidak perlu melakukan itu pada langkah ini. Namun, Anda perlu menentukan logika transformasi Morphlines yang memungkinkan pengindeks ini mengurai pesan email dan mengekstrak semua bidang yang relevan.

Buka Layanan dan pilih Lily HBase Indexer yang Anda tambahkan sebelumnya. Pilih Konfigurasi->Lihat dan Edit->Lebar-Layanan->Morphlines . Salin dan tempel file morphlines.

Pustaka morphlines email akan melakukan tindakan berikut:

1.     Baca acara email HBase dengan perintah extractHBaseCells
2. Pisahkan teks yang tidak terstruktur menjadi beberapa bidang dengan perintah grok
3. Jika ID Pesan hilang dari email, buat dengan perintah generateUUID
4. Ubah tanggal/cap waktu menjadi bidang yang akan dipahami Solr, dengan perintah convertTimestamp
5. Lepaskan semua bidang tambahan yang tidak kami tentukan di schema.xml, dengan perintah sanitizeUknownSorlFieldscommand

Perintah extractHBaseCells patut mendapat perhatian lebih, karena ini adalah satu-satunya hal yang berbeda tentang konfigurasi morphlines Pengindeks HBase. Parameternya adalah:

  • inputColumn – menentukan kolom untuk berlangganan (bisa berupa wild card)
  • outputFied – nama bidang tempat data dikirim
  • jenis – jenis bidang (ini adalah string dalam kasus badan email)
  • sumber – dapat berupa nilai atau kualifikasi; value menentukan bahwa nilai sel harus diindeks
extractHBaseCells { pemetaan :[ { inputColumn :"messages:*" outputField :"message" type :string source :value } ] }

Unduh salinan file morphlines ini dari sini.

Satu catatan penting adalah bahwa bidang id akan dibuat secara otomatis oleh Lily HBase Indexer. Pengaturan tersebut dapat dikonfigurasi dalam file index-config.xml di atas dengan menentukan atribut unique-key-field. Ini adalah praktik terbaik untuk membiarkan nama default id — karena tidak ditentukan dalam file xml di atas, bidang id default dibuat dan akan menjadi kombinasi Nama Kolom Keluarga-Kolom-Row.

Pada titik ini simpan perubahan dan mulai Lily HBase Indexer dari Cloudera Manager.

Mengatur Tabel Kotak Masuk di HBase

Ada banyak cara untuk membuat tabel di HBase secara terprogram (Java API, REST API, atau metode serupa). Di sini Anda akan menggunakan shell HBase untuk membuat tabel kotak masuk (sengaja menggunakan nama keluarga kolom deskriptif agar lebih mudah diikuti). Dalam aplikasi produksi, nama keluarga harus selalu pendek, karena selalu disimpan dengan setiap nilai sebagai bagian dari kunci sel. Perintah berikut akan melakukannya dan mengaktifkan replikasi pada keluarga kolom yang disebut "pesan":

hbase(main):003:0> buat 'inbox', {NAME => 'messages', REPLICATION_SCOPE => 1}

Untuk memeriksa apakah tabel telah dibuat dengan benar, jalankan perintah berikut:

hbase(main):003:0> deskripsikan 'inbox'DESCRIPTION ENABLED {NAME => 'inbox', FAMILIES => [{NAME => 'messages', DATA_BLOCK_ENCODING => ' true NONE', BLOOMFILTER => ' TIDAK ADA', REPLICATION_SCOPE => '1', VERSIONS => '3', KOMPRESI => 'TIDAK ADA', MIN_VERSIONS => '0', TTL => '2147483647', KEEP_DEL ETED_CELLS => 'salah', BLOCKSIZE => ' 65536', IN_MEMORY => 'salah', ENCODE _ON_DISK => 'benar', BLOCKCACHE => 'benar'}]}

Dari titik ini, setiap email yang dimasukkan ke dalam tabel "kotak masuk" di kolom "pesan" keluarga akan memicu peristiwa ke Lily HBase Indexer, yang akan memproses peristiwa tersebut, memecahnya menjadi beberapa bidang, dan mengirimkannya ke Solr untuk pengindeksan.

Skema tabel kotak masuk sederhana:ID baris adalah nama orang yang memiliki kotak masuk ini. Setiap sel adalah pesan individu dengan kolom menjadi ID integer yang unik. Di bawah ini adalah cuplikan tabel sampel seperti yang ditampilkan oleh antarmuka HBase Hue:

Mengakses Data

Anda memiliki banyak pilihan alat visual untuk mengakses email yang diindeks. Hue dan Solr GUI keduanya pilihan yang sangat baik. HBase juga memungkinkan sejumlah teknik akses, tidak hanya dari GUI tetapi juga melalui shell HBase, API, dan bahkan teknik skrip sederhana.

Integrasi dengan Solr memberi Anda fleksibilitas luar biasa dan juga dapat memberikan opsi pencarian yang sangat sederhana serta lanjutan untuk data Anda. Misalnya, mengonfigurasi file skema Solr.xml sedemikian rupa sehingga semua bidang dalam objek email disimpan di Solr memungkinkan pengguna mengakses isi pesan lengkap melalui pencarian sederhana, dengan pertukaran ruang penyimpanan dan kompleksitas komputasi.

Atau, Anda dapat mengonfigurasi Solr untuk menyimpan hanya sejumlah bidang, seperti id, pengirim, dan subjek. Dengan elemen ini, pengguna dapat dengan cepat mencari Solr dan mengambil ID pesan yang selanjutnya dapat digunakan untuk mengambil pesan lengkap dari HBase itu sendiri.

Contoh di bawah ini hanya menyimpan ID pesan di Solr tetapi mengindeks semua bidang dalam objek email. Mencari Solr dalam skenario ini mengambil ID email, yang kemudian dapat Anda gunakan untuk menanyakan HBase. Jenis penyiapan ini ideal untuk Solr karena menghemat biaya penyimpanan dan memanfaatkan sepenuhnya kemampuan pengindeksan Solr.

Skrip shell di bawah ini mengeluarkan kueri ke Solr Rest API untuk kata kunci "productId" dan mengembalikan bidang "id" dalam format CSV. Hasilnya adalah daftar ID dokumen yang cocok dengan kueri. Skrip kemudian mengulang id dan memecahnya menjadi Id Baris, Keluarga Kolom, dan Nama Kolom, yang digunakan untuk mengakses HBase melalui HBase REST API standar.

#!/bin/bash# Kueri SOLR dan kembalikan bidang id untuk setiap dokumen# yang berisi kata resignquery_resp=$(curl -s 'http://spark:8983/solr/collection1_shard1_replica1/select?q=productId&fl =id&wt=csv')# Ulangi hasil dari perintah sebelumnya,# dan gunakan id untuk mengambil sel dari HBase melalui HBase REST APIuntuk i di $query_respdo if [ "$i" !="id" ]; lalu cmd=$(echo $i |awk -F'-' '{print "curl -s http://spark:20550/inbox/" $1 "/" $2 ":" $3}') $cmd -H " Terima:application/x-protobuf " fidone

Kesimpulan

Dalam posting ini Anda telah melihat betapa mudahnya mengindeks email yang disimpan di HBase — hampir secara real time dan sepenuhnya tidak mengganggu aliran HBase utama. Singkatnya, ingatlah langkah-langkah utama ini:

  • Aktifkan replikasi di HBase
  • Konfigurasi Lily HBase Indexer dengan benar
  • Gunakan Morphlines di Lily HBase Indexer untuk membantu transformasi (tidak perlu pengkodean!)

Jika Anda memiliki kesempatan untuk membaca posting sebelumnya, Anda dapat melihat bahwa file morphlines.conf secara praktis identik dalam ketiga kasus. Ini berarti sangat mudah untuk mengembangkan kasus penggunaan pencarian di ekosistem Hadoop. Jika data sudah dalam HDFS, gunakan MapReduceIndexerTool untuk mengindeksnya. Jika data tiba melalui Flume, gunakan SolrMorphlineSink dengan file morphlines yang identik. Jika nanti Anda memutuskan HBase cocok dengan kasus penggunaan, hanya sedikit perubahan yang diperlukan untuk memulai pengindeksan sel di HBase:Cukup tambahkan perintah extractHBaseCells ke file morphlines.

Meskipun contoh ini berkonsentrasi pada email sebagai kasus penggunaan, metode ini dapat diterapkan di banyak skenario lain di mana HBase digunakan sebagai lapisan penyimpanan dan akses. Jika perusahaan Anda sudah menggunakan HBase untuk kasus penggunaan tertentu, pertimbangkan untuk menerapkan Cloudera Search di atasnya. Itu tidak memerlukan pengkodean dan benar-benar dapat membuka data ke audiens yang lebih luas di organisasi.

Jeff Shmain adalah arsitek solusi di Cloudera.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pengujian kinerja HBase menggunakan YCSB

  2. Apache Phoenix untuk CDH

  3. Konsep pengembangan aplikasi Database Operasional Cloudera

  4. Penggabungan wilayah HBase

  5. bunuh server wilayah mati zombie