Thursday, January 31, 2013

Menjalankan Hadoop MapReduce Mode Fully Distributed



Pada artikel sebelumnya, MenjalankanAplikasi Hadoop MapReduce dengan Windows, telah dijelaskan secara detail langkah demi langkah untuk menginstal dan menjalankan Hadoop dengan mode standalone menggunakan Eclipse Java SE. Penggunaan Hadoop mode ini ditujukan untuk pengembangan aplikasi MapReduce (MapReduce Aplication Development) dan testing program dengan data berukuran kecil. Dengan menggunakan Hadoop Standalone pada Eclipse, coding dan debug program dapat dilakukan dengan lebih mudah dan cepat. Kemudian, pada artikel Menjalankan Hadoop MapReduce ModePseudo-Distributed dengan Linux, telah diuraikan langkah-langkah setting Hadoop dan menjalankan program MapReduce dengan platform Linux. Mode Pseudo-distributed ini ditujukan untuk testing program MapReduce yang telah dibuat dengan Eclipse Java dan telah ditest dengan Hadoop mode Standalone pada Eclipse tersebut. Program aplikasi MapReduce yang telah dibuat dengan Eclipse perlu ditest dengan Hadoop Pseudo-distributed untuk meyakinkan bahwa program tersebut benar-benar bisa berjalan normal sebelum program tersebut benar-benar dijalankan pada Hadoop Mode Fully Distributed (terdistribusi penuh dalam sejumlah PC). Mengapa demikian, karena program yang dibuat dengan Eclipse terkadang tidak bisa berjalan normal saat dieksekusi pada Hadoop Psudo-Distributed maupun Fully Distributed walaupun saat ditest menggunakan Hadoop yang terinstal di Eclipse program tersebut dapat berjalan normal dan memberikan output yang sesuai harapan.

Langkah-langkah untuk menginstal Hadoop dengan mode Fully Distributed sebenarnya tidak jauh berbeda dengan meninstal Hadoop dengan mode Pseudo-distributed. Perbedaannya yang jelas ada pada jumlah mesin (PC) yang digunakan. Mode Pseudo-distributed hanya menggunakan satu PC, sedangkan mode Fully Distributed yang pasti menggunakan lebih dari dua PC.

Langung saja, kita mulai step by step menginstal Hadoop Fully distributed pada sebuah cluster yang terdiri atas tiga PC. Oh ya, OS yang digunakan adalah Linux CentOS.

Tools yang dibutuhkan:
1. Java 6 atau yang lebih baru (JDK maupun JRE) dapat didownload di www.java.com atau www.oracle.com
2. Hadoop-0.20.2.tar.gz yang dapat didownload dari http://hadoop.apache.org/

Install Hadoop

Saya anggap Java sudah terinstal dengan normal pada semua PC (dalam hal ini 3 PC) yang akan digunakan sebagai cluster mini untuk menjalankan Hadoop. Langkah selanjutnya adalah menginstal Hadoop dengan mengeksekusi command - command berikut:
1. cd /usr/local  // hadoop ditempatkan di directory  /usr/local
2. sudo tar xzf hadoop-0.20.2.tar.gz   //ekstrak file hadoop dan akan menghasilkan directory baru : hadoop-0.20.2
3. sudo chown -R hadoop:hadoop hadoop-0.20.2 //set owner file-file hadoop adalah user=hadoop, group= hadoop.
4. export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk  // set varible JAVA_HOME, silakan sesuaikan dengan lokasi dan versi java yang anda gunakan.
5. export PATH=$PATH:/usr/lib/jvm/jre-1.7.0-openjdk/bin   // set PATH java, silakan sesuaikan dengan versi dan lokasi java anda gunakan.
6. export HADOOP_INSTALL=/usr/local/hadoop-0.20.2  // set Environment Variable yang menunjuk pada direktori tempat hadoop di-install.
7. export PATH=$PATH:$HADOOP_INSTALL/bin //set PATH hadoop yang menunjuk pada direktori yang memuat script daemons Hadoop.
8. Untuk mengecek apakah setting yang telah kita lakukan hingga tahap ini telah dikerjakan dengan benar, silakan eksekusi command berikut :
              hadoop version    //mengecek versi Hadoop yang sudah diinstal
