12 2 Teknologi dan Tools Big Data Bagian 3 Big Data L1617 v4

  Teknologi dan Tools Big Data

  

Pokok Bahasan

  1. Running Code Program Pada Hadoop Single/Multi Node Cluster Pada Linux: o

Klasifikasi: NB, KNN

  o

Clustering: K-Means

  o

WordCount: Load+Simpan Hasil di HDFS Folder ( Pert. Ke- 12-13 )

  o

WordCount: Load+Simpan Hasil di NoSQL (MongoDB)

  o Movie Ratings: Load di HDFS Folder+Simpan Hasil di NoSQL (MongoDB)

  2. Studi Kasus

Klasifikasi: NB

   Siapkan semua file *.java (dari algoritma Naive_Bayes_Classifier_MapReduce, link kode: https://goo.gl/CEdr2R ) untuk dicompile ke *.jar:

Klasifikasi: NB

   tidak terdapat package

Jika , langsung file *.java tersebut dicopy-paste ke folder /usr/local/hadoop

  NBCReduce.java NBCDriver.java NBCMap.java

Klasifikasi: NB

   Jika ada package-nya, misal “package comratingbymovies.nidos;”, maka “comratingbymovies.nidos” masing-masing akan menjadi folder “comratingbymovies”, lalu “nidos”.

  RatingCounterByMovieMongo.java package comratingbymovies.nidos; import org.apache.hadoop.conf.Configuration; ..... ... public class RatingCounterByMovieMongo extends Configured implements Tool{ public int run(String[] args) throws Exception {

  .... ..

  System.exit(res); }

  }

   Maka di folder /usr/local/hadoop comratingbymovies/nidos “ ”, akan ada folder “ ” yang berisi file

  “RatingCounterByMovieMongo.java”, dan file *.java

Klasifikasi: NB

   /usr/local/hadoop

  Jika pada file *.java tidak ada package-nya, maka di folder “ ”, akan langsung diisi dengan semua file *.java tersebut

  Copy-Paste

Klasifikasi: NB

   Lakukan perintah (Membuat file *.class):

  nidos@master:/usr/local/hadoop$ bin/hdfs com.sun.tools.javac.Main *.java Note: NBCDriver.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details.

Klasifikasi: NB

   Lakukan perintah (Membuat file *.class  *.jar):

  nidos@master:/usr/local/hadoop$ bin/hdfs com.sun.tools.javac.Main *.java Note: NBCDriver.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details.

  Untuk mengecek kode yang deprecated dimana saja Atau bisa dengan nidos@master:/usr/local/hadoop$ bin/hdfs com.sun.tools.javac.Main -Xlint:deprecation *.java nidos@master:/usr/local/hadoop$ jar cf NB.jar *.class

  NBCDriver.java:16: warning: [deprecation] Job(Configuration) in Job has been deprecated Job job = new Job(conf); ^ 1 warning

  Buat folder HDFS, “nb” dan “input” nidos@master:/usr/local/hadoop$ bin/hdfs dfs -mkdir /user/nidos/nb nidos@master:/usr/local/hadoop$ bin/hdfs dfs -mkdir /user/nidos/input copyFromLocal, misal file“1.txt” ada difolder

  • “/home/nidos/Desktop/kode/Naive_Bayes_Classifier_MapReduce/input”  “1.txt” sebagai data training

   Hasil 1 of 2:

  Klasifikasi: NB

   Hasil 2 of 2:

  Klasifikasi: NB

  Klasifikasi: KNN

   Siapkan semua file *.java (dari algoritma KNN, link kode: https://goo.gl/N0QjY8 ) untuk dicompile ke *.jar:

Clustering: K-Means

  

Jika pada file *.java yang ada package-nya sesuai penjelasan slide sebelumnya,

  /usr/local/hadoop

  maka di folder “ ”, akan langsung diisi dengan folder “com” tersebut

  Copy-Paste

Clustering: K-Means

   Lakukan perintah (Membuat file *.class):

  nidos@master:/usr/local/hadoop$ bin/hdfs com.sun.tools.javac.Main com/clustering/mapreduce/*.java com/clustering/model/*.java Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details.

Clustering: K-Means

   Lakukan perintah (Membuat file *.class  *.jar):

  nidos@master:/usr/local/hadoop$ jar cf KMeans.jar com/clustering/mapreduce/*.class com/clustering/model/*.class Main Class

   Hasil 1 of 2:

  Clustering: K-Means

  Clustering: K-Means

   Siapkan semua file *.java (dari algoritma K-Means, link kode: https://goo.gl/N0QjY8 ) untuk dicompile ke *.jar:

Clustering: K-Means

  

Jika pada file *.java yang ada package-nya sesuai penjelasan slide sebelumnya,

  /usr/local/hadoop

  maka di folder “ ”, akan langsung diisi dengan folder “com” tersebut

  Copy-Paste

Clustering: K-Means

   Lakukan perintah (Membuat file *.class):

  nidos@master:/usr/local/hadoop$ bin/hdfs com.sun.tools.javac.Main com/clustering/mapreduce/*.java com/clustering/model/*.java Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details.

Clustering: K-Means

   Lakukan perintah (Membuat file *.class  *.jar):

  nidos@master:/usr/local/hadoop$ jar cf KMeans.jar com/clustering/mapreduce/*.class com/clustering/model/*.class Main Class

   Hasil 1 of 2:

  Clustering: K-Means

   Hasil 2 of 2:

  Clustering: K-Means

NoSQL dan MongoDB

  

NoSQL (Not Only SQL, atau maknanya kurang lebih adalah "tidak

hanya SQL") adalah kelas yang luas dari sistem manajemen basis data yang di identifikasikan tidak mematuhi aturan pada model sistem manajemen basis data relasional yang banyak digunakan.

  

 NoSQL tidak dibangun terutama dengan table dan umumnya tidak

menggunakan SQL untuk memanipulasi data.

  

Teorema CAP menyatakan bahwa, tidak mungkin untuk sebuah

sistem komputer terdistribusi secara bersamaan, memberikan ketiga jaminan sebagai berikut : o

  C onsistency: Semua node melihat data yang sama dalam waktu yang bersamaan. o

  A vailability: Jaminan pada setiap permintaan, menerima

   Visual NoSQL System:

  NoSQL dan MongoDB

NoSQL dan MongoDB

  

MongoDB merupakan open-source document database dari keluarga

NoSQL, yang memberikan kinerja tinggi, high availability, dan automatic scaling.

   Document, Data pada MongoDB dikenal sebagai document. MongoDB menggunakan BSON (Binary JSON) serialization sebagai format penyimpanan data untuk document, mirip dengan JSON (JavaScript Object Notation). Contoh document:

   Contoh Penggunaan

  { "_id": ObjectId('58520a516a2ea8e208cd6c26'), "name": "Employee One", "salary": 20000

  }

  SQL: SELECT *

  MongoDB: db.employeedetails.find(

SQL Vs MongoDB

   SQL Vs MongoDB:

SQL MongoDB

  database database table collection

row document

column field index Index table joins Embedded documents dan linking primary key primary key

MongoDB dan Big Data

   Case Study: Mengolah data dan menyimpan hasilnya ke MongoDB: o

  Wordcount o

  Rating By Movie

Note: Secara default, Map Reduce akan menyimpan hasilnya di file teks biasa di

HDFS. Hal ini sangat tidak praktis jika memang hasilnya ingin dimasukkan ke

NoSQL supaya mudah dibaca.

  (Save hasil di MongoDB)

   Lakukan perintah (Install MongoBD untuk simpan file hasil running kode program di Hadoop):

  nidos@master:~$ sudo apt-get install mongodb nidos@master:~$ sudo apt-get update nidos@master:~$ sudo service mongodb start start: Job is already running: mongodb nidos@master:~$ mongo MongoDB shell version: 2.4.9 connecting to: test Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see http://docs.mongodb.org/ Questions? Try the support group http://groups.google.com/group/mongodb-user > use mydb; switched to db mydb > db; mydb > db.employeedetails.insert({name:"Employee One",salary:20000}); > db.employeedetails.find();

  (Install GUI MongoDB)

   Lakukan perintah:

  nidos@master:~$ sudo apt-get install curl nidos@master:~$ curl http://packages.litixsoft.de/installer.sh | sh Enter ´sudo ./bbs-installer.sh´ to start installation... nidos@master:~$ sudo ./bbs-installer.sh nidos@master:~$ sudo ./bbs-installer.sh

  BaboonStack Installer for Linux/MacOS Local Packet found... Install baboonstack-v1.5.1-linux-x64.tar.gz... Create /opt/litixsoft/baboonstack... Extract Files... Execute Installscript bbs/lxscript.sh...

SUCCESS: Enter ´bbs´ for package updates

  Install MongoDB v2.6.7?: [Y/n] n  Jika sudah Install Install RedisIO v2.8.4?: [Y/n] Y Install Node.js v0.12.0?: [Y/n] Y Activate Io.js support?: [Y/n] Y lxManager for BaboonStack - Litixsoft GmbH 2015 Upgrade successfull...

  (Install GUI MongoDB)

   Lakukan perintah:

  nidos@master:~/mms-v1.9.4-community-linux-x86_64$ cd lx-mms nidos@master:~/mms-v1.9.4-community-linux-x86_64/lx-mms$ sudo nano config.js

   Lakukan perintah:

  (Install GUI MongoDB) nidos@master:~/mms-v1.9.4-community-linux-x86_64/lx-mms$ sudo ./start

   Lakukan perintah (http://127.0.0.1:3333/):

  (Install GUI MongoDB) nidos@master:~/mms-v1.9.4-community-linux-x86_64/lx-mms$ sudo ./start

  (Install GUI MongoDB)

   Lakukan perintah (http://127.0.0.1:3333/):

  nidos@master:~/mms-v1.9.4-community-linux-x86_64/lx-mms$ sudo ./start Create/Edit connection Name: ..........., misal “test” Server connection*:

  [username:password@]host1[:port1][,host2[:port2],....,[,hostN[:portN]]], misal “localhost”

   Lakukan perintah (http://127.0.0.1:3333/):

  (Install GUI MongoDB) nidos@master:~/mms-v1.9.4-community-linux-x86_64/lx-mms$ sudo ./start

   Lakukan perintah (http://127.0.0.1:3333/):

  (Install GUI MongoDB) nidos@master:~/mms-v1.9.4-community-linux-x86_64/lx-mms$ sudo ./start

  (Hadoop + MongoDB)

   Lakukan perintah:

  nidos@master:/usr/local/hadoop$ sudo apt-get install git nidos@master:/usr/local/hadoop$ git clone https://github.com/mongodb/mongo-hadoop nidos@master:/usr/local/hadoop$ cd mongo-hadoop nidos@master:/usr/local/hadoop/mongo-hadoop$ ./gradlew jar

   Lakukan perintah:

  (Hadoop + MongoDB) Copy file “mongo-hadoop-core-2.0.1.jar” dari /usr/local/hadoop/mongo-hadoop/core/build/libs

  File hasil compile dari slide sebelumnya:

  nidos@master:/usr/local/hadoop/mongo-hadoop$ ./gradlew jar

  (Hadoop + MongoDB)

   Lakukan perintah: dan

  Download file “mongo-java-driver” dari li pilih versi terbaru, misal “mongo-java-driver-3.4.0.jar”

  (Hadoop + MongoDB)

   Lakukan perintah:

  Setelah selesai build, copy-kan file jars (“mongo-hadoop-core-2.0.1.jar” dan “mongo-java-driver-3.4.0.jar”) ke directory lib pada setiap node (master, node1, node2, node3) di hadoop cluster. Berikut lokasinya yang bergantung pada versi Hadoop:

  $HADOOP_PREFIX/lib/ $HADOOP_PREFIX/share/hadoop/mapreduce/ $HADOOP_PREFIX/share/hadoop/lib/

Misal 2 file jar tersebut sudah disiapkan di “/home/nidos/Desktop/kode/WordCountMongo/” nidos@master:~/Desktop/kode/WordCountMongo$ ls

  mongo-hadoop-core-2.0.1.jar WordCountMongo.java mongo-java-driver-3.4.0.jar Untuk PC master: nidos@master:~$ cp /home/nidos/Desktop/kode/WordCountMongo/mongo* /usr/local/hadoop/lib nidos@master:~$ cp /home/nidos/Desktop/kode/WordCountMongo/mongo* /usr/local/hadoop/share/hadoop/mapreduce nidos@master:~$ mkdir r /usr/local/hadoop/share/hadoop/lib nidos@master:~$ cp /home/nidos/Desktop/kode/WordCountMongo/mongo* /usr/local/hadoop/share/hadoop/lib Untuk PC node1: Lakukan juga pada node2 dan node3 nidos@node1:~$ scp nidos@master:/home/nidos/Desktop/kode/WordCountMongo/mongo* /usr/local/hadoop/lib nidos@node1:~$ scp nidos@master:/home/nidos/Desktop/kode/WordCountMongo/mongo*

  /usr/local/hadoop/share/hadoop/mapreduce

  (Hadoop + MongoDB)

   Lakukan perintah:

  Untuk PC node3: nidos@node3:~$ scp nidos@master:/home/nidos/Desktop/kode/WordCountMongo/mongo* /usr/local/hadoop/lib nidos@node3:~$ scp nidos@master:/home/nidos/Desktop/kode/WordCountMongo/mongo* /usr/local/hadoop/share/hadoop/mapreduce nidos@node3:~$ mkdir r /usr/local/hadoop/share/hadoop/lib nidos@node3:~$ scp nidos@master:/home/nidos/Desktop/kode/WordCountMongo/mongo* /usr/local/hadoop/share/hadoop/lib

   Lakukan perintah:

  (Save hasil di MongoDB) Buat DB “testmr”

  (Save hasil di MongoDB)

   Lakukan perintah:

  Buat Collecton “in” on DB “testmr” Klik kanan pada DB

  “testmr”, lalu pilih “Add collection..”, beri nama misal “in”, lalu klik Save

  (Save hasil di MongoDB)

   Lakukan perintah:

  Import file “*.json” as collection pada DB “testmr” ke collection “in” sebagai file input untuk diproses oleh WordCountMongo.java

  (Save hasil di MongoDB)

   Lakukan perintah:

Import file “*.json” as collection pada DB “testmr” sebagai file input untuk diproses oleh WordCountMongo.java

  in.json  tidak standar Mongo in_standard.json  standar Mongo { "x" : "hello world", "_id" : { "$oid" : "5856c34689b0ce4a6e000001" } }

  {"x": "hello world"}, { "x" : "nice to meet you", "_id" : { "$oid" : "5856c34689b0ce4a6e000002" } }

  {"x": "nice to meet you"}, { "x" : "good to see you", "_id" : { "$oid" : "5856c34689b0ce4a6e000003" } }

  {"x": "good to see you"}, { "x" : "world war 2", "_id" : { "$oid" : "5856c34689b0ce4a6e000004" } }

  {"x": "world war 2"}, { "x" : "see you again", "_id" : { "$oid" : "5856c34689b0ce4a6e000005" } }

  {"x": "see you again"}, { "x" : "bye bye", "_id" : { "$oid" : "5856c34689b0ce4a6e000006" } }

  {"x": "bye bye"} Untuk file “in.json”  tidak standar Mongo:

Klik kanan pada database atau DB “testmr”, lalu pilih “Import documents...”, lalu Isikan Name of destination- collection*, misal “in”, lalu pilih “Import documents from textbox”, lalu isikan pada “Text Input”, dengan:

  [{"x": "hello world"}, {"x": "nice to meet you"}, {"x": "good to see you"}, {"x": "world war 2"}, {"x": "see you again"}, {"x": "bye bye"}]

   Lakukan perintah:

  (Save hasil di MongoDB) Untuk file “in.json”  tidak standar Mongo:

   Lakukan perintah:

  (Save hasil di MongoDB) Untuk file “in.json”  tidak standar Mongo:

  (Save hasil di MongoDB)

   Klik kanan pada database atau DB

  Lakukan perintah (

  “testmr”, lalu pilih “Import documents...”, lalu Isikan Name of destination-collection*, misal “in”, lalu klik Browse..

  ):

  Untuk file in_standard.json  standar Mongo

   Lakukan perintah (klik Open):

  (Save hasil di MongoDB) in_standard.json  standar Mongo

   Lakukan perintah (klik Import):

  (Save hasil di MongoDB) in_standard.json  standar Mongo

   Lakukan perintah (hasil klik Import):

  (Save hasil di MongoDB) in_standard.json  standar Mongo

  (Save hasil di MongoDB)

  

Siapkan file *.java (misal WordCountMongo.java Part 1 of 2) untuk dicompile ke *.jar:

import java.util.*; import java.io.*; import org.bson.*; import com.mongodb.hadoop.MongoInputFormat; import com.mongodb.hadoop.MongoOutputFormat; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.io.*; import org.apache.hadoop.mapreduce.*; /**

  • test.in db.insert( { x: "eliot was here" } ) db.insert( { x: "eliot is here" } ) db.insert( { x: "who is here" } )
  • / public class WordCountMongo { public static class TokenizerMapper extends Mapper<Object, BSONObject, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, BSONObject value, Context context )

    throws IOException, InterruptedException {

    System.out.println( "key: " + key );

  (Save hasil di MongoDB)

  

Siapkan file *.java (misal WordCountMongo.java Part 2 of 2) untuk dicompile ke *.jar:

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(); conf.set( "mongo.input.uri" , "mongodb://localhost/testmr.in" ); conf.set( "mongo.output.uri" , "mongodb://localhost/testmr.out" ); @SuppressWarnings("deprecation") Job job = new Job(conf, "word count"); job.setJarByClass(WordCountMongo.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); job.setInputFormatClass( MongoInputFormat.class ); job.setOutputFormatClass( MongoOutputFormat.class ); System.exit(job.waitForCompletion(true) ? 0 : 1);

  (Save hasil di MongoDB)

  

Menghitung Kemunculan Kata dalam file dokumen:

o file “WordCountMongo.java”:

  (Save hasil di MongoDB)

   WordCountMongo.java dicompile ke *.jar: o

  Lakukan hal berikut:

  nidos@master:~$ cd /usr/local/hadoop nidos@master:/usr/local/hadoop$ cp /home/nidos/Desktop/kode/WordCountMongo/WordCountMongo.java /usr/local/hadoop nidos@master:/usr/local/hadoop$ bin/hdfs com.sun.tools.javac.Main WordCountMongo.java

  Jika muncul error:

  nidos@master:/usr/local/hadoop$ bin/hdfs com.sun.tools.javac.Main WordCountMongo.Java error: Class names, 'WordCountMongo.Java', are only accepted if annotation processing is explicitly requested 1 error

  Solusi

  : ubah “WordCountMongo.Java”  “WordCountMongo.java”

  (Save hasil di MongoDB)

   WordCountMongo.java dicompile ke *.jar: o

  Lakukan hal berikut:

  nidos@master:/usr/local/hadoop$ bin/hdfs com.sun.tools.javac.Main WordCountMongo.java

Jika muncul error:

  nidos@master:/usr/local/hadoop$ bin/hdfs com.sun.tools.javac.Main WordCountMongo.java WordCountMongo.java:4: error: package org.bson does not exist import org.bson.*; ^ WordCountMongo.java:6: error: package com.mongodb.hadoop does not exist import com.mongodb.hadoop.MongoInputFormat;

  ^ WordCountMongo.java:7: error: package com.mongodb.hadoop does not exist import com.mongodb.hadoop.MongoOutputFormat; ^ WordCountMongo.java:22: error: cannot find symbol public static class TokenizerMapper extends Mapper<Object, BSONObject, Text, IntWritable> { ^ symbol: class BSONObject location: class WordCountMongo

  WordCountMongo.java:25: error: cannot find symbol public void map(Object key, BSONObject value, Context context ) ^ symbol: class BSONObject location: class TokenizerMapper WordCountMongo.java:60: error: cannot find symbol job.setInputFormatClass( MongoInputFormat.class ); ^ symbol: class MongoInputFormat

  (Save hasil di MongoDB)

   Hasil: nidos@master:/usr/local/hadoop$ bin/hdfs com.sun.tools.javac.Main WordCountMongo.java

   Hasil: nidos@master:/usr/local/hadoop$ jar cf wcmongo.jar WordCountMongo*.class

  (Save hasil di MongoDB)

  (Save hasil di MongoDB)

   Running proses perhitungan kata dalam file dokumen dalam MongoDB: o

  Lakukan hal berikut: Jika menggunakan hdfs, maka gunakan dfs Jika menggunakan hadoop, maka gunakan fs

nidos@master:/usr/local/hadoop$ bin/hadoop jar wcmongo.jar WordCountMongo

  {"_id":"2","value":1} {"_id":"again","value":1} {"_id":"bye","value":2} {"_id":"good","value":1} {"_id":"hello","value":1}

   Lihat hasil dari MongoDB melalui terminal:

  (Save hasil di MongoDB)

   Cek di browser:

  (Save hasil di MongoDB)

   Cek di browser:

  (Save hasil di MongoDB)

   Cek di browser:

  (Save hasil di MongoDB)

  (Save hasil di MongoDB)

   Case Study 2: Rating By Movie o

List dataset (dari MovieLens) dan Link ( https://goo.gl/Jd8GOI ):

   Membuat Directories “ratemovie/dataset” di HDFS harus satu demi satu: nidos@master:~$ cd /usr/local/hadoop nidos@master:/usr/local/hadoop$ bin/hdfs dfs -mkdir /user/nidos/ratemovie

  (Save hasil di MongoDB)

   Copy semua file dataset dari local folder

(/home/nidos/Desktop/data/ratemovie/dataset) ke HDFS folder

(/user/nidos/ratemovie/dataset) o

  List dataset (dari MovieLens) dan Link ( https://goo.gl/Jd8GOI ): nidos@master:/usr/local/hadoop$ bin/hdfs dfs -copyFromLocal

/home/nidos/Desktop/data/ratemovie/dataset/* /user/nidos/ratemovie/dataset

  (Save hasil di MongoDB)

   Copy semua file dataset dari local folder

(/home/nidos/Desktop/data/ratemovie/dataset) ke HDFS folder

(/user/nidos/ratemovie/dataset) nidos@master:/usr/local/hadoop$ bin/hdfs dfs -copyFromLocal

/home/nidos/Desktop/data/ratemovie/dataset/* /user/nidos/ratemovie/dataset

   Add database “ratemovie” pada MongoDB:

  (Save hasil di MongoDB)

   Add database “ratemovie” pada MongoDB:

  (Save hasil di MongoDB)

  (Save hasil di MongoDB)

   Siapkan file *.java untuk dicompile ke *.jar: dari “package comratingbymovies.nidos;”

  (Save hasil di MongoDB)

   Siapkan file (MovieMapper.java Part 1 of 1) untuk dicompile ke *.jar:

  package comratingbymovies.nidos; import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class MovieMapper extends Mapper<LongWritable,Text,Text,Text>{

  Text keyEmit = new Text(); Text valEmit = new Text(); public void map(LongWritable k, Text value, Context context) throws IOException, InterruptedException{

  

String line=value.toString();

  String[] words=line.split("::"); keyEmit.set(words[0]); valEmit.set(words[1]); context.write(keyEmit, valEmit);

  } }

  (Save hasil di MongoDB)

   Siapkan file (MovieReducer.java Part 1 of 2) untuk dicompile ke *.jar:

  package comratingbymovies.nidos; import java.io.IOException; import java.util.Iterator; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapred.OutputCollector; import org.apache.hadoop.mapred.Reporter; import org.apache.hadoop.mapreduce.Reducer; public class MovieReducer extends Reducer<Text,Text,Text,IntWritable> {

  Text valTitle = new Text();

  Text valEmit = new Text(); String merge; public void reduce(Text key, Iterable<Text> values, Context context) throws IOException ,

  InterruptedException{ int counter = 0;

  (Save hasil di MongoDB)

   Siapkan file (MovieReducer.java Part 2 of 2) untuk dicompile ke *.jar:

  else if ("".equalsIgnoreCase(merge)){// from movies get the title merge = value.toString(); }

  } valTitle.set(merge); context.write(valTitle, new IntWritable(counter));

  } }

  (Save hasil di MongoDB)

  

Siapkan file (RatingCounterByMovieMongo.java Part 1 of 2) untuk dicompile ke *.jar:

  package comratingbymovies.nidos; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.FileSystem; 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.lib.input.MultipleInputs; import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser;

  import org.apache.hadoop.util.Tool;

  import org.apache.hadoop.util.ToolRunner; import com.mongodb.hadoop.io.BSONWritable; import com.mongodb.hadoop.mapred.MongoOutputFormat; public class RatingCounterByMovieMongo extends Configured implements Tool{ public int run(String[] args) throws Exception { final Configuration conf = getConf(); conf.set("mongo.output.uri", args[2]);

  (Save hasil di MongoDB)

  

Siapkan file (RatingCounterByMovieMongo.java Part 2 of 2) untuk dicompile ke *.jar:

  job.setReducerClass(MovieReducer.class); job.setOutputFormatClass(com.mongodb.hadoop.MongoOutputFormat.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); boolean success = job.waitForCompletion(true); return success?0:1;

  } public static void main(String[] args) throws Exception { if (args.length != 3 ){

  System.err.println ("Usage :<inputlocation1> <inputlocation2> <outputlocation>

  >");

  System.exit(0); } int res = ToolRunner.run(new Configuration(), new RatingCounterByMovieMongo(), args); System.exit(res);

  } }

  (Save hasil di MongoDB)

   Siapkan file (RatingMapper.java Part 1 of 1) untuk dicompile ke *.jar:

  package comratingbymovies.nidos; import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapred.OutputCollector; import org.apache.hadoop.mapred.Reporter; import org.apache.hadoop.mapreduce.Mapper; public class RatingMapper extends Mapper<LongWritable,Text,Text,Text>{

  Text keyEmit = new Text(); Text valEmit = new Text(); public void map(LongWritable k, Text v, Context context) throws IOException, InterruptedException{

  String line=v.toString(); String[] words=line.split("::"); keyEmit.set(words[1]); valEmit.set("#"); context.write(keyEmit, valEmit);

  } }

   Semua file *.java dicompile ke *.jar: o

  Lakukan hal berikut:

  (Save hasil di MongoDB) nidos@master:~$ cd /usr/local/hadoop nidos@master:/usr/local/hadoop$ cp -r /home/nidos/Desktop/kode/RatingByMovies/comratingbymovies /usr/local/hadoop

  (Save hasil di MongoDB)

   Semua file *.java dicompile ke *.jar: o

Lakukan hal berikut:

  nidos@master:/usr/local/hadoop$ bin/hdfs com.sun.tools.javac.Main comratingbymovies/nidos/*.java Note: comratingbymovies/nidos/RatingCounterByMovieMongo.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details.

   Hasil: nidos@master:/usr/local/hadoop$ jar cf ratemovie.jar comratingbymovies/nidos/*.class

  (Save hasil di MongoDB)

   Hasil: nidos@master:/usr/local/hadoop$ jar cf ratemovie.jar comratingbymovies/nidos/*.class

  (Save hasil di MongoDB)

  (Save hasil di MongoDB)

   Running proses perhitungan rating movie: o

  Lakukan hal berikut: nidos@master:/usr/local/hadoop$ bin/hadoop jar ratemovie.jar comratingbymovies/nidos/RatingCounterByMovieMongo /user/nidos/ratemovie/dataset/ratings.dat /user/nidos/ratemovie/dataset/movies.dat mongodb://localhost/ratemovie.out

  (Save hasil di MongoDB)

   Running proses perhitungan rating movie: o

  Lakukan hal berikut: nidos@master:/usr/local/hadoop$ bin/hadoop jar ratemovie.jar comratingbymovies/nidos/RatingCounterByMovieMongo /user/nidos/ratemovie/dataset/ratings.dat /user/nidos/ratemovie/dataset/movies.dat mongodb://localhost/ratemovie.out2

   Lihat hasil dari MongoDB melalui terminal:

  (Save hasil di MongoDB)

   Cek di browser:

  (Save hasil di MongoDB)

   Cek di browser:

  (Save hasil di MongoDB)

Tugas Kelompok

  

1. Lakukan Studi Kasus WordCount dengan dokumen yang berbeda (pada file > 0.5

MB, file > 1 MB, file > 10 MB, file > 100 MB, file > 1000 MB) pada Hadoop Single atau Multi Node Cluster dan simpan hasilnya dalam MongoDB! dan berilah penjelasan untuk setiap langkah-langkahnya disertai screenshot!  Optional

  

2. Lakukan dan ulangi kembali Studi Kasus RateMovie dengan dokumen yang sama

seperti dicontoh pada Hadoop Single atau Multi Node Cluster dan simpan hasilnya dalam MongoDB! dan berilah penjelasan untuk setiap langkah-langkahnya disertai screenshot!  Optional

  Terimakasih