Arsitektur HBase: Model Data HBase & Mekanisme Baca / Tulis HBase



Blog Arsitektur HBase ini menjelaskan Model Data HBase & memberikan wawasan tentang Arsitektur HBase. Ini juga menjelaskan mekanisme berbeda pada HBase.

Arsitektur HBase

Di blog saya sebelumnya di Tutorial HBase , Saya jelaskan apa itu HBase dan fitur-fiturnya. Saya juga menyebutkan studi kasus Facebook messenger untuk membantu Anda terhubung dengan lebih baik. Sekarang lebih maju di , Saya akan menjelaskan model data Arsitektur HBase dan HBase.Sebelum Anda melanjutkan, Anda juga harus tahu bahwa HBase adalah konsep penting yang merupakan bagian integral dari file untuk Sertifikasi Big Data Hadoop.

Topik penting yang akan saya bahas dalam blog arsitektur HBase ini adalah:





Mari kita pahami dulu model data HBase. Ini membantu HBase dalam membaca / menulis dan pencarian lebih cepat.



Arsitektur HBase: Model Data HBase

Seperti yang kita ketahui, HBase adalah database NoSQL yang berorientasi pada kolom. Meskipun terlihat mirip dengan database relasional yang berisi baris dan kolom, tetapi ini bukan database relasional. Database relasional berorientasi pada baris sedangkan HBase berorientasi pada kolom. Jadi, mari kita pahami dulu perbedaan antara database Berorientasi kolom dan berorientasi baris:

apa itu metode tostring di java

Database berorientasi baris vs berorientasi kolom:

  • Database berorientasi baris menyimpan rekaman tabel dalam urutan baris. Sedangkan database berorientasi kolommenyimpan catatan tabel dalam urutan kolom, yaitu entri dalam kolom disimpan di lokasi yang berdekatan pada disk.

Untuk lebih memahaminya, mari kita ambil contoh dan pertimbangkan tabel di bawah ini.



Tabel - Arsitektur HBase - Edureka

Jika tabel ini disimpan dalam database berorientasi baris. Ini akan menyimpan catatan seperti yang ditunjukkan di bawah ini:

satu,Paul Walker,KAMI,231,Gagah,

2, Vin Diesel,Brazil,520,Mustang

Dalam database berorientasi baris, data disimpan berdasarkan baris atau tupel seperti yang Anda lihat di atas.

Sedangkan database berorientasi kolom menyimpan data ini sebagai:

satu,2, Paul Walker,Vin Diesel, KAMI,Brazil, 231,520, Gagah,Mustang

Dalam database berorientasi kolom, semua nilai kolom disimpan bersama seperti nilai kolom pertama akan disimpan bersama, kemudian nilai kolom kedua akan disimpan bersama dan data di kolom lain disimpan dengan cara yang sama.

  • Ketika jumlah datanya sangat besar, seperti dalam petabyte atau exabyte, kami menggunakan pendekatan berorientasi kolom, karena data dari satu kolom disimpan bersama dan dapat diakses lebih cepat.
  • Sementara pendekatan berorientasi baris secara komparatif menangani lebih sedikit jumlah baris dan kolom secara efisien, karena database berorientasi baris menyimpan data dalam format terstruktur.
  • Saat kami perlu memproses dan menganalisis sekumpulan besar data semi-terstruktur atau tidak terstruktur, kami menggunakan pendekatan berorientasi kolom. Seperti aplikasi yang berhubungan dengan Pemrosesan Analitik Online seperti data mining, data warehousing, aplikasi termasuk analitik, dll.
  • Sedangkan, Pemrosesan Transaksional Online seperti domain perbankan dan keuangan yang menangani data terstruktur dan memerlukan properti transaksional (properti ACID) menggunakan pendekatan berorientasi baris.

