Skip navigation


Belakangan ini saya harus mengolah beberapa data yang jumlahnya cukup besar, tidak terlalu besar tetapi juga tidak cukup kecil untuk dijalankan di laptop sendiri. Cara yang saya gunakan adalah MapReduce menggunakan Apache Hadoop. Berhubung data yang besar itu sudah terlanjur saya simpan di Amazon S3 maka secara intuitif pengolahan datanya baiknya dilakukan menggunakan Amazon Elastic MapReduce (yang merupakan salah satu alasan saya belajar kilat menggunakan Hadoop).

Dan menjalankan skrip MapReduce di AWS EMR ini sebenarnya tidak terlalu sulit. Kalau sudah bisa berhasil menjalankan contoh aplikasi WordCount bawaannya Hadoop, menjalankannya di EMR hanya sekedar melakukan konfigurasi saja. Tutorial instalasi Hadoop untuk local machine dan cara menjalankan program contoh WordCount dapat dilihat di halaman ini.

Pertama-tama saya unggah sample input yang dibutuhkan ke Amazon S3. Untuk mengunggah ini, kita harus mempunyai akun Amazaon Web Service terlebih dahulušŸ™‚

petra@petra-laptop:~$ s3cmd mb --bucket-location=ap-southeast-1 s3://maleskoding
Bucket 's3://urbanindomaleskoding/' created
petra@petra-laptop:~$ s3cmd sync /tmp/gutenberg/ s3://maleskoding/gutenberg/
WARNING: Redirected to: maleskoding.s3-ap-southeast-1.amazonaws.com
/tmp/gutenberg/pg20417.txt -> s3://maleskoding/gutenberg/pg20417.txt  [1 of 3]
 674566 of 674566   100% in    2s   228.28 kB/s  done
/tmp/gutenberg/pg4300.txt -> s3://maleskoding/gutenberg/pg4300.txt  [2 of 3]
 1573150 of 1573150   100% in    6s   221.22 kB/s  done
/tmp/gutenberg/pg5000.txt -> s3://maleskoding/gutenberg/pg5000.txt  [3 of 3]
 1423801 of 1423801   100% in    6s   224.21 kB/s  done
Done. Uploaded 3671517 bytes in 16.0 seconds, 223.48 kB/s

Setelah itu saya mengunggah skrip JAR yang disediakan pada paket instalasi Hadoop.

petra@petra-laptop:/tmp/gutenberg$ s3cmd put /usr/local/hadoop/hadoop-examples-1.1.1.jar s3://maleskoding/script/
/usr/local/hadoop/hadoop-examples-1.1.1.jar -> s3://maleskoding/script/hadoop-examples-1.1.1.jar  [1 of 1]

Sekarang pergi ke AWS Console tepatnya di bagian Elastic MapReduce.

Screenshot from 2013-01-13 17:07:34

Dari situ saya buat sebuah Job Flow.

Screenshot from 2013-01-13 17:07:48

Akan keluar kotak dialog untuk memulai proses MapReduce yang akan saya lakukan. Di situ ubah nama Job Flownya agar mudah dikenali diĀ historynya nanti. Kemudian pilih “Run your own application” dan di bawahnya pilih “Custom JAR” karena saya ingin menjalankan JAR hadoop-example yang sudah saya unggah tadi.

Screenshot from 2013-01-13 17:08:10

Di halaman kedua, saya harus mengkonfigurasi file JAR yang ingin saya eksekusi dan konfigurasi parameter untuk JAR tersebut. Dari halaman tutorial WordCount di situs Apache Hadoop, format pengeksekusiannya adalah seperti di bawah.

