Menjalankan Aplikasi Hadoop MapReduce dengan Eclipse Java SE
TUTORIAL INI SUDAH DIPERBAHARUI DI "Membuat dan Menjalankan Aplikasi Hadoop MapReduce dengan Intellij IDEA pada OS Windows"
Untuk menjalankan suatu aplikasi MapReduce pada Hadoop, kita mesti
membuat file jar (namaAplikasi.jar) dari aplikasi tersebut. Sudah tentu source
code dari aplikasi yang akan kita jalankan itu harus di compile dulu, class
file hasil compilasi itulah yang dikompres dalam satu jar file.
Bila aplikasi yang kita jalankan masih dalam tahap
pengembangan/percobaan, tentu akan cukup merepotkan jika harus membuat jar file
tiap kali aplikasi tersebut akan dijalankan.
Oleh karena itu, penggunaan Eclipse dalam proses pengembangan
aplikasi MapReduce dapat dijadikan sebagai satu alternatif yang cukup praktis
dan feseable. Proses pengembangan aplikasi jadi lebih mudah.
Tool yang dibutuhkan:
1. Eclipse IDE for Java Developer, dapat didownload dari http://www.eclipse.org/downloads/
2. Cygwin, dapat didownlaod dari http://cygwin.com/install.html
3. Hadoop-0.20.2.tar.gz file, dapat di-download dari http://hadoop.apache.org/
4. Ant Library (ant.jar), dapat di-download dari http://ant.apache.org/bindownload.cgi
dengan nama file apache-ant-1.8.4-bin.zip
(pilih versi yang terbaru).
Instal Hadoop di
Eclipse
Setelah tools yang dibutuhkan lengkap dan terinstal dengan normal,
selanjutnya ikuti langkah-langkah berikut meng-instal / mengimpor Hadoop ke
Eclipse :
1. Buat New Java Project pada Eclipse dan beri nama hadoop-0.20.2
2. Import hadoop-0.20.2.tar.gz yang telah di-download ke project
hadoop-0.20.2 yang baru dibuat. Caranya : Klik menu File > Import >
General > Archieve File dan pilih file hadoop-0.20.2.tar.gz (lihat Gambar 1.01)
3. Copy ant.jar dari file apache-ant-1.8.4-bin.zip yang telah
di-extract, dan paste pada folder lib dari project hadoop-0.20.2 (hadoop-0.20.2/hadoop-0.20.2/lib/).
4. Buka file hadoop-0.20.2/.classpath dan ganti isinya dengan code xml
dibawah ini : (Hal ini dilakukan untuk menambahkan semua source folders
dan libraries yang dibutuhkan ke project hadoop-0.20.2 yang telah dibuat.)
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="hadoop-0.20.2/src/core"/>
<classpathentry kind="src" path="hadoop-0.20.2/src/mapred"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="lib" path="hadoop-0.20.2/lib/commons-logging-1.0.4.jar"/>
<classpathentry kind="lib" path="hadoop-0.20.2/lib/xmlenc-0.52.jar"/>
<classpathentry kind="lib" path="hadoop-0.20.2/lib/commons-net-1.4.1.jar"/>
<classpathentry kind="lib" path="hadoop-0.20.2/lib/kfs-0.2.2.jar"/>
<classpathentry kind="lib" path="hadoop-0.20.2/lib/jets3t-0.6.1.jar"/>
<classpathentry kind="lib" path="hadoop-0.20.2/lib/servlet-api-2.5-6.1.14.jar"/>
<classpathentry kind="lib" path="hadoop-0.20.2/lib/jetty-6.1.14.jar"/>
<classpathentry kind="lib" path="hadoop-0.20.2/lib/jetty-util-6.1.14.jar"/>
<classpathentry kind="lib" path="hadoop-0.20.2/lib/commons-codec-1.3.jar"/>
<classpathentry kind="lib" path="hadoop-0.20.2/lib/log4j-1.2.15.jar"/>
<classpathentry kind="lib" path="hadoop-0.20.2/lib/commons-cli-1.2.jar"/>
<classpathentry kind="lib" path="hadoop-0.20.2/lib/ant.jar"/>
<classpathentry kind="lib" path="hadoop-0.20.2/lib/commons-httpclient-3.0.1.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
5. Refresh project hadoop-0.20.2. Caranya : klik kanan pada project
hadoop-0.20.2 dan pilih “Refresh”.
Proses instal Hadoop Standalone pada Eclipse telah selesai dan
Hadoop telah siap untuk menjalankan aplikasi MapReduce. Sekarang kita sudah
bisa membuat aplikasi MapReduce dan menjalankannya dengan Eclipse.
Menjalankan Program
WordCount
Selanjutnya kita coba menjalankan satu aplikasi MapReduce sederhana
yang dinamakan WordCount. Aplikasi WordCount ini sesuai dengan namanya
berfungsi untuk menghitung jumlah tiap kata dalam satu atau sekumpulan text
file yang terdapat dalam folder input.
1. Buat New Java Project dengan nama WordCount. Klik Next (jangan
klik Finish dulu) pada New Java Project dialog
dan lakukan setting sbb (Gambar 1.02 ) :
a. Tambahkan
project hadoop-0.20.2 pada tab Projects.
b. Tambahkan
hadoop-0.20.2/hadoop-0.20.2/lib/commons-cli-1.2.jar pada tab Libraries.
Jika sudah terlanjur klik Finish, tak perlu khawatir. Lakukan
setting sbb :
c. Klik
kanan pada project WordCount >Properties.
d. Pada
dialog WordCount Properties klik Java Build Path. Kemudian lakukan setting
seperti pada point a. dan b.
diatas.
2. Lakukan setting pada Run Configuration dengan langkah-langkah
sbb:
a. Klik Run
pada menu utama dan pilih Run Configuration.
b. Pada
dialong Run Configuration klik tab Environment > New
c. Pada
dialog New Environment Variable, set Name = Path, Value = c:\cygwin\bin terus klik OK. Pastikan Path sudah tertera pada kolom Variable dan
c:\cygwin\bin pada kolom Value.
3. Buat file baru dengan nama log4j.properties dan taruh di folder
src pada project WordCount (WordCount/src/log4j.properties). File ini berfungsi
untuk menampilkan logs Hadoop pada console Eclipse. Copy dan Paste code berikut
pada log4j.properties.
log4j.rootLogger=INFO,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
4. Buat Class baru dengan nama WordCount.java dan simpan di folder
src pada project WordCount (WordCount/src/WordCount.java). Selanjutnya, Copy
and Paste java source code dibawah ini :
import
java.io.IOException;
import
java.util.StringTokenizer;
import
org.apache.hadoop.conf.Configuration;
import
org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import
org.apache.hadoop.io.Text;
import
org.apache.hadoop.mapreduce.Job;
import
org.apache.hadoop.mapreduce.Mapper;
import
org.apache.hadoop.mapreduce.Reducer;
import
org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import
org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import
org.apache.hadoop.util.GenericOptionsParser;
public class WordCount
{
public static class
TokenizerMapper
extends
Mapper<Object, Text, Text, IntWritable>{
private final static
IntWritable one = new
IntWritable(1);
private Text word = new Text();
public void
map(Object key, Text value, Context context
) throws
IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while
(itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
public static class
IntSumReducer
extends
Reducer<Text,IntWritable,Text,IntWritable> {
private
IntWritable result = new
IntWritable();
public void
reduce(Text key, Iterable<IntWritable> values,
Context context
) throws
IOException, InterruptedException {
int sum = 0;
for (IntWritable
val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
public static void
main(String[] args) throws Exception {
Configuration conf = new
Configuration();
String[] otherArgs = new
GenericOptionsParser(conf, args).getRemainingArgs();
if
(otherArgs.length != 2) {
System.err.println("Usage:
wordcount <input> <output>");
System.exit(2);
}
Job job = new Job(conf,
"word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new
Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new
Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 :
1);
}
}
5. Buat folder baru pada project WordCount dengan nama input
(WordCount/input) dan tempatkan satu atau beberapa text file yang akan diproses
dengan program MapReduce WordCount.java.
6. Klik menu Run pada main menu Eclipse, dan pilih Run
Configurations. Pada dialog Run Configurasions klik tab Arguments dan
tambahkan: input output pada Program
Arguments(A) dan klik Apply. Kemudian klik Run.
7. Jika berhasil / tak ada error, maka aplikasi MapReduce
WordCount.java akan menampilkan logs sebagai berikut pada console Eclipse :
13/01/25
12:06:58 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker,
sessionId=
13/01/25
12:06:58 WARN mapred.JobClient: No job jar file set. User classes may not be found. See
JobConf(Class) or JobConf#setJar(String).
13/01/25
12:06:58 INFO input.FileInputFormat: Total input paths to process : 1
13/01/25 12:06:59
INFO mapred.JobClient: Running job: job_local_0001
13/01/25
12:06:59 INFO input.FileInputFormat: Total input paths to process : 1
13/01/25
12:06:59 INFO mapred.MapTask: io.sort.mb = 100
13/01/25
12:06:59 INFO mapred.MapTask: data buffer = 79691776/99614720
13/01/25
12:06:59 INFO mapred.MapTask: record buffer = 262144/327680
13/01/25
12:06:59 INFO mapred.MapTask: Starting flush of map output
13/01/25
12:06:59 INFO mapred.MapTask: Finished spill 0
13/01/25
12:06:59 INFO mapred.TaskRunner: Task:attempt_local_0001_m_000000_0 is done.
And is in the process of commiting
13/01/25
12:06:59 INFO mapred.LocalJobRunner:
13/01/25
12:06:59 INFO mapred.TaskRunner: Task 'attempt_local_0001_m_000000_0' done.
13/01/25
12:06:59 INFO mapred.LocalJobRunner:
13/01/25 12:06:59
INFO mapred.Merger: Merging 1 sorted segments
13/01/25
12:06:59 INFO mapred.Merger: Down to the last merge-pass, with 1 segments left
of total size: 24735 bytes
13/01/25
12:06:59 INFO mapred.LocalJobRunner:
13/01/25
12:06:59 INFO mapred.TaskRunner: Task:attempt_local_0001_r_000000_0 is done.
And is in the process of commiting
13/01/25
12:06:59 INFO mapred.LocalJobRunner:
13/01/25
12:06:59 INFO mapred.TaskRunner: Task attempt_local_0001_r_000000_0 is allowed
to commit now
13/01/25
12:06:59 INFO output.FileOutputCommitter: Saved output of task
'attempt_local_0001_r_000000_0' to out
13/01/25
12:06:59 INFO mapred.LocalJobRunner: reduce > reduce
13/01/25
12:06:59 INFO mapred.TaskRunner: Task 'attempt_local_0001_r_000000_0' done.
13/01/25
12:07:00 INFO mapred.JobClient: map 100%
reduce 100%
13/01/25
12:07:00 INFO mapred.JobClient: Job complete: job_local_0001
13/01/25
12:07:00 INFO mapred.JobClient: Counters: 12
13/01/25
12:07:00 INFO mapred.JobClient:
FileSystemCounters
13/01/25
12:07:00 INFO mapred.JobClient:
FILE_BYTES_READ=117145
13/01/25
12:07:00 INFO mapred.JobClient:
FILE_BYTES_WRITTEN=121371
13/01/25
12:07:00 INFO mapred.JobClient:
Map-Reduce Framework
13/01/25
12:07:00 INFO mapred.JobClient:
Reduce input groups=1823
13/01/25
12:07:00 INFO mapred.JobClient:
Combine output records=1823
13/01/25
12:07:00 INFO mapred.JobClient: Map
input records=855
13/01/25
12:07:00 INFO mapred.JobClient:
Reduce shuffle bytes=0
13/01/25
12:07:00 INFO mapred.JobClient:
Reduce output records=1823
13/01/25
12:07:00 INFO mapred.JobClient:
Spilled Records=3646
13/01/25
12:07:00 INFO mapred.JobClient: Map
output bytes=45926
13/01/25
12:07:00 INFO mapred.JobClient:
Combine input records=3946
13/01/25
12:07:00 INFO mapred.JobClient: Map
output records=3946
13/01/25
12:07:00 INFO mapred.JobClient:
Reduce input records=1823
8. Hasilnya akan disimpan di folder output pada project WordCount
(WordCount/output/part-r-00000). Jika folder output belum muncul, klik kanan
pada project WordCount dan pilih Refresh.
Dapat dipastikan folder output akan muncul dan berisi file yang
dihasilkan oleh WordCount.java.
Demikian, selamat mencoba.
Referensi :
1. http://shuyo.wordpress.com/2011/03/08/hadoop-development-environment-with-eclipse/
2. "パターンでわかるHadoop
MapReduce ", 三木 大知, SHOEISHA
2011.
Comments
Pada bagian Install hadoop di Eclipse, saya melakukan seperti yang disebutkan dengan catatan:
1. di hadoop.apache.org (tepatnya pada http://mirror.symnds.com/software/Apache/hadoop/common/), saya tidak menemukan file hadoop-0.20.2.tar.gz sehingga saya menggunakan yang terbaru yaitu hadoop-2.4.1/
2. Saya sudah mengganti code xml dengan terlebih dahulu memodifikasi penamaan hadoop menjadi seri 2.4.1
Mengapa meski setelah dimodifikasi, tetap error? Apa saja yang mungkin menjadi permassalahannya?
Terima kasih
Setelah sy telusuri, akhirnya sy temukan ada satu (mungkin beberapa) elemen Hadoop yg tidak compatible dgn Windows (sy gunakan windows 7 64bit). Kemudian sy temukan juga dokumentasi yg menyatakan bahwa memang tidak memungkinkan unjuk menjalankan Hadoop 1.4 dengan Windows Eclipse (saat itu versi stabil yg bisa dijalankan dgn Windows Eclipse hanya Hadoop 0.20.2).
Solusi saya: Sejak saat itu akhirnya saya gunakan Eclipse dgn OS Linux (CentOS 6.2) untuk menjalankan Hadoop dan tak pernah lagi menggunakan Eclipse di Windows.
Demikian jawaban dari saya, mohon maaf informasi ini belum sempat sy muat di blog.
Menjalankan Program WordCount, berhenti di langkah:
2. Lakukan setting pada Run Configuration dengan langkah-langkah sbb:
a. Klik Run pada menu utama dan pilih Run Configuration.
b. Pada dialong Run Configuration klik tab Environment > New
sy cari kok tdk ada tab Environment? kenapa ya kira2.
thanks
Run Configuration>Java Application
6. Klik menu Run pada main menu Eclipse, dan pilih Run Configurations. Pada dialog Run Configurasions klik tab Arguments dan tambahkan: input output pada Program Arguments(A) dan klik Apply. Kemudian klik Run.
Kita liat sikon dulu mas, berhubung konsep Big Data dan sgala teknologi pendukungnya kan masih termasuk barang baru di negeri kita. Moga2 sih peminatnya makin berkembang, bukan hanya di kalangan akademisi / peneliti, tp bisa bner2 diaplikasikan di perusahaan2 / instansi dalam negeri. Sy pernah dapat info, katanya BI sdh mulai terapkan konsep Big Data analysis ini.
Jika Anda tetap bersikeras ingin pake Windows, saya sarankan utk instal Virtual Machine dgn OS Linux di PC Windows Anda, kemudian membuat virtual network antar sesama linux virtual machine tsb. Anda bisa pake VMWare atau VirtualBox.
Terimakasih
terima kasih atas kunjungannya.
Saya belum pernah menerapkan algoritma clustering dalam analysis big data, tapi saya pernah menerapkan beberapa algorithma machine learning untuk data mining. Berkaitan dengan situs yang menyediakan data set untuk machine learning, saya kira UCI Machine Learning sudah menyediakan cukup banyak data. Datanya ada yg dapat didownload dalam format text file, sperti pada url ini: https://archive.ics.uci.edu/ml/machine-learning-databases/bag-of-words/
Sbg tahap awal dlm analisis big data, mungkin bisa dimulai dengan analisa sederhana dulu seperti pengelompokan / klasifikasi artikel / essay berdasarkan jumlah kata (frekwensi kemunculan) kata tertentu dalam essay / artikel tersebut. Bisa memulainya dengan algorithma yang mudah dulu seperti algorithma wordcount menggunakan MapReduce seperti pada artikel di blog saya ini.
Selain UCI Machine Learning, Common Crawl (https://commoncrawl.org/what-you-can-do/) juga menyediakan data yang dapat didownload secara gratis.
Selamat mencoba…!
Salam mas,
Format output file MapReduce by default adalah part-x-yyyyy
dalam hal ini:
x adalah 'm' atau 'r', bergantung pada job yang telah diselesaikan, apakah berupa job Map saja (m), atau Reduce (r).
y adalah nomor task Mapper atau Reducer (zero based).
Misal, jika suatu job MapReduce memiliki 16 Reducers, maka nama output filenya adalah dari part-r-00000 s.d. part-r-00015 (satu untuk tiap task Reducer).
Jadi, output dari wordcount yang hanya terdiri atas part-r-00000 artinya Job MapReduce tersebut hanya terdiri atas satu task reducer.
Menjalankan Program WordCount, berhenti di langkah:
b. Tambahkan hadoop-0.20.2/hadoop-0.20.2/lib/commons-cli-1.2.jar pada tab Libraries.
di saya engga ada file commons-cli nya kenapa ya?
apa karea saya pake hadoop yang-2.7.3.
terimaksih sebelumnya
kenapa ya?