Beberapa hari ini ngutak-atik mongo-hadoop, lebih tepatnya mongodb dengan hadoop streaming. Versi hadoop yang support untuk mongo-hadoop dengan hadoop streaming adalah hadoop dengan base version 0.21.0. Hadoop yang berbasis hadoop versi 0.21.0 adalah hadoop versi 0.22.x dan 0.23.x. Sayangnya hadoop versi 1.x tidak memiliki apa yang dibutuhkan oleh mongo-hadoop streaming. Selain hadoop dengan base version 0.21.0 kita juga bisa menggunakan Claudera release 3.
Kenapa pake hadoop streaming dan memaksakan diri tetap menggunakan hadoop streaming, karena dengan hadoop streaming kita bisa lebih mudah untuk melakukan map reduce ke hadoop. Dengan mongo-hadoop streaming kita ga harus menggunakan bahasa Java untuk membuat script map reduce. Saat ini mongo-hadoop streaming mensupport bahasa python dan javascript sebagai map reduce script.
Lah terus ngapain pakai hadoop segala buat map reduce, bukannya mongodb udah ada map reduce. Nah ini, pertanyaan gini sulit dijawab ini. Yang jelas, penggunaan hadoop ini untuk mempercepat proses map reduce dan perhitungan yang ingin kita lakukan. Semacam quick count gitu deh.
Saya menggunakan OS X Lion untuk menjalankan uji coba mongo-hadoop streaming ini. Penginnya sih nulis tutorial, tapi lagi ga mood buat nulis tutorial komplit. Saya tulis sebagian aja deh ya yang saya kesusahan.
Untuk hadoop nya, saya gunakan hadoop versi 0.23.1 bisa di-download di http://apache.pesat.net.id/hadoop/common/hadoop-0.23.1/. Jangan download yang src biar ga usah repot compile lagi.
Ekstrak deh tar.gz nya. Tambahkan di ~/.bash_profile
export HADOOP_HOME=/path/to/hadoop-0.23.1 export PATH=$HADOOP_HOME/bin:$PATH
Oia, jangan lupa aktifkan passphraseless ssh login ke localhost. Aktifkan Remote Login di System Preferences > Sharing. Lalu jalankan
ssh-keygen -t dsa -P -f ~/.ssh/id_dsa_for_hadoop cat ~/.ssh/id_dsa_for_hadoop.pub >> ~/.ssh/authorized_keys
Terus coba deh login ke localhost
ssh localhost
Gimana jalanin hadoopnya? Silakan ikuti di http://www.crobak.org/2011/12/getting-started-with-apache-hadoop-0-23-0/. Saya ngikut tutorial itu dan alhamdulillah bisa jalan.
Lanjut ke mongo-hadoop streamingnya. Download source mongo-hadoop di https://github.com/mongodb/mongo-hadoop. Ekstrak lalu masuk ke folder streaming dan jalankan file
build.sh
cd streaming ./build.sh
Berdoa saja semoga lancar dan koneksi internet tidak terputus, kalo ada masalah saya juga belum tau menyelesaikannya, belum ahli bahasa Java soalnya.
Setelah selesai compile, copy file
/path/to/mongo-hadoop/core/target/mongo-hadoop-core*.jar
ke folder
/path/to/hadoop-0.23.1/lib/
Download juga mongo driver untuk Java di https://github.com/mongodb/mongo-java-driver/downloads terus copy juga ke
/path/to/hadoop-0.23.1/lib/
Udah deh selesai persiapan buat main-main sama mongo-hadoop streaming. Untuk contohnya bisa ikuti di http://www.slideshare.net/spf13/mongodb-and-hadoop.
Saya sendiri mendapatkan bug seperti berikut
12/04/30 13:10:04 WARN mapred.LocalJobRunner: job_local_0001 java.io.FileNotFoundException: File file:/tmp/_temporary/0 does not exist at org.apache.hadoop.fs.RawLocalFileSystem.listStatus(RawLocalFileSystem.java:315) . . . 12/04/30 13:10:05 INFO mapreduce.Job: map 100% reduce 100% 12/04/30 13:10:05 INFO mapreduce.Job: Job job_local_0001 failed with state FAILED due to: NA 12/04/30 13:10:05 INFO mapreduce.Job: Counters: 29 . . . 12/04/30 13:10:05 ERROR streaming.StreamJob: Job not Successful! MongoDB Streaming Command Failed!
Tetapi, walau ada error demikian hasil dari map reduce tetap ada dan sepertinya valid. Bug ini nampaknya sedang diperbaiki oleh core developer mongo-hadoop. Untuk mendapatkan perkembangannya bisa memantau di milis mongodb-user dan di halaman github mongo-hadoop.
Gimana dengan performa? Nanti dulu, sabar. Ada fitur yang saya butuhkan dan belum tersedia di mongo-hadoop streaming ini. Jadi, untuk performa nanti dulu deh.