bin/hadoop jar hadoop-*-examples.jar wordcount [-m <#maps>] [-r <#reducers>] <in-dir> <out-dir>

Untuk lebih detilnya bisa dilihat di halaman tutorial yang saya taruh di atas (atau langsung lihat di sini).

hduser@ubuntu:/usr/local/hadoop$ bin/hadoop jar hadoop*examples*.jar wordcount /user/hduser/gutenberg /user/hduser/gutenberg-output

Saya akan melakukan hal yang mirip pada dialog kedua.

Screenshot from 2013-01-13 17:09:27

Di bagian JAR Location, saya masukkan lokasi dari JAR yang telah saya upload, yakni di maleskoding/script/hadoop-examples-1.1.1.jar. Dan di bagian JAR arguments, saya masukkan parameter seperti yang ditulis di atas. Hanya bedanya lokasiĀ filesystemĀ di sini menggunakan Amazon S3 Native Filesystem, dan jangan lupa ditambahkan URI schema s3n di depannya (sejujurnya saya belum coba kalau tidak ditambahkan, tapi sebenernya rada males juga kalo kena charge tapi gagal).

Lalu di langkah ketiga saya tentukanĀ instanceĀ yang akan digunakan baik jumlah maupun tipenya. BiarĀ billnya tidak terlalu besar, pilih sajaĀ instance countĀ 1 dan tipenya yang Small (lagi mode pelit). Lagipula inputnya juga tidak terlalu besar, jadinya tidak terlalu butuhĀ instanceĀ yang banyak.

Screenshot from 2013-01-13 17:09:34

Di langkah keempat saya melakukan konfigurasi yang lebihĀ advanced, salah satu contohnya adalah menyediakan key-pair untukĀ instanceĀ yang akan dijalankan. Gunanya apa? Jadi jika saya melakukanĀ jobĀ yang cukup lama, saya bisa sewaktu-waktu melakukan SSH ke salah satuĀ instanceĀ yang saya inginkan menggunakanĀ key-pairĀ yang telah saya tentukan untuk melihat keadaan dalam instanceĀ tersebut. Untuk saat ini, karena tidak terlalu penting, maka saya tidak perluĀ key-pair. Dan saya juga bisa mengeset tempat penyimpanan log dari job Ā yang dijalankan.

Screenshot from 2013-01-13 17:10:06

Di langkah kelima, saya bisa melakukan apa yang disebut Bootstrap Action.Ā Proses ini gunanya biasanya untuk melakukan konfigurasiĀ instanceĀ atau menginstall library yang dibutuhkan sebelumĀ instanceĀ tersebut mengeksekusi job. Sudah pasti saya juga tidak butuh untuk contoh WordCount ini.

Screenshot from 2013-01-13 17:10:13

Dan bagian terakhir adalah bagian konfirmasi. Klik “Create Job Flow”.

Screenshot from 2013-01-13 17:10:51

Tak lama, saya akan lihat sebuah baris baru pada tabel job yang ada. Job itu akan mulai dari state STARTING, RUNNING, dan kemudian COMPLETED (atau FAILED :P) Proses untuk STARTING ini agak sedikit lambat, tapi kalau saya menjalankan program yang berjalan beberapa jam dengan banyakĀ instanceĀ jadi relatif sangat cepat.

Screenshot from 2013-01-13 17:11:05

KarenaĀ instanceĀ yang digunakan tidak lain adalah dari EC2, saya bisa lihat di panel EC2 semuaĀ instance yang saya luncurkan untuk melakukanĀ job.

Screenshot from 2013-01-13 17:31:31

Setelah jobnya selesai,Ā statusnya di tabel akan menunjukkan COMPLETED. Yang harus diperhatikan adalah Normalized Instance Hours. MeskipunĀ jobĀ yang saya eksekusi hanya memakan waktu 3 menit, tetapi waktu untukĀ billingnya dibulatkan ke atas untuk tiapĀ instance. Berhubung saya menggunakan 2 instance berarti total waktu yang akan dicharge adalah 2 jam. Dan untuk 2 jam tersebut saya harus membayar sebanyak $0.21 atau sekitar 2 ribu rupiah.

Screenshot from 2013-01-13 17:20:05

Dan saya bisa lihat hasilkan di S3 yang telah saya set pada argumen JARnya.

petra@petra-laptop:~$ s3cmd ls s3://maleskoding/gutenberg-output/
2013-01-13 10:16         0   s3://maleskoding/gutenberg-output/_SUCCESS
2013-01-13 10:16    880838   s3://maleskoding/gutenberg-output/part-r-00000
petra@petra-laptop:~$ s3cmd get s3://maleskoding/gutenberg-output/part-r-00000
s3://maleskoding/gutenberg-output/part-r-00000 -> ./part-r-00000  [1 of 1]
 880838 of 880838   100% in    5s   164.37 kB/s  done

Dan saya bisa lihat hasilnya di fileĀ part-r-00000Ā yang sudah saya download tadi.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: