Category Archives: Hadoop 101

Penjelasan konsep-konsep mendasar tentang Hadoop.

Mengenal HDFS

Awal mulanya…

Sebelum Hadoop pertama kali muncul di sekitar tahun 2005, awalnya Doug Cutting hanya ingin menyimpan semua hasil crawling data yang ia unduh — dari program Nutch yang ia kembangkan– dari internet untuk disimpan dalam suatu wadah penyimpanan data yang tak mungkin tercukupi dalam satu komputer biasa saja. Data unduhan yang sangat banyak itu perlu tersimpan secara terdistribusi lebih dari satu komputer.

Cutting kemudian menemukan sebuah makalah ilmiah bagaimana Google bisa memberikan solusi permasalahan penyimpanan data secara terdistribusi ini, namanya Google File System (GFS). Dari keberadaan GFS inilah, Cutting mengembangkan HDFS, Hadoop Distributed File System, suatu sistem file terpadu untuk menyimpan data yang terdistribusi dalam multi komputer. Walaupun data-data tersebut tersimpan dalam banyak komputer yang memiliki sistem pengelolaan file tersendiri-sendiri, namun dengan HDFS seperti terlihat dalam satu pengelolaan file tunggal. Seperti mengelola folder-folder dalam satu komputer tunggal, tetapi semua data atau filenya sebenarnya terdistribusi secara merata ke seluruh jaringan komputer yang ada.

Distribusi Blok Data

Namun semua data yang disimpan ini tidak satu blok data dalam satu komputer. Agar penyimpanannya merata, data dengan volume yang besar itu dipecah-pecah dalam beberapa blok oleh HDFS. Lalu blok-blok data ini disebar ke seluruh jaringan komputer yang ada, jaringan kluster Hadoop. Penyebaran potongan-potongan blok data secara terdistribusi inilah yang menjadi ciri khas dari pengelolaan sistem file terdistribusi dari Hadoop. Besaran blok dari sistem pengelolaan file Hadoop jauh lebih besar dari standar besaran blok file-sistem di OS standar, suatu blok Hadoop biasa disetting konfigurasi minimalnya sebesar 64 MB, umumnya 128 MB untuk kluster Hadoop yang lebih besar.

Metadata HDFS

Bagaimana HDFS mengenali blok-blok yang terdistribusi ini bisa terlihat dalam suatu kesatuan? Pemetaan semua blok itu tersimpan dalam sutu metadata. Metadata menyimpan blok tertentu tersimpan di komputer mana saja dalam kluster Hadoop. Dengan metadata inilah, kita tidak melihat blok-blok yang tersebar, semuanya terlihat transparan, yang ada hanya susunan file yang kita simpan di HDFS, bagaimana struktur hirarki foldernya, termasuk metadata hak baca/tulis dari suatu file atau folder. Hingga siapa pemilik file atau folder terntetu dalam HDFS. Dalam konteks ini, HDFS terlihat hampir tak berbeda dengan kita melihat struktur folder dalam sistem pengelolaan file di UNIX ataupun DOS prompt.

NameNode & DataNode

Ada komputer terpusat yang menyimpan dan mengatur metadata-metadata tersebut. Komputer terpusat menjalankan service bernama NameNode untuk melakukan hal ini. Service NameNode menyimpan metadata-metadata tersebut dalam memori komputer (RAM). Diperkirakan, dalam 1 GB RAM server NameNode dapat menampung metadata hingga 1 juta blok yang terdistribusi dalam kluster Hadoop. Sedangkan komputer-komputer lain yang menyimpan distribusi blok dalam suatu jaringan kluster komputer tadi, memiliki service bernama DataNode.

Jadi DataNode bertugas menyimpan block-block data yang dialamatkan kepadanya, dan secara berkala melaporkan kondisinya kepada NameNode. Laporan berkala DataNode kepada NameNode ini disebut Heartbeat. Berdasarkan Heartbeat ini NameNode dapat mengetahui dan menguasai kondisi kluster Hadoop secara keseluruhan. Sebagai balasan atas Heartbeat dari DataNode, NameNode akan mengirimkan perintah kepada DataNode.