Tabel HBase memiliki komponen berikut, ditunjukkan pada gambar di bawah ini:

  • Tabel : Data disimpan dalam format tabel di HBase. Tapi di sini tabel dalam format berorientasi kolom.
  • Baris Kunci : Kunci baris digunakan untuk mencari record yang membuat pencarian menjadi cepat. Anda pasti penasaran ingin tahu caranya? Saya akan menjelaskannya di bagian arsitektur selanjutnya di blog ini.
  • Kolom Keluarga : Berbagai kolom digabungkan dalam satu kelompok kolom. Keluarga kolom ini disimpan bersama yang membuat proses pencarian lebih cepat karena data milik keluarga kolom yang sama dapat diakses bersama dalam satu pencarian.
  • Kolom Kualifikasi : Setiap nama kolom dikenal sebagai kualifikasi kolomnya.
  • Sel : Data disimpan dalam sel. Data tersebut dibuang ke dalam sel yang secara khusus diidentifikasi oleh kunci baris dan kualifikasi kolom.
  • Stempel waktu : Stempel waktu adalah kombinasi dari tanggal dan waktu. Setiap kali data disimpan, itu disimpan dengan stempel waktunya. Ini memudahkan pencarian versi data tertentu.

Dengan cara yang lebih sederhana dan pengertian, kita dapat mengatakan HBase terdiri dari:

  • Set tabel
  • Setiap tabel dengan keluarga kolom dan baris
  • Kunci baris bertindak sebagai kunci Primer di HBase.
  • Akses apa pun ke tabel HBase menggunakan Kunci Utama ini
  • Setiap kualifikasi kolom yang ada di HBase menunjukkan atribut yang sesuai dengan objek yang berada di dalam sel.

Sekarang setelah Anda mengetahui tentang Model Data HBase, mari kita lihat bagaimana model data ini sejalan dengan Arsitektur HBase dan membuatnya cocok untuk penyimpanan besar dan pemrosesan lebih cepat.

Arsitektur HBase: Komponen Arsitektur HBase

HBase memiliki tiga komponen utama yaitu, Server HMaster , Server Wilayah HBase, Wilayah dan Penjaga kebun binatang .

Gambar di bawah ini menjelaskan hierarki Arsitektur HBase. Kami akan membicarakannya satu per satu.


Sekarang sebelum pergi ke HMaster, kita akan memahami Region karena semua Server ini (HMaster, Region Server, Zookeeper) ditempatkan untuk mengoordinasikan dan mengelola Region dan melakukan berbagai operasi di dalam Region. Jadi Anda pasti penasaran untuk mengetahui apa itu daerah dan mengapa itu begitu penting?

Arsitektur HBase: Wilayah

Suatu wilayah berisi semua baris antara tombol mulai dan tombol putus yang ditetapkan ke wilayah itu. Tabel HBase dapat dibagi menjadi beberapa wilayah sedemikian rupa sehingga semua kolom keluarga kolom disimpan dalam satu wilayah. Setiap wilayah berisi baris dalam urutan yang diurutkan.

Banyak wilayah ditetapkan ke a Server Wilayah , yang bertanggung jawab untuk menangani, mengelola, menjalankan operasi baca dan tulis di sekumpulan wilayah tersebut.

Jadi, menyimpulkan dengan cara yang lebih sederhana:

  • Tabel dapat dibagi menjadi beberapa wilayah. Wilayah adalah rentang baris yang diurutkan yang menyimpan data antara kunci mulai dan kunci putus.
  • Suatu Wilayah memiliki ukuran default 256MB yang dapat dikonfigurasi sesuai dengan kebutuhan.
  • Sekelompok wilayah dilayani ke klien oleh Server Wilayah.
  • Sebuah Server Wilayah dapat melayani sekitar 1000 wilayah untuk klien.

Sekarang mulai dari atas hierarki, pertama-tama saya ingin menjelaskan kepada Anda tentang HMaster Server yang bertindak mirip dengan NameNode di HDFS . Kemudian, pindah ke bawah dalam hierarki, saya akan membawa Anda melalui Zookeeper dan Server Wilayah.

Arsitektur HBase: HMaster

Seperti pada gambar di bawah ini, Anda dapat melihat HMaster menangani kumpulan Server Wilayah yang berada di DataNode. Mari kita pahami bagaimana HMaster melakukannya.

  • HBase HMaster melakukan operasi DDL (membuat dan menghapus tabel) dan menetapkan wilayah ke server Wilayah seperti yang Anda lihat pada gambar di atas.
  • Ini mengoordinasikan dan mengelola Server Wilayah (mirip seperti NameNode mengelola DataNode di HDFS).
  • Ini menetapkan wilayah ke Server Wilayah saat startup dan menetapkan kembali wilayah ke Server Wilayah selama pemulihan dan load balancing.
  • Ini memonitor semua instance Server Wilayah di cluster (dengan bantuan Zookeeper) dan melakukan aktivitas pemulihan setiap kali Server Wilayah mati.
  • Ini menyediakan antarmuka untuk membuat, menghapus dan memperbarui tabel.

