Faculty of Computer Science - University of Indonesia
Hadoop adalah salah satu implementasi dari MapReduce yang bersifat open source.
Berhubung tutorial instalasi Hadoop pada satu buah node maupun pada sebuah cluster dapat ditemukan di [1] dan [2], maka silakan gunakan kedua rujukan tersebut jika ingin mencoba menginstal Hadoop. Tulisan ini berisi hal-hal tambahan yang belum tercakup dalam kedua tutorial tadi agar Hadoop dapat dijalankan pada sebuah cluster seperti Hastinapura.
Hastinapura merupakan sebuah cluster yang menggunakan Sun Grid Engine sebagai job scheduler. Selain itu, Hastinapura dapat digunakan oleh banyak pengguna dengan account-nya masing-masing. Ada 16 buah mesin dalam cluster yang masing-masing memiliki storage lokal dan juga memiliki sebuah filesystem yang digunakan bersama.
Saat ini Hadoop telah diinstal di 2 buah mesin, yaitu node15 dan node16. Dalam kedua mesin tersebut, terdapat salinan aplikasi Hadoop yang didapatkan dari http://www.apache.org/dist/hadoop/core/hadoop-0.16.0/hadoop-0.16.0.tar.gz yang diletakkan di /app/hadoop.
Ada sebuah account bernama hadoop dan dalam grup hadoop yang dibuat. Seluruh berkas Hadoop juga berada di bawah kepemilikan user ini.
Buat ssh key tanpa passphrase agar dapat melakukan ssh ke mesin lain tanpa password. Silakan baca http://grid.ui.ac.id/blog/2006/05/05/membuat-autentikasi-ssh-tanpa-password untuk petunjuk pembuatannya.
Direktori yang perlu dibuat adalah sebagai berikut.
/home/hadoop/data (lokal di tiap mesin)/export/home/hadoop/data (diletakkan dalam shared file system)/tmp/hadoop (lokal di tiap mesin)/tmp/hadoop/tmp (lokal di tiap mesin dan dengan hak tulis untuk seluruh user)Seluruh direktori di atas dimiliki oleh user hadoop. Khusus untuk direktori terakhir, user lain harus dapat menulisinya.
Berikut ini adalah isi dari berkas hadoop/conf/hadoop-site.xml. File konfigurasi ini juga disalin ke seluruh mesin yang ada.
Temporary directory untuk Hadoop diletakkan di /tmp/hadoop/tmp/user-${user.name}. Direktori ini harus dapat ditulisi oleh user lain yang akan menggunakan Hadoop.
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop/tmp/user-${user.name}</value>
<description>A base for other temporary directories.</description>
</property>
Lokasi Name Node, yaitu server yang mengatur distribusi file. Saat ini, mesin node16 digunakan sebagai Name Node. Link yang digunakan adalah storage link.
<property>
<name>fs.default.name</name>
<value>hdfs://xnode16:54310</value>
<description>The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation. The
uri's scheme determines the config property (fs.SCHEME.impl) naming
the FileSystem implementation class. The uri's authority is used to
determine the host, port, etc. for a filesystem.</description>
</property>
Lokasi Job Tracker, yaitu server yang mengatur distribusi pekerjaan. Lokasi saat ini adalah di mesin node16.
<property>
<name>mapred.job.tracker</name>
<value>node16:54311</value>
<description>The host and port that the MapReduce job tracker runs
at. If "local", then jobs are run in-process as a single map
and reduce task.
</description>
</property>
Jumlah replikasi data. Karena mesin dan storage masih terbatas, maka tidak ada replikasi yang dilakukan.
<property>
<name>dfs.replication</name>
<value>1</value>
<description>Default block replication.
The actual number of replications can be specified when the file is created.
The default is used if replication is not specified in create time.
</description>
</property>
Agar filesystem yang dibuat dapat ditulisi oleh user yang berbeda. Entah tepat atau tidak pengaturan itu dilakukan di bagian ini.
<property>
<name>dfs.permissions</name>
<value>false</value>
<description>
If "true", enable permission checking in HDFS.
If "false", permission checking is turned off,
but all other behavior is unchanged.
Switching from one parameter value to the other does not change the mode,
owner or group of files or directories.
</description>
</property>
Direktori untuk meletakkan control file MapReduce. Direktori ini harus dapat dibaca oleh semua mesin yang terlibat sehingga diletakkan di dalam shared file system. Direktori /export/home/hadoop di Hastinapura dapat diakses dari seluruh mesin.
<property>
<name>mapred.system.dir</name>
<value>/export/home/hadoop/data/mapred/system</value>
<description>The shared directory where MapReduce stores control files.
</description>
</property>
Direktori penyimpanan data sementara yang dibuat saat proses.
<property>
<name>mapred.local.dir</name>
<value>/tmp/hadoop/mapred/local</value>
<description>The local directory where MapReduce stores intermediate
data files. May be a comma-separated list of
directories on different devices in order to spread disk i/o.
Directories that do not exist are ignored.
</description>
</property>
Direktori penyimpanan data dalam HDFS. Direktori ini tidak diletakkan di dalam /tmp agar bersifat permanen (tidak hilang saat reboot).
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/data/dfs/data</value>
<description>Determines where on the local filesystem an DFS data node
should store its blocks. If this is a comma-delimited
list of directories, then data will be stored in all named
directories, typically on different devices.
Directories that do not exist are ignored.
</description>
</property>
Direktori untuk Name node.
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/data/dfs/name</value>
<description>Determines where on the local filesystem the DFS name node
should store the name table. If this is a comma-delimited list
of directories then the name table is replicated in all of the
directories, for redundancy. </description>
</property>
Daftar mesin yang terlibat terdaftar di dalam file hadoop/conf/masters dan hadoop/conf/slaves. Berikut ini adalah isi dari masing-masing file.
Isi hadoop/conf/masters
node16
Isi hadoop/conf/slaves
node15
node16
Dapat dilihat kalau selain menjadi pengatur, mesin node16 juga menjadi pekerja.
Karena job menuju Hadoop akan dikirim melalui Sun Grid Engine (SGE), maka perlu diatur agar job Hadoop dijalankan di mesin yang memiliki instalasi Hadoop. Solusi yang diambil adalah dengan membuat sebuah queue baru di SGE yang hanya berisi 1 buah mesin, yaitu node16. Nama queue yang dibuat adalah hadoop.
Pada saat SGE mengeksekusi sebuah job, user yang menjalankan job tersebut akan dimasukkan ke dalam sebuah grup sementara. Daftar group id yang digunakan dapat dilihat pada konfigurasi SGE (jalankan qconf -mconf dan lihat nilai untuk gid_range). Jika informasi grup ini tidak ditemukan dalam sistem manajemen user pada mesin (seperti /etc/group maupun LDAP), maka Hadoop tidak akan bekerja.
Solusi yang diambil adalah dengan menambahkan daftar grup sementara yang akan digunakan oleh SGE. Pada konfigurasi SGE yang ada, nomor grup yang digunakan bernilai antara 20000 dan 20100. Oleh karena itu akan ada 101 buah grup yang perlu ditambahkan. Daftar grup ini dimasukkan ke dalam LDAP agar dapat dibaca juga oleh seluruh mesin yang ada.
Berikut ini adalah potongan LDIF yang digunakan.
dn: cn=sgegroup-GID,ou=Groups,ou=Hastinapura,ou=GCRG,o=Universitas Indonesia,c=ID
objectClass: posixGroup
objectClass: top
cn: sgegroup-GID
gidNumber: GID
Ada 101 buah data dan GID pada potongan LDIF di atas bernilai antara 20000 dan 20100
Nyalakan DFS dan MapReduce server dari node16. Hadoop pada mesin lain akan otomatis menyala.
$ /app/hadoop/bin/start-dfs.sh
$ /app/hadoop/bin/start-mapred.sh
Uji coba dilakukan dengan menjalankan aplikasi penghitung kata yang disediakan oleh Hadoop. Dokumen yang digunakan adalah 7 buah dokumen dari Project Gutenberg yang tertulis di [2].
Script di bawah ini berisi urutan eksekusi aplikasi dalam Hadoop yang juga dapat dijalankan melalui portal.
#!/bin/bash
PATH=$PATH:/app/hadoop/bin
echo "## copy"
hadoop dfs -copyFromLocal /export/home/hadoop/test/gutenberg input
echo "## map reduce"
hadoop jar /export/home/hadoop/test/examples.jar wordcount input output
echo "## ls"
hadoop dfs -ls output
echo "## save"
hadoop dfs -copyToLocal output/part-00000 hadoop-output.txt
echo "## remove"
hadoop dfs -rmr input output
Script di atas juga sudah terdapat di dalam Hastinapura pada /export/home/fajran-grid/test-hadoop.sh. Masukkan nama berkas tersebut ke dalam isian “Executable” pada portlet “Generic Job”. Isi hadoop pada isian “Queue Name”. Klik tombol submit untuk mengirim job.
Setelah selesai, sebuah file bernama hadoop-output.txt dapat ditemukan di dalam home directory.
Comments
Post new comment