Replikasi Blok Data

Namun masih satu masalah lagi yang tak kalah pentingnya dalam mengelola blok data yang sudah kadung terdistribusi dalam kluster itu. Bagaimana jika salah satu komputer yang menampung sebagian blok itu mati?Tentu sebagian set data yang ada di blok itu akan tidak bisa terakses. Untuk menghindari tersebut, Cutting mereplikasi blok yang ada ddikelola salah satu DataNode untuk disalin ke DataNode lain, replikasi blok data lintas komputer. Sehingga jika salah satu service DataNode mati, masih ada backup blok data yang dikelola service DataNode di komputer lain. Umumnya, konfigurasi replikasi disetting sebanyak 3x untuk kebutuhan redundansi blok data tersebut. Perlu diperhatikan disini bahwa HDFS tidak memerlukan kemampuan Hardware yang canggih dari server untuk kebutuhan redudansi data ini. Tidak diperlukan semacam fungsi Hadrware khusus seperti mirroring data ataupun RAID untuk menjaga redundansi itu. Namun redundansi data dilakukan dilevel perangkat lunak HDFS dengan mereplikasi blok data lintas DataNode yang berbeda. HDFS akan menjaga jumlah replikasi blok data itu tetap terjaga walaupun salah satu service DataNode mati. Jadi jika satu DataNode mati, kita sekarang hanya memiliki 2 blok data dari 2 DataNode yang berbeda. Maka HDFS akan mereplikasi 1 blok data lagi di DataNode lain yang masih tersedia. Hingga total replikasi blok data tetap sebanyak 3 kali lipat.

Dari sini juga bisa dipahami, misal jika kita punya kluster Hadoop dengan total kapasitas sekitar 300 Terabytes (TB), maka kapasitas volume efektifnya hanya sekitar hingga 100 TB saja karena ada kebutuhan replikasi hingga 3 kali itu. Biasanya juga tidak sampai 100 TB, karena biasanya dialkoasikan 25-30 % space volume dari total kapasitas untuk kebutuhan proses pengelolaan data lain (misal log, data-data sementara ketika proses komputasi terntentu berjalan di HDFS, dll).

Secondary NameNode

Itu kalau untuk menjaga distribusi blok data di DataNode. Bagaimana jika service NameNode mati? Apakah semua blok data dalam DataNode masih bisa diakses? Tidak. Ketika service NameNode mati, maka metadata yang menyimpan informasi distribusi blok data dalam kluster Hadoop akan hilang dari tempat penyimpanannya di memori RAM. Disinilah service NameNode masih menjadi single-point-of-failure yang bisa menjaga kluster Hadoop untuk tetap bisa hidup. Untuk menghindari hal tersebut, biasanya disediakan backup dari NameNode. Backup ini biasa dinamakan sebagai service Secondary NameNode, terinstall dalam server komputer yang terpisah dengan server NameNode utama. Secondary Namenode melakukan checkpoint untuk setiap transaction log yang dilakukan namenode. Tujuannya agar secondary namenode bisa menggantikan fungsi namenode ketika down, dengan merujuk pada posisi terakhir transaksi pengelolaan sistem-file terdistribusi yang tersimpan di transaction log tadi. Adapun metadata sistem-file (daftar hirarki direktori dan files yang tersimpan di Hadoop Distributed Filesystem, user permission tiap folder dan files), dan pemetaan file ke block akan dipooling kembali dari kluster datanodes untuk disimpan dalam memory (RAM).

Data yang sudah banyak dan tersimpan secara terdistribusi dalam kluster multi-komputer Hadoop itu, tentu tak hanya di simpan. Ia disimpan untuk tujuan kebutuhan proses komputasi tertentu, yang dalam Hadoop disebut sebagai MapReduce. Oleh karena itu, tak akan lengkap memahami HDFS tanpa MapReduce sebagai pasangan yang tak terpisah darinya. Postingan selanjutnya akan mengkaji tentang MapReduce.[]