HBase memiliki lingkungan yang terdistribusi dan besar di mana HMaster saja tidak cukup untuk mengelola semuanya. Jadi, Anda akan bertanya-tanya apa yang membantu HMaster mengelola lingkungan yang sangat besar ini? Di situlah ZooKeeper berperan. Setelah kita memahami bagaimana HMaster mengelola lingkungan HBase, kita akan memahami bagaimana Zookeeper membantu HMaster dalam mengelola lingkungan.

db browser untuk review sqlite

Arsitektur HBase: ZooKeeper - Koordinator

Gambar di bawah ini menjelaskan mekanisme koordinasi ZooKeeper.

  • Zookeeper bertindak seperti koordinator di dalam lingkungan terdistribusi HBase. Ini membantu dalam mempertahankan status server di dalam cluster dengan berkomunikasi melalui sesi.
  • Setiap Server Wilayah bersama dengan HMaster Server mengirimkan detak jantung terus menerus secara berkala ke Zookeeper dan memeriksa server mana yang hidup dan tersedia seperti yang disebutkan pada gambar di atas. Ini juga memberikan pemberitahuan kegagalan server sehingga, tindakan pemulihan dapat dilakukan.
  • Mengacu dari gambar di atas Anda bisa melihat, ada server yang tidak aktif, yang bertindak sebagai cadangan untuk server yang aktif. Jika server aktif gagal, itu datang untuk penyelamatan.
  • HMaster aktif mengirimkan detak jantung ke Zookeeper sementara HMaster yang tidak aktif mendengarkan pemberitahuan yang dikirim oleh HMaster aktif. Jika HMaster aktif gagal mengirim detak jantung, sesi tersebut dihapus dan HMaster yang tidak aktif menjadi aktif.
  • Sementara jika Server Wilayah gagal mengirim detak jantung, sesi berakhir dan semua pendengar diberitahu tentang itu. Kemudian HMaster melakukan tindakan pemulihan yang sesuai yang akan kita bahas nanti di blog ini.
  • Zookeeper juga mempertahankan jalur .META Server, yang membantu klien mana pun dalam mencari wilayah mana pun. Klien pertama-tama harus memeriksa dengan .META Server di mana Server Wilayah milik suatu wilayah, dan mendapat jalur dari Server Wilayah itu.

Ketika saya berbicara tentang .META Server, izinkan saya pertama kali menjelaskan kepada Anda apa itu .META server? Jadi, Anda dapat dengan mudah menghubungkan pekerjaan ZooKeeper dan .META Server secara bersamaan. Nanti, ketika saya akan menjelaskan kepada Anda mekanisme pencarian HBase di blog ini, saya akan menjelaskan bagaimana keduanya bekerja sama.

Arsitektur HBase: Tabel Meta

  • Tabel META adalah tabel katalog khusus HBase. Ia memelihara daftar semua Server Wilayah dalam sistem penyimpanan HBase, seperti yang Anda lihat pada gambar di atas.
  • Melihat sosok yang bisa Anda lihat, .META file memelihara tabel dalam bentuk kunci dan nilai. Kunci mewakili kunci awal wilayah dan id-nya sedangkan nilai berisi jalur Server Wilayah.

Seperti yang sudah saya bahas, Server Wilayah dan fungsinya saat saya menjelaskan kepada Anda Wilayah, sekarang kami bergerak ke bawah hierarki dan saya akan fokus pada komponen Server Wilayah dan fungsinya. Nanti saya akan membahas mekanisme mencari, membaca, menulis dan memahami bagaimana semua komponen ini bekerja sama.

Arsitektur HBase: Komponen Server Wilayah

Gambar di bawah ini menunjukkan komponen Server Wilayah. Sekarang, saya akan membahasnya secara terpisah.

