Anda sudah memahami konsep dari Big Data namun bingung dengan daftar software-software Big Data yang beragam? Pertama-tama Anda mungkin mendengar istilah Hadoop dan Map Reduce. Apakah semua itu? Saya akan mencoba membantu Anda memahami semuanya dengan analogi-analogi sederhana berikut.
Hadoop dan HDFS
Kedua istilah diatas sering digunakan terbolak-balik. Perhatikan gambar windows explorer berikut:
Di Windows explorer kita bisa menyimpan file apa saja, misalnya foto-foto liburan atau file-file pekerjaan kantor. Kita tau persis di drive dan folder mana data kita tersimpan. Jika harddisk kita penuh, kita cukup menggunakan media penyimpanan tambahan. Nah bagaimana jika file kita semakin besar dan banyak sekali, apakah menambah media penyimpanan solusi yang tepat? Berikut isu-isu yang akan Anda hadapi:
- Menambah media penyimpanan tidak menambah computing power, pada satu titik Anda akan mulai kesulitan mengakses file-file tersebut secara cepat karena komputer Anda masih tetap satu dengan beban yang bertambah.
- Baiklah, Anda berpikir dengan menambah beberapa komputer hasilnya akan lebih baik, benarkah? Tidak sesederhana itu, apakah komputer-komputer tersebut dapat bekerja sama secara paralel untuk menyelesaikan suatu program? Bagaimana Anda akan mengingat file mana ditaruh di komputer yang mana?
- Apabila salah satu media penyimpanan Anda itu rusak atau satu komputer Anda rusak, Anda akan kehilangan data Anda yang berharga
Sekarang perhatikan "windows explorer" hadoop berikut.
Pada dasarnya Anda melihat prinsip yang sama. Saya punya folder /user/anto/Hive/Jars yang bisa saya gunakan untuk menyimpan file-file saya. Yang membuatnya berbeda dari windows explorer adalah:
- Infrastruktur hadoop tersebut terdiri dari beberapa server (lebih dikenal dengan istilah node), sehingga saya sebenarnya tidak tau persis dimana file saya disimpan. Folder tersebut hanyalah representasi logical dari rangkaian node-node hadoop tersebut. Hadoop sebenarnya membagi dan menyebarkan file-file tersebut ke beberapa node.
- File-file tersebut otomatis terduplikasi pada beberapa node. Artinya apabila terjadi kegagalan hardware, file kita masih tersimpan dengan aman di node yang lain.
- Node-node tersebut bekerja sama secara paralel untuk menyelesaikan suatu proses.
HADOOP = HDFS + MAP REDUCE
Hadoop dan Map Reduce
Jika HDFS adalah mekanisme Hadoop menyimpan file di beberapa node, Map Reduce adalah mekanisme bagaimana Hadoop memproses file-file tersebut secara paralel. Detail perbedaan Map Reduce vs Biasa sebenarnya sangat teknikal. Perhatikan contoh kode python berikut yang digunakan untuk menghitung jumlah karakter, kata, dan baris dari suatu dokumen.
from mrjob.job import MRJob class HitungJumlahKata(MRJob): def mapper(self, _, line): //membaca baris per baris dokumen yang masuk yield "chars", len(line) //keluarkan berapa banyak huruf di tiap baris yield "words", len(line.split()) //keluarkan berapa banyak kata di tiap baris yield "lines", 1 //tiap satu baris berarti hitung 1 def reducer(self, key, values): yield key, sum(values) //aggregate semua huruf, kata, dan baris if __name__ == '__main__': HitungJumlahKata.run()
Membingungkan? Well, misalnya kita ingin menghitung jumlah huruf, kata, dan baris dari kalimat berikut:
Pada pemograman biasa (bukan Map Reduce), kalimat diatas akan dibaca baris-perbaris oleh program yang kemudian dihitung oleh prosesor (satu thread) di satu komputer. Dengan Map Reduce, kode:
membagi tiap-tiap baris dokumen diatas ke dalam beberapa thread (parallel dalam satu komputer) ataupun ke dalam beberapa komputer. Akibatnya proses bisa berlangsung lebih cepat karena prosesnya berlangsung secara paralel.
Sementara itu reducer mengumpulkan semua hasil proses parallel tadi menjadi satu output.
YARN
from mrjob.job import MRJob class HitungJumlahKata(MRJob): def mapper(self, _, line): //membaca baris per baris dokumen yang masuk yield "chars", len(line) //keluarkan berapa banyak huruf di tiap baris yield "words", len(line.split()) //keluarkan berapa banyak kata di tiap baris yield "lines", 1 //tiap satu baris berarti hitung 1 def reducer(self, key, values): yield key, sum(values) //aggregate semua huruf, kata, dan baris if __name__ == '__main__': HitungJumlahKata.run()
Membingungkan? Well, misalnya kita ingin menghitung jumlah huruf, kata, dan baris dari kalimat berikut:
Jakarta hari ini sungguh macet
Lebih macet dari biasanya
Pada pemograman biasa (bukan Map Reduce), kalimat diatas akan dibaca baris-perbaris oleh program yang kemudian dihitung oleh prosesor (satu thread) di satu komputer. Dengan Map Reduce, kode:
def mapper(self, _, line):
membagi tiap-tiap baris dokumen diatas ke dalam beberapa thread (parallel dalam satu komputer) ataupun ke dalam beberapa komputer. Akibatnya proses bisa berlangsung lebih cepat karena prosesnya berlangsung secara paralel.
def reducer(self, key, values):
Sementara itu reducer mengumpulkan semua hasil proses parallel tadi menjadi satu output.
YARN
YARN sama dengan MapReduce dengan fitur tambahan. YARN atau dikenal dengan MapReduce v2.0 memberikan peningkatan kinerja dan operasional dari MapReduce v1.0. Tidak sekadar menjalankan program secara paralel, YARN memberikan peningkatan berupa:
HIVE
- Pembagian resource infrastruktur hadoop agar dapat berjalan optimal. Maksudnya dalam operasional Map Reduce, ada banyak hal yang perlu dipertimbangkan. Misalnya beberapa user dapat melakukan query secara bersamaan di dalam infrastruktur tersebut. Contoh lain terdapat ResourceManager yang dapat mengatur antrian request-request Map Reduce.
- Terdapat NodeManager yang berfungsi sebagai container dari operasi mapper dan reducer pada setiap node. Penambahan NodeManager ini pada setiap node dapat dilakukan dengan wizard secara mudah
Anda mau membuat program Map Reduce setiap saat? Tentu saja tidak terutama apabila kita menangani operasional tabel-tabel database. Bicara mengenai HIVE adalah bicara tentang pemanfaatan Big Data sebagai Data Warehouse (DWH). Misalnya tabel berikut:
No Nama Birthday Age?
1 ANTO FEBRIANTO January 1, 2000
2 AZKA FEBRIANTO January 1, 2010
Untuk menentukan usia, dengan Map Reduce Anda harus membuat program
def mapper(self, _, line): //membaca baris per baris dokumen yang masuk
yield line.split()[2], now() - line.split()[3] //mengurangi time now() dengan birthday
Sementara dengan hive, Anda cukup menggunakan SQL
select a.*, now()-a.birthday from table_user
select a.*, now()-a.birthday from table_user
Lebih mudah bukan? Apalagi bagi Anda yang punya latar belakang RDBMS. Dengan Hive, kita terbantu dalam hal:
- Menjaga tipe data dalam operasi table terutama join antar tabel
- Kemudahan operasi karena menggunkan SQL
- Organisasi table dan metadata
Contoh query hive:
SQOOP
Nah sekarang Anda tau hive adalah DWH-nya Big Data, bagaimana cara memindahkan data dari dan ke Database exisiting? Cara manual tentu saja dengan mengupload file CSV atau TSV ke dalam Big Data. Tapi hal ini tidak praktis karena prosesnya tidak "streamline" alias tidak mudah. SQOOP membantu hal tersebut dengan menyiapkan berbagai interface dengan berbagai database. Namun demikian, dari pengalaman probadi, SQOOP bisa dikatakan belum matang untuk operasional. Anda bisa menggunakan ETL pihak ketiga seperti TALEND yang open source. Silahkan lihat pengalaman saya menggunakan TALEND untuk BIG DATA.
IMPALA
Hive "meng-encapsulate" MapReduce kedalam sintak SQL dan tidak mengubah bagaimana operasi program di dalamnya. Di dalam perkembangannya, hal ini tidak optimal karena:
SQOOP
Nah sekarang Anda tau hive adalah DWH-nya Big Data, bagaimana cara memindahkan data dari dan ke Database exisiting? Cara manual tentu saja dengan mengupload file CSV atau TSV ke dalam Big Data. Tapi hal ini tidak praktis karena prosesnya tidak "streamline" alias tidak mudah. SQOOP membantu hal tersebut dengan menyiapkan berbagai interface dengan berbagai database. Namun demikian, dari pengalaman probadi, SQOOP bisa dikatakan belum matang untuk operasional. Anda bisa menggunakan ETL pihak ketiga seperti TALEND yang open source. Silahkan lihat pengalaman saya menggunakan TALEND untuk BIG DATA.
IMPALA
Hive "meng-encapsulate" MapReduce kedalam sintak SQL dan tidak mengubah bagaimana operasi program di dalamnya. Di dalam perkembangannya, hal ini tidak optimal karena:
- Operasi MapReduce banyak memerlukan I/O (Operasi pembacaan dan penulisan ke harrdisk) sehingga mengalami high latency (perlu waktu dari program diexecute sampai komputer mulai memprosesnya)
- Hive tidak benar-benar memafaatkan memori node-node untuk menyimpan tabel-tabelnya. Padahal memori jauh lebih cepat dari harddisk.
- Karena hal diatas, Hive tidak cocok dihubungkan langsung dengan platform Visual Analytics dan Business Intellegence seperti Tableau, karena response yang lambat. Hive lebih cocok untuk operasi data yang sangat besar dan diproses secara batch.
- Error yang sering terjadi apabila table output yang diproses lebih besar dari memori yang dialokasikan pada Impala
- Hanya basic SQL sementara untuk fungsi-fungsi lainnya di hive belum disupport
- Komunitas masih terbatas
Secara interface, hive dan impala memiliki desain yang sama, begitu juga dengan cara pengoperasiannya.
HUE
Hue adalah interface yang digunakan untuk berinteraksi dengan modul-modul Big Data seperti Hive, Impala, Sqoop dan lain-lain. Misalnya operasi Hive tanpa Hue berarti menggunakan terminal / command prompt yang jelas tidak user friendly. Hue menyediakan interface yang konsisten untuk semua modul-modul tersebut. Hue berbasis web sehingga mudah diakses dari jaringan.
OOZIE
Sekarang kita sudah mengetahui modul-modul utama dari Big Data namun bagaimana kita bisa menjadwalkan kerja masing-masingnya? Seringkali dalam operasional kita ingin melakukan download data dari RDBMS setiap jam 12 malam, memprosesnya setelah itu di Big Data secara berurutan, dan mengembalikan hasilnya ke RDBMS jam 7 pagi. OOZIE digunakan untuk mengatur hal-hal tersebut. Pada dasarnya untuk membantu proses otomatisasi komputasi pada Big Data.
ZOOKEEPER
Dalam Big Data, fungsi zookeeper sebenarnya tidak terlalu dirasakan oleh end-user. Ini karena ZooKeeper berfungsi untuk mengatur sikronisasi tasks, configurasi, dan status pada pada system terdistribusi (Hadoop yang terdari dari banyak node adalah contoh system terdistribusi).
SPARK
Ingin menjalankan Machine Learning di Big Data? Spark menyediakan berbagai library machine learning yang memudahkan end-user menjalankannya. Pada dasarnya operasi machine learning berbeda dari operasi RDBMS karena pada machine learning terdapat proses yang sangat iteratif (berulang-ulang). Spark dapat menyimpan temporary operasi ke dalam memori sehingga proses iterarif tersebut dapat dilakukan dengan cepat. Namun tentu saja Spark juga bisa digunakan sebagai replacement atau complementary dari operasi SQL pada hive dan impala. Namun interfacenya masih heavy coding dan untuk operasional adhoc hal ini tidak praktis.
Dibawah terdapat contoh modul-modul utama dari Big Data. Tergantung dari use case Anda, modul yang terinstall mungkin berbeda dari apa yang saya gunakan dibawah. Contoh dibawah adalah use case Big Data sebagai complementary DWH dan sedikit analytics.
Sebagai tambahan, terdapat beberapa modul lain yang mungkin berguna bagi Anda tergantu use casenya:
HBase
Perlu akses table secara cepat dengan query key? Hbase sangat berguna untuk ini. Pada kasus bank apabila Anda ingin informasi nasabah diretrieve secara cepat dengan memasukkan nomor rekening, hbase akan sangat membantu untuk hal itu.
FLUME
Ingin memasukkan data Twitter secara realtime ke dalam Big Data? Flume dapat digunakan untuk hal tersebut. Flume juga dapat digunakan untuk menyimpan log-log mesin ATM atau log-log server apalikasi berbasis Web.
SOLR
Perusahaan Anda mengeluarkan banyak dokumen-dokumen NOTA atau bagian legal mengeluarkan banyak dokumen dan Anda perlu Search Engine untuk mencari dokumen-dokumen tertentu? Solr seperti "search engine google" (tentu saja tidak secanggih itu).
Note:
Nah mungkin Anda bertanya-tanya kenapa artikel-artikel tentang Big Data selalu berkaitan dengan analisis social media seperti sentimen atau tentang data-data tak terstruktur namun semua modul-modul yang saya jelaskan diatas tidak ada menyinggung hal tersebut? Itu karena yang anda dengar adalah bagian dari Big Data Case (lihat artikel saya sebelumnya). Bicara mengenai sentimen, Anda harus mengerti bagaimana pendefinisian sentimen dalam Bahasa Indonesia (NLP = Natural Langauge Processing), dan bagaimana memprosesnya menggunakan Machine Learning yang sesuai (Spark MLlib). Setiap modul-modul yang saya jelaskan diatas dapat digunakan secara bersama-sama (bahkan secara real time) untuk menjawab case yang sesuai.
Semoga membantu...


