Dunia
Dalam artikel “BigData dan Rahasia Kejayaan Google”, telah dibahas tentang
kesuksesan Google dalam mengelola dan memberdayakan Big Data yang
telah menjadikannya raksasa Internet yang benar-benar besar dan berjaya.
Telah disebutkan pula bahwa teknologi yang digunakan oleh Google untuk
mengelola dan memberdayakan Big Data diantaranya adalah GoogleFile
System, GoogleMapReduce dan Google Bigtable. Google File System dan
Google MapReduce adalah teknologi yang dipergunakan oleh Google untuk
menyimpan dan memproses data berukuran raksasa secara terdistribusi dan
paralel dalam suatu cluster yang terdiri atas ribuan komputer. (Silakan simak
“GFS:Menggotongroyongkan Ribuan Komputer ala Google” untuk pembahasan
lebih detail tentang Google File System, dan “MapReduce:Besar dan Powerful
tapi tidak Ribet” untuk pembahasan tentang MapReduce.
Dengan adanya GFS dan MapReduce, Google telah mampu mengelola dan
memanfaatkan Big Data secara efektif dan efisien yang tidak akan mungkin
bisa dicapai hanya dengan menggunakan teknologi konvensional yang telah
ada sebelumnya. Namun demikian, GFS dan MapReduce memiliki satu
karakteristik yang boleh dikatakan adalah titik lemahnya. GFS dan MapReduce
ditujukan untuk memproses data berukuran besar dalam satu kali proses
sekaligus untuk mendapatkan suatu hasil yang telah ditentukan. GFS dan
MapReduce tidak ditujukan untuk memproses data-data berukuran kecil yang
jumlahnya ribuan atau jutaan dan memberikan hasil secara seketika. GFS dan
MapReduce tidak akan bisa menunjukkan performa yang optimal bila
digunakan untuk menyimpan, membaca dan mengolah data-data kecil yang
jumlahnya ribuan atau jutaan. Singkat katanya, GFS dan MapReduce sama
sekali tidak tepat bila digunakan sebagai Database Management System.
Untuk mengatasi kekurangan GFS dan MapReduce ini Google kemudian
menciptakan Google Bigtable.
Data Model
Telah disebutkan bahwa tabel dalam Bigtable terdiri atas baris, kolom, dan
timestamps (Gambar 1). Baris dalam Bigtable dapat dianalogikan seperti
halnya baris dalam tabel pada umumnya. Seperti halnya baris dalam RDB
(Relational Database) tiap baris dalam Bigtable juga memiliki kunci yang
disebut Row Key dan baris-baris tersebut disusun berurutan berdasar Row
Keys ini. Kemudian, bari-baris yang berada dalam suatu bentangan Row Keys
dikelompokkan dalam satu group disebut Tablet. Tiap tabel dalam Bigtable
akan dibagi-bagi menjadi Tablet-Tablet yang berukuran antara 100 – 200 MB.
Tablet-tablet inilah yang kemudian dikelola secara terdistribusi, dibagi-
bagikan ke tiap Tablet Servers. Kolom dalam Bigtable terdiri atas Column
Families yang terdiri atas beberapa Column Keys. Biasanya, data dalam satu
tipe disimpan dalam satu Column Family. Kemudian Column Family ini dibagi-
bagi dalam beberapa Column Keys yang masing-masing menyimpan data
yang berbeda (unik). Timestamps dalam Bigtable memungkinkan tiap cell
memiliki beberapa versi data dari data yang sama yang tentunya dibedakan
berdasarkan tanda waktu. Bigtable menentukan timestamps dalam
mircosecond, namun demikian timestamps juga dapat ditentukan sendiri oleh
aplikasi client yang menggunakan Bigtable. Data yang telah memiliki
timestamps ini disimpan dengan urutan menurun sehingga data yang paling
baru akan berada paling atas (dapat diakses paling dahulu). Jadi, untuk
mendapatkan suatu data tertentu, kita harus menentukan Row Key, Column
Key, dan Timestamps dari data tersebut.
Struktur Implementasi
Bigtable bukan system yang berdiri sendiri. Bigtable juga bergantung pada
beberapa teknologi Google seperti GFS dan Chubby (Gambar 2). Untuk
menyimpan data dan log, Bigtable bergantung pada GFS. Semua data yang
ditangani ataupun diproses oleh Bigtable termasuk juga log data Bigtable itu
sendiri disimpan di Google File System. Jadi, andaikan terdapat Tablet Sever
yang rusak atau mati, data yang menjadi tanggung jawabnya tidak akan
hilang karena sudah tersimpan pada GFS. Bigtable pun bisa dengan segera
membentuk Tablet Server baru yang identik dengan Tablet Server yang telah
mati dengan menggunakan informasi pada Log data yang disimpan di GFS.
Penutup
Bigtable merupakan system penyimpanan dan manajemen data secara
terdistribusi yang berdiri diatas cluster yang terdiri atas ribuan komputer.
Sebagai system penyimpanan data Bigtable menggunakan GFS, sedangkan
sebagai system manajemen data, Bigtable didukung oleh Chubby. Sebuah
cluster Bigdata dapat menyimpan beberapa tabel. Tiap tabel terdiri atas
sekumpulan Tablets. Tiap Tablet berisi semua data yang dimuat oleh suatu
rentang baris / Row Keys yang membentuk Tablet tersebut. Pada awalnya,
tiap tabel hanya terdiri atas satu Tablet. Seiring dengan pertambahan
ukurannya, karena pertambahan data yang dimuatnya, tabel akan secara
otomatis di-split menjadi Tablet-tablet yang berukuran 100 hingga 200 MB.
Demikian telah kita bahas tentang Bigtable sebagai ‘database’ besar yang
digunakan oleh Google untuk mengelola data-datanya yang mencakup data
seluruh websites di dunia maya Internet. Jadi, rasanya tidak berlebihan bila
Bigtable disebut sebagai tabel yang memuat seluruh dunia, dalam hal ini
dunia Internet.
GOOGLE MapReduce
Definisi
Setiap istilah perlu definisi, dan harus ada kesepakatan akan definisi tersebut
biar tidak terjadi salah pengertian ataupun salah paham diantara para pengguna
istilah tersebut. MapReduce pun punya definisi. MapReduce adalah model
pemrograman rilisan Google yang ditujukan untuk memproses data berukuran
raksasa secara terdistribusi dan paralel dalam cluster yang terdiri atas ribuan
komputer. Dalam memproses data, secara garis besar MapReduce dapat dibagi
dalam dua proses yaitu proses Map dan proses Reduce. Kedua jenis proses ini
didistribusikan atau dibagi-bagikan ke setiap komputer dalam suatu cluster
(kelompok komputer yang salih terhubung) dan berjalan secara paralel tanpa
saling bergantung satu dengan yang lainnya. Proses Map bertugas untuk
mengumpulkan informasi dari potongan-potongan data yang terdistribusi dalam
tiap komputer dalam cluster. Hasilnya diserahkan kepada proses Reduce untuk
diproses lebih lanjut. Hasil proses Reduce merupakan hasil akhir yang dikirim ke
pengguna.
Program yang memuat kalkulasi yang akan dilakukan dalam proses Map disebut
Fungsi Map, dan yang memuat kalkulasi yang akan dikerjakan oleh proses
Reduce disebut Fungsi Reduce. Jadi, seorang programmer yang akan
menjalankan MapReduce harus membuat program Fungsi Map dan Fungsi
Reduce.
Fungsi Map bertugas untuk membaca input dalam bentuk pasangan Key/Value,
lalu menghasilkan output berupa pasangan Key/Value juga. Pasangan Key/Value
hasil fungsi Map ini disebut pasangan Key/Value intermediate. Kemudian, fungsi
Reduce akan membaca pasangan Key/Value intermediate hasil fungsi Map, dan
menggabungkan atau mengelompokkannya berdasarkan Key tersebut. Lain
katanya, tiap Value yang memiliki Key yang sama akan digabungkan dalam satu
kelompok. Fungsi Reduce juga menghasilkan output berupa pasangan
Key/Value.
Untuk memperdalam pemahaman, mari kita simak satu contoh. Taruhlah kita
akan membuat program MapReduce untuk menghitung jumlah tiap kata dalam
beberapa file teks yang berukuran besar (Gambar 2). Dalam program ini, fungsi
Map dan fungsi Reduce dapat didefinisikan sebagai berikut:
map(String key, String value):
//key : nama file teks.
//value: isi file teks tersebut.
for each word W in value:
emitIntermediate(W,"1");
reduce(String key, Iterator values):
//key : sebuah kata.
//values : daftar yang berisi hasil hitungan.
int result = 0;
for each v in values:
result+=ParseInt(v);
emit(AsString(result));
Hasil akhir dari program ini adalah jumlah dari tiap kata yang terdapat dalam file
teks yang dimasukkan sebagai input program ini.
Cara yang paling mudah mungkin cara yang pertama, karena dapat dilakukan
pada satu PC Windows dan tidak memerlukan setting pada file konfigurasi
Hadoop.
Dalam artikel "Big Data dan Rahasia Kejayaan Google" telah disebutkan
bahwa Google menggunakan teknologi yang disebut Google File System
(GFS), Google MapReduce dan Google Bigtable untuk mengolah dan
memberdayakan Big Data. Kemudian MapReduce dibahas lebih detail pada
artikel "Google MapReduce: Besar dan Powerful tapi tidak Ribet". Pada
kesempatan ini kita akan berbincang tentang Google File System, sebuah
teknologi yang bisa menggotong-royongkan ribuan komputer.
Google File System adalah salah satu jenis dari media penyimpanan data
seperti halnya hard disk drive (HDD), flash disk, DVD-R dan sebagainya.
Bedanya, GFS menyimpan data-nya secara terdistribusi pada komputer-
komputer dalam suatu cluster. Lalu cluster itu apa? Cluster dalam konteks ini
adalah network atau jaringan komputer yang terdiri atas ratusan atau bahkan
ribuan komputer. Yang namanya network berarti komputer yang ada
didalamnya sudah dalam kondisi saling berhubungan, bisa saling
berkomunikasi, bisa saling tukar data. Berkat kemampuannya yang bisa
menyimpan data secara terdistribusi ini GFS bisa menyimpan data super
besar yang tidak bisa disimpan dalam suatu HDD paling besar sekalipun.
GFS memiliki tiga entitas / unsur utama, yaitu: Master Servers, Chunkservers,
dan Clients. Master Servers adalah server central yang mengendalikan dan
memonitor kondisi GFS secara keseluruhan. Chunkservers adalah bagian yang
bertanggungjawab menyimpan dan membaca file ke/dari HDD tiap node
(node: satu komputer yang berada dalam cluster GFS). Chunkservers yang
jumlahnya banyak ini berada dibawah kendali Master Servers. Terakhir,
Clients adalah aplikasi yang menggunakan GFS yang menyimpan dan
membaca file ke/dari GFS (Gambar 1). Tiap chunk (blok data) akan direplikasi
secara otomatis dan disimpan dalam tiga Chunkservers. Ini berguna sebagai
cadangan jika terdapat Chunkservers yang rusak. Kemudian Master Servers
akan mengatur distribusi chunks (block-block data) ke tiap Chunkservers
sedemikian rupa sehingga terdistribusi secara merata. Tidak ada yang
mendapat chunk berlebih, juga tidak ada yang mendapat terlalu sedikit.
Pada saat membaca data, GFS akan memilih servers yang terdekat,
sedangkan pada saat menulis/menyimpan data, GFS akan melakukannya
dalam beberapa servers sekaligus. GFS tidak memfasilitasi penyimpanan /
penulisan data secara bersamaan, melainkan dilakukan secara atomic.
Artinya, selama data masih dalam proses penyimpanan / penulisan oleh suatu
aplikasi, maka data tersebut beserta lokasinya dalam memory tidak akan bisa
diakses oleh aplikasi lain sampai proses penyimpanan tersebut benar-benar
selesai.
Salah satu kelebihan GFS adalah GFS dijalankan pada cluster yang terdiri atas
komputer-komputer biasa yang relatif tidak mahal. Google tidak menjalankan
GFS dengan menggunakan komputer-komputer handal dengan spesifikasi dan
kualitas super melebihi komputer biasa yang beredar dipasaran. Oleh karena
itu, kerusakan atau kegagalan pada suatu node (titik yang mengacu pada satu
komputer pada suatu cluster) adalah hal yang lumrah terjadi dan sudah
diprediksi sebelumnya. Untuk mengantisipasi hal ini, GFS didesain untuk tetap
dapat berjalan normal walaupun terjadi kegagalan dalam suatu node.
Singkatnya, GFS itu tahan banting.
Selain tahan banting, GFS juga scalable. Artinya GFS bisa di-scale up dan di-
scala out (maaf meminjam istirlah bahasa tetangga). Di-scale up artinya GFS
bisa ditingkatkan kapasitasnya dengan meningkatkan spesifikasi komputer-
komputer yang mengusungnya. Sedangkan di-scale out artinya GFS dapat
diperbesar kapasitasnya dengan menambah jumlah komputer pada cluster
tempat ia dijalankan. Kedua proses ini dapat dilakukan tanpa harus men-set
up dari awal, tidak perlu setting ulang dan tak perlu melalukan pemindahan
data dari sistem lama ke sistem baru yang telah di-upgrade. Beda halnya
kalau kita menggunakan system konvensional. Pada saat akan mengganti
atau mengupgrade kapasitas komputer, kita harus melakukan setting ulang.
Proses pemindahan data dari system lama ke system yang baru juga
merupakan hal yang mutlak