Server Wilayah mengelola berbagai wilayah yang berjalan di atas . Komponen Server Wilayah adalah:

  • WAL: Seperti yang dapat Anda simpulkan dari gambar di atas, Write Ahead Log (WAL) adalah file yang dilampirkan ke setiap Server Wilayah di dalam lingkungan terdistribusi. WAL menyimpan data baru yang belum disimpan atau disimpan di penyimpanan permanen. Ini digunakan jika terjadi kegagalan untuk memulihkan kumpulan data.
  • Blokir Cache: Dari gambar di atas, terlihat jelas bahwa Block Cache berada di bagian atas Server Wilayah. Ini menyimpan data yang sering dibaca di memori. Jika data di BlockCache paling lama digunakan, maka data itu dihapus dari BlockCache.
  • MemStore: Ini adalah cache tulis. Ini menyimpan semua data yang masuk sebelum memasukkannya ke disk atau memori permanen. Ada satu MemStore untuk setiap kelompok kolom di suatu wilayah. Seperti yang Anda lihat pada gambar, ada beberapa MemStor untuk suatu wilayah karena setiap wilayah berisi beberapa keluarga kolom. Data diurutkan dalam urutan leksikografis sebelum memasukkannya ke disk.
  • HFile: Dari gambar di atas Anda dapat melihat HFile disimpan di HDFS. Dengan demikian ia menyimpan sel yang sebenarnya pada disk. MemStore memasukkan data ke HFile ketika ukuran MemStore melebihi.

Sekarang setelah kita mengetahui komponen mayor dan minor dari Arsitektur HBase, saya akan menjelaskan mekanisme dan upaya kolaborasi mereka dalam hal ini. Baik itu membaca atau menulis, pertama-tama kita perlu mencari dari mana membaca atau menulis file. Jadi, mari kita pahami proses penelusuran ini, karena ini adalah salah satu mekanisme yang membuat HBase sangat populer.

Arsitektur HBase: Bagaimana Pencarian Menginisialisasi di HBase?

Seperti yang Anda ketahui, Zookeeper menyimpan lokasi tabel META. Setiap kali klien mendekati dengan permintaan baca atau tulis ke HBase, operasi berikut terjadi:

  1. Klien mengambil lokasi tabel META dari Zookeeper tersebut.
  2. Klien kemudian meminta lokasi Server Wilayah dari kunci baris yang sesuai dari tabel META untuk mengaksesnya. Klien menyimpan informasi ini dengan lokasi Tabel META.
  3. Kemudian itu akan mendapatkan lokasi baris dengan meminta dari Server Wilayah yang sesuai.

Untuk referensi di masa mendatang, klien menggunakan cache untuk mengambil lokasi tabel META dan Server Wilayah kunci baris sebelumnya membaca. Kemudian klien tidak akan merujuk ke tabel META, sampai dan kecuali ada yang terlewat karena wilayah tersebut bergeser atau dipindahkan. Kemudian akan meminta lagi ke server META dan memperbarui cache.

Karena setiap saat, klien tidak membuang waktu untuk mengambil lokasi Server Wilayah dari META Server, sehingga menghemat waktu dan mempercepat proses pencarian. Sekarang, izinkan saya memberi tahu Anda bagaimana penulisan terjadi di HBase. Apa saja komponen yang terlibat di dalamnya dan bagaimana mereka terlibat?

Arsitektur HBase: HBase Write Mekanisme

Gambar di bawah ini menjelaskan mekanisme penulisan di HBase.

Mekanisme penulisan melalui proses berikut secara berurutan (lihat gambar di atas):

Langkah 1: Setiap kali klien memiliki permintaan tulis, klien menulis data ke WAL (Write Ahead Log).

  • Hasil edit tersebut kemudian ditambahkan di akhir file WAL.
  • File WAL ini dipertahankan di setiap Server Wilayah dan Server Wilayah menggunakannya untuk memulihkan data yang tidak dimasukkan ke disk.

Langkah 2: Setelah data ditulis ke WAL, kemudian disalin ke MemStore.

Langkah 3: Setelah data ditempatkan di MemStore, maka klien menerima pengakuan.

Langkah 4: Ketika MemStore mencapai ambang, itu membuang atau memasukkan data ke dalam HFile.

Sekarang mari kita selami lebih dalam dan memahami bagaimana kontribusi MemStore dalam proses penulisan dan apa fungsinya?