bila setting-nya benar, maka pada layar console akan tampil seperti berikut:
              Hadoop 0.20.2
              Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707
              Compiled by chrisdo on Fri Feb 19 08:07:34 UTC 2010

Konfigurasi SSH
Agar Hadoop dapat berjalan normal, perlu dilakukan setting SSH agar hadoop user bisa login tanpa password dari mesin-mesin (PCs) pada hadoop cluster. Salah satu cara yang cukup sederhana adalah dengan membuat public/private key pair, kemudian menyimpannya di NFS sehingga bisa diakses dari semua mesin(PC) dalam cluster Hadoop. Cara ini dapat dilakukan dengan mengeksekusi comand-command berikut;
1. ssh-keygen -t rsa -f  ~/.ssh/id_rsa
2. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

File authorized_keys adalah public key yang harus dibagikan ke setiap node (mesin/PC dalam cluster Hadoop) agar antar node bisa login ssh secara otomatis tanpa pasword. File authorized_keys ini harus dicopy ke directory ~/.ssh pada setiap node dalam Hadoop cluster. Bila tidak ingin repot mengkopi authorized_keys ke setiap node Hadoop, anda bisa menginstal atau men-set up NFS dan meletakkan home directory dari user hadoop pada NFS tersebut.

Konfigurasi Hadoop
Konfigurasi Hadoop dapat dilakukan dengan mengedit langsung file-file konfigurasi yang telah ditempatkan dalam satu directory. File-file konfigurasi tersebut terletak di directory hadoop-0.20.2/conf yang terdiri atas:
              1. hadoop-env.sh               //Environment variables.
              2. core-site.xml                  //Konfigurasi untuk Hadoop Core.
              3. hdfs-site.xml                 //Konfigurasi untuk HDFS:namenode, datanodes.
              4. mapred-site.xml            //Konfigurasi MapReduce: jobtracker, tasktrackers.
              5. masters                         //daftar PC yang menjadi secondary namenode.
              6. slaves                                          //daftar PC yang menjadi datanode dan tasktracker.
              7. hadoop-metrics.properties          //Java Properties yang mengatur metrics.
              8. log4j.properties             //Properties untuk system logfiles.
Directory hadoop-0.20.2/conf dapat dipindahkan dan ditempatkan disembarang tempat dalam filesystem/cluster diluar direktori tempat Hadoop diinstal. Syaratnya daemon-daemon Hadoop harus dijalankan dengan option --config yang menunjukkan lokasi directory hadoop-0.20.2/conf pada local filesystem.

Bila kita membuka satu-persatu file-file konfigurasi tersebut, akan kita temukan begitu banyak variables yang harus di-setting. Bagi mereka yang baru pertama kali mengenal Hadoop, dapat dipastikan Hadoop akan terkesan begitu ribet dan merepotkan. Tapi tenang, tidak semua variables harus di-setting, banyak diantaranya yang tidak perlu diedit. Artinya, dengan nilai defaultnya saja Hadoop sudah bisa berjalan normal.

File-file konfigurasi yang WAJIB diedit adalah : hadoop-env.sh, core-site.xml. hdfs-site.xml, mapred-site.xml, masters dan slaves. Langsung saja, kita edit satu-persatu.

-- hadoop-env.sh --
Satu-satunya variable yang harus diedit adalah JAVA_HOME, yang lainnya cukup dibiarkan sesuai nilai defaultnya.

# The java implementation to use.  Required.
export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk

JAVA_HOME adalah variable yang menunjuk directory tempat Java (JRE maupun JDK) diinstal.