HBase Write Mekanisme- MemStore

  • MemStore selalu memperbarui data yang disimpan di dalamnya, dalam urutan leksikografis (secara berurutan dengan cara kamus) sebagai KeyValues ​​yang diurutkan. Ada satu MemStore untuk setiap keluarga kolom, dan dengan demikian pembaruan disimpan dengan cara yang diurutkan untuk setiap keluarga kolom.
  • Ketika MemStore mencapai ambang, itu membuang semua data ke dalam HFile baru dengan cara yang diurutkan. HFile ini disimpan dalam HDFS. HBase berisi beberapa HFiles untuk setiap Keluarga Kolom.
  • Seiring waktu, jumlah HFile bertambah saat MemStore membuang data.
  • MemStore juga menyimpan nomor urut tertulis terakhir, sehingga Master Server dan MemStore sama-sama tahu, bahwa apa yang telah dilakukan sejauh ini dan dari mana harus memulai. Saat wilayah dimulai, nomor urut terakhir dibaca, dan dari nomor itu, pengeditan baru dimulai.

Seperti yang saya bahas beberapa kali, HFile itu adalah penyimpanan persisten utama dalam arsitektur HBase. Akhirnya, semua data disimpan ke HFile yang merupakan penyimpanan permanen HBase. Karenanya, mari kita lihat properti HFile yang membuatnya lebih cepat untuk pencarian saat membaca dan menulis.

Arsitektur HBase: HBase Write Mekanisme- HFile

  • Tulisan ditempatkan secara berurutan di disk. Oleh karena itu, pergerakan kepala baca-tulis disk sangat sedikit. Ini membuat mekanisme penulisan dan pencarian menjadi sangat cepat.
  • Indeks HFile dimuat dalam memori setiap kali HFile dibuka. Ini membantu dalam menemukan rekor dalam satu pencarian.
  • Trailer adalah penunjuk yang menunjuk ke blok meta HFile. Itu ditulis di akhir file yang dikomit. Ini berisi informasi tentang cap waktu dan filter mekar.
  • Bloom Filter membantu dalam mencari pasangan nilai kunci, itu melewatkan file yang tidak berisi kunci baris yang diperlukan. Stempel waktu juga membantu dalam mencari versi file, ini membantu dalam melewatkan data.

Setelah mengetahui mekanisme tulis dan peran berbagai komponen dalam mempercepat penulisan dan pencarian. Saya akan menjelaskan kepada Anda bagaimana mekanisme membaca bekerja di dalam arsitektur HBase? Kemudian kita akan beralih ke mekanisme yang meningkatkan kinerja HBase seperti pemadatan, pemisahan wilayah, dan pemulihan.

Arsitektur HBase: Baca Mekanisme

Seperti yang dibahas dalam mekanisme pencarian kami, pertama-tama klien mengambil lokasi Server Wilayah dari .META Server jika klien tidak memilikinya dalam memori cache-nya. Kemudian melalui langkah-langkah berurutan sebagai berikut:

  • Untuk membaca data, pemindai terlebih dahulu mencari sel baris di cache blok. Di sini semua pasangan nilai kunci yang baru dibaca disimpan.
  • Jika Pemindai gagal menemukan hasil yang diperlukan, Pemindai akan dipindahkan ke MemStore, seperti yang kita tahu ini adalah memori cache tulis. Di sana, ia mencari file yang paling baru ditulis, yang belum dibuang di HFile.
  • Akhirnya, itu akan menggunakan filter mekar dan cache blok untuk memuat data dari HFile.

Sejauh ini, saya telah membahas mekanisme pencarian, baca dan tulis HBase. Sekarang kita akan melihat mekanisme HBase yang membuat pencarian, baca dan tulis cepat di HBase. Pertama, kami akan mengerti Pemadatan , yang merupakan salah satu mekanisme tersebut.

Arsitektur HBase: Pemadatan

HBase menggabungkan HFiles untuk mengurangi penyimpanan dan mengurangi jumlah pencarian disk yang diperlukan untuk pembacaan. Proses ini disebut pemadatan . Pemadatan memilih beberapa HFile dari suatu wilayah dan menggabungkannya. Ada dua jenis pemadatan seperti yang Anda lihat pada gambar di atas.

  1. Pemadatan Kecil : HBase secara otomatis mengambil HFile yang lebih kecil dan mengikatnya kembali ke HFile yang lebih besar seperti yang ditunjukkan pada gambar di atas. Ini disebut Pemadatan Kecil. Ini melakukan semacam gabungan untuk melakukan HFile yang lebih kecil ke HFile yang lebih besar. Ini membantu dalam pengoptimalan ruang penyimpanan.
  2. Pemadatan Besar: Seperti yang diilustrasikan pada gambar di atas, dalam pemadatan Mayor, HBase menggabungkan dan memasukkan kembali HFile yang lebih kecil dari suatu wilayah ke HFile baru. Dalam proses ini, keluarga kolom yang sama ditempatkan bersama di HFile baru. Ini menjatuhkan sel yang dihapus dan kedaluwarsa dalam proses ini. Ini meningkatkan kinerja membaca.

Tetapi selama proses ini, disk input-output dan lalu lintas jaringan mungkin macet. Ini dikenal sebagai tulis amplifikasi . Jadi, umumnya dijadwalkan selama waktu beban puncak rendah.

Sekarang proses optimasi kinerja lain yang akan saya bahas adalah Pemisahan Wilayah . Ini sangat penting untuk penyeimbangan beban.

Arsitektur HBase: Pemisahan Wilayah

Gambar di bawah mengilustrasikan mekanisme Pemisahan Wilayah.

Setiap kali suatu wilayah menjadi besar, itu dibagi menjadi dua wilayah anak, seperti yang ditunjukkan pada gambar di atas. Setiap wilayah mewakili tepat setengah dari wilayah induk. Kemudian perpecahan ini dilaporkan ke HMaster. Ini ditangani oleh Server Wilayah yang sama hingga HMaster mengalokasikannya ke Server Wilayah baru untuk penyeimbangan beban.

Bergerak ke bawah garis, yang terakhir namun tidak kalah pentingnya, saya akan menjelaskan kepada Anda bagaimana HBase memulihkan data setelah gagal. Seperti yang kita tahu Pemulihan Kegagalan adalah fitur yang sangat penting dari HBase, jadi beri tahu kami bagaimana HBase memulihkan data setelah mengalami kegagalan.

Arsitektur HBase: HBase Crash dan Pemulihan Data

  • Setiap kali Server Wilayah gagal, Zookeeper memberi tahu HMaster tentang kegagalan tersebut.
  • Kemudian HMaster mendistribusikan dan mengalokasikan wilayah Server Wilayah yang mogok ke banyak Server Wilayah yang aktif. Untuk memulihkan data MemStore dari Server Wilayah yang gagal, HMaster mendistribusikan WAL ke semua Server Wilayah.
  • Setiap Server Wilayah menjalankan kembali WAL untuk membangun MemStore untuk kelompok kolom wilayah yang gagal itu.
  • Data ditulis dalam urutan kronologis (dalam urutan yang tepat waktu) di WAL. Oleh karena itu, menjalankan kembali WAL itu berarti membuat semua perubahan yang dibuat dan disimpan di file MemStore.
  • Jadi, setelah semua Server Wilayah menjalankan WAL, data MemStore untuk semua kelompok kolom dipulihkan.

Saya harap blog ini akan membantu Anda dalam memahami Model Data HBase & Arsitektur HBase. Semoga Anda menikmatinya. Sekarang Anda dapat menghubungkan dengan fitur-fitur HBase (yang telah saya jelaskan sebelumnya Tutorial HBase blog) dengan Arsitektur HBase dan memahami cara kerjanya secara internal. Sekarang setelah Anda mengetahui bagian teoritis dari HBase, Anda harus beralih ke bagian praktis. Mengingat hal ini, blog kami berikutnya dari akan menjelaskan contoh HBase POC .

Sekarang Anda telah memahami Arsitektur HBase, lihat oleh Edureka, perusahaan pembelajaran online tepercaya dengan jaringan lebih dari 250.000 pelajar yang puas dan tersebar di seluruh dunia. Kursus Pelatihan Sertifikasi Edureka Big Data Hadoop membantu peserta didik menjadi ahli dalam domain HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume, dan Sqoop menggunakan kasus penggunaan waktu nyata pada Ritel, Media Sosial, Penerbangan, Pariwisata, domain Keuangan.

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar dan kami akan menghubungi Anda kembali.

daftar acara javascript dengan contoh