-- core-site.xml --
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
        <!-- server / PC yang ditunjuk sebagai namenode -->
        <property>
                <name>fs.default.name</name>
                <value>hdfs://hadoopmaster.vm/</value>
                <final>true</final>
        </property>
        <!-- tentukan tmp directory untuk Hadoop -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/local/usr/hadoopTempDir</value>
                <final>true</final>
        </property>
       
</configuration>

-- hadfs-site.xml --
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
        <property>
                <name>dfs.name.dir</name>
                <value>${hadoop.tmp.dir}/dfs/name</value>
                <final>true</final>
        </property>

        <property>
        <name>dfs.data.dir</name>
        <value>${hadoop.tmp.dir}/dfs/data</value>
        <final>true</final>
        </property>

        <property>
        <name>fs.checkpoint.dir</name>
        <value>${hadoop.tmp.dir}</value>
        <final>true</final>
        </property>

        <!-- replikasi data pada hadoop, normalnya adalah 3 -->
        <property>
        <name>dfs.replication</name>
        <value>1</value>
        </property>
</configuration>

-- mapred-site.xml --
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
    <name>mapred.job.tracker</name>
    <value>hadoopmaster.vm:8021</value>
    <final>true</final>
  </property>

  <property>
    <name>mapred.local.dir</name>
    <value>${hadoop.tmp.dir}/mapred/local</value>
    <final>true</final>
  </property>

  <property>
    <name>mapred.system.dir</name>
    <value>${hadoop.tmp.dir}/mapred/system</value>
    <final>true</final>
  </property>

  <property>
    <name>mapred.tasktracker.map.tasks.maximum</name>
    <value>2</value>
    <final>true</final>
  </property>

  <property>
    <name>mapred.tasktracker.reduce.tasks.maximum</name>
    <value>2</value>
    <final>true</final>
  </property>

  <property>
    <name>mapred.child.java.opts</name>
    <value>-Xmx200m</value>
    <!-- Not marked as final so jobs can include JVM debugging options -->
  </property>
</configuration>

-- masters --
hadoopmaster.vm

-- slaves --
nfs.vm
hadoopslave2.vm

Menghidupkan Hadoop
Setelah semua setting dan konfigurasi diatas selesai, kini Hadoop siap untuk dijalankan. Pertama-tama bagi-bagikan lah directory hadoop-0.20.2 ke semua PC/node/mesin yang akan digunakan untuk menjalankan Hadoop. Sekumpulan PC yang menjalankan Hadoop ini kita sebut Hadoop cluster. Stelah semua PC yang berpartisipasi dalam Hadoop cluster mendapatkan directory hadoop-0.20.2 plus segalas isinya, kita eksekusi command berikut:
              1. hadoop namenode -format          //men-format HDFS layaknya kita men-format HDD sebelum digunakan.
              2. start-dfs.sh     //menghidupkan namenode dan datanode.
              3. start-mapred.sh            //menghidupkan jobtracker dan tasktrackers.
Sama halnya dengan Hadoop mode Pseudo-distributed, kondisi namenode dan jobtracker dapat dicek melalui web browser pada url berikut:
              http://hadoopmaster.vm.localdomain:50030/             --url jobtracker.
              http://hadoopmaster.vm.localdomain:50070/             --url namenode.
Untuk menghentikan daemons Hadoop, silakan gunakan command berikut:
              1. stop-mapred.sh
              2. stop-dfs.sh

Sampai disini, instal Hadoop MapReduce mode Fully Distributed atau terdistribusi penuh telah paripurna. Sekarang Hadoop telah siap untuk menjalankan program aplikasi MapReduce sesuai keinginan anda. Untuk menjalankan contoh aplikasi WordCount, langkah-langkahnya sama dengan cara menjalankan aplikasi WordCount pada Hadoop mode Pseudo-distributed. Silakan cek artikel "Menjalankan Hadoop MapReduce Mode Pseudo-Distributeddengan Linux".

Selamat mencoba!

Referensi:
"Hadoop: The Definitive Guide 3rd Edition", Tom White, O'REILLY 2012.

No comments: