Steps to write Map Reduce program using Hadoop framework and java

MapReduce

MapReduce

Ikhtisar: data besar adalah paradigma baru dan pengolahannya adalah daerah yang paling penting untuk berkonsentrasi. data besar mengacu pada volume besar data yang berasal dari sumber yang berbeda seperti media sosial, Data sensor, data seluler, internet data dan banyak lagi. Pada artikel ini kita akan berkonsentrasi pada bagian pengolahan menggunakan framework Hadoop dan Peta-Mengurangi pemrograman. Peta-Mengurangi dapat didefinisikan sebagai tipe khusus dari kerangka kerja pemrograman yang digunakan untuk memproses sejumlah besar data dalam kerangka yang disebut hardware komoditas didistribusikan. Jadi artikel ini akan menjelaskan Peta-Mengurangi konsep dan implementasi praktis dengan menggunakan kode Java.

Pengantar: Hadoop MapReduce dapat didefinisikan sebagai kerangka kerja pemrograman perangkat lunak yang digunakan untuk memproses volume yang besar dari data yang (di tingkat terabyte) dalam lingkungan paralel node berkerumun. cluster terdiri dari ribuan node perangkat keras komoditas. pengolahan didistribusikan, handal dan kesalahan toleran. Sebuah pekerjaan MapReduce khas dilakukan sesuai dengan langkah-langkah berikut

1) Membagi data ke dalam potongan independen berdasarkan pasangan kunci-nilai. Hal ini dilakukan dengan Peta tugas secara paralel.

2) Out put dari pekerjaan Map diurutkan berdasarkan nilai key.

3) output diurutkan adalah masukan untuk pekerjaan Mengurangi. Dan kemudian menghasilkan output akhir pengolahan dan mengembalikan hasilnya ke klien.

Note: hardware komoditas pada dasarnya sistem komputer biaya rendah

kerangka MapReduce: kerangka Apache Hadoop MapReduce ditulis di Jawa. Kerangka kerja ini terdiri dari konfigurasi master-budak. master dikenal sebagai JobTracker dan budak dikenal sebagai master TaskTrackers.The mengontrol tugas diproses pada budak (yang tidak lain adalah node dalam sebuah cluster). Perhitungan dilakukan pada budak. Jadi menghitung dan penyimpanan node yang sama di lingkungan cluster. Konsep ini ‘ pindah perhitungan untuk node di mana data disimpan ', dan itu membuat pengolahan lebih cepat.

MapReduce Pengolahan: Model kerangka MapReduce adalah berat sangat ringan. Sehingga biaya hardware rendah dibandingkan dengan kerangka kerja lainnya. Tetapi pada saat yang sama kita harus memahami bahwa model bekerja secara efisien hanya dalam lingkungan terdistribusi pengolahan dilakukan pada node di mana data berada. Fitur lain seperti skalabilitas, keandalan dan toleransi kesalahan juga bekerja dengan baik pada lingkungan terdistribusi.

pelaksanaan MapReduce: Sekarang kita akan membahas tentang penerapan model MapReduce menggunakan platform pemrograman Java. Berikut ini adalah komponen yang berbeda dari seluruh ujung ke ujung pelaksanaan.

  • The program klien yang merupakan kelas driver dan memulai proses
  • The fungsi peta yang melakukan split dengan menggunakan pasangan kunci-nilai.
  • The mengurangi fungsi yang menggabungkan data diolah dan mengirim output kembali ke klien.

kelas driver: Berikut ini adalah kelas driver yang mengikat Peta dan Mengurangi fungsi dan mulai pengolahan. Ini adalah program klien yang memulai proses.

Listing1: Program klien (kelas driver) memulai proses

[kode]

paket com.mapreduce.techalpine;

impor org.apache.commons.logging.Log;

impor org.apache.commons.logging.LogFactory;

impor org.apache.hadoop.conf.Configuration;

impor org.apache.hadoop.fs.Path;

impor org.apache.hadoop.io.Text;

impor org.apache.hadoop.mapreduce.Job;

impor org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

impor org.apache.hadoop.mapreduce.lib.input.TextInputFormat;

impor org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

impor org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

/**

* @author kaushik pal

*

* Ini adalah kelas pendorong utama untuk memulai peta-mengurangi

* process. Ini menetapkan tanah kembali untuk seluruh proses dan

* Kemudian mulai itu.

*/

public class DevXDriver {

public static void main(Senar[] args) throws Exception {

// memulai konfigurasi

Konfigurasi configx = konfigurasi baru();

// Tambahkan file resource

configx.addResource(Jalur baru(“/user / Hadoop / inti-site.xml”));

configx.addResource(Jalur baru(“/user / Hadoop / HDFS-site.xml”));

// Buat MapReduce Pekerjaan

devxmapjob pekerjaan = new job(configx,”DevXDriver.class”);

devxmapjob.setJarByClass(DevXDriver.class);

devxmapjob.setJobName(“DevX MapReduce Pekerjaan”);

// Set output kay dan kelas nilai

devxmapjob.setOutputKeyClass(Text.class);

devxmapjob.setOutputValueClass(Text.class);

// Set kelas Peta

devxmapjob.setMapperClass(DevXMap.class);

// Set kelas Combiner

devxmapjob.setCombinerClass(DevXReducer.class);

// Set kelas Reducer

devxmapjob.setReducerClass(DevXReducer.class);

// Set Peta kunci output dan nilai kelas

devxmapjob.setMapOutputKeyClass(Text.class);

devxmapjob.setMapOutputValueClass(Text.class);

// Mengatur jumlah tugas peredam

devxmapjob.setNumReduceTasks(10);

// Mengatur input dan output kelas Format

devxmapjob.setInputFormatClass(TextInputFormat.class);

devxmapjob.setOutputFormatClass(TextOutputFormat.class);

// Set input dan jalur output

FileInputFormat.addInputPath(devxmapjob, Jalur baru(“/user / map_reduce / input /”));

FileOutputFormat.setOutputPath(devxmapjob,Jalur baru(“/user / map_reduce / output”));

// Mulai MapReduce Pekerjaan

devxmapjob.waitForCompletion(benar);

}

}

[/kode]

fungsi peta: Ini bertanggung jawab untuk memisahkan data berdasarkan pasangan kunci-nilai. Hal ini dikenal sebagai pemetaan data.

Listing2: Ini adalah fungsi Peta membagi data ke dalam potongan

[kode]

paket com.mapreduce.techalpine;

import java.io.BufferedReader;

impor java.io.InputStreamReader;

impor java.net.URI;

impor java.util.StringTokenizer;

impor org.apache.commons.logging.Log;

impor org.apache.commons.logging.LogFactory;

impor org.apache.hadoop.conf.Configuration;

impor org.apache.hadoop.fs.FileSystem;

impor org.apache.hadoop.fs.Path;

impor org.apache.hadoop.io.LongWritable;

impor org.apache.hadoop.io.Text;

impor org.apache.hadoop.mapreduce.Mapper;

/**

* @author kaushik pal

*

* Ini adalah proses peta. Ia melakukan pemetaan untuk pasangan kunci-nilai.

*/

public class DevXMap meluas Mapper<LongWritable, Teks, Teks,Teks> {

// Buat Jalur, BufferedReader dan Teks variabel

jalan file_path;

BufferedReader buffer_reader;

tweet_values ​​teks = teks baru();

/**

* kunci @param

* nilai @param

* @param konteks

*/

peta public void(kunci LongWritable, nilai teks, konteks konteks) {

coba{

// Buat konfigurasi untuk Peta

Konfigurasi map_config = konfigurasi baru();

// Memuat file inti Hadoop dalam konfigurasi

map_config.addResource(Jalur baru(“/user / Hadoop / inti-site.xml”));

map_config.addResource(Jalur baru(“/user / Hadoop / HDFS-site.xml”));

// Buat variabel

String searchkeyword = “”;

// Membuka file dari path file

file_path = Jalur baru(“file / repositori / keys.txt”);

FileSystem file_system = FileSystem.get(URI.create(“file / repositori / keys.txt”),Konfigurasi baru());

// Beban penyangga reader

buffer_reader = BufferedReader baru(InputStreamReader baru(file_system.open(file_path)));

while(buffer_reader.ready())

{

searchkeyword = buffer_reader.readLine().memangkas();

}

// Dapatkan nilai kunci

akhir Text key_value = Teks baru(Cari Kata Kunci);

// Periksa nilai dan mengambil keputusan

jika(Nilai == null)

{

return;

}

lain{

StringTokenizer string_tokens = StringTokenizer baru(value.toString(),”,”);

count int = 0;

while(string_tokens.hasMoreTokens()) {

count ++;

jika(count <= 1)

terus;

String new_tweet_value = string_tokens.nextToken().toLowerCase().memangkas().menggantikan semua(“\\*”,””);

jika(new_tweet_value.contains(searchkeyword.toLowerCase().memangkas())) {

tweet_values.set(new_tweet_value);

context.write(key_value,tweet_values);

}

}

}

}

menangkap(Exception e){

e.printStackTrace();

}

}

}

[/kode]

mengurangi fungsi: Ini bertanggung jawab untuk menggabungkan data. agregasi tersebut dilakukan berdasarkan nilai-nilai kunci. Jadi setelah pengolahan dan pemilahan agregasi selesai dan mengirimkan hasilnya kembali ke program klien.

Listing3: Fungsi Mengurangi mengumpulkan data diolah

[kode]

paket com.mapreduce.techalpine;

import java.io.BufferedReader;

impor java.io.IOException;

impor java.io.InputStreamReader;

impor java.net.URI;

impor java.util.RandomAccess;

impor java.util.regex.Matcher;

impor java.util.regex.Pattern;

impor org.apache.commons.logging.Log;

impor org.apache.commons.logging.LogFactory;

impor org.apache.hadoop.conf.Configuration;

impor org.apache.hadoop.fs.FSDataOutputStream;

impor org.apache.hadoop.fs.FileSystem;

impor org.apache.hadoop.fs.Path;

impor org.apache.hadoop.io.Text;

impor org.apache.hadoop.mapreduce.Reducer;

/**

* @author kaushik pal

*

* Ini adalah fungsi peredam. Agregat output berdasarkan

* menyortir pasangan kunci-nilai.

*/

public class DevXReducer meluas Reducer<Teks ,Teks,Teks,Teks>

{

// Buat variabel untuk path file

jalan positive_file_path;

jalan negative_file_path;

jalan output_file_path;

jalan keyword_file_path;

// Buat variabel untuk penyangga

BufferedReader positive_buff_reader;

BufferedReader negative_buff_reader;

BufferedReader keyword_buff_reader;

// Membuat variabel untuk perhitungan

statis Dua total_record_count = Dua baru(“0”);

statis Dua count_neg = Dua baru(“0”);

statis count_pos Dua = Dua baru(“0”);

statis Dua count_neu = Dua baru(“0”);

statis Dua percent_neg = Dua baru(“0”);

statis percent_pos Dua = Dua baru(“0”);

statis Dua percent_neu = Dua baru(“0”);

pola pattrn_matcher;

pertandingan matcher_txt;

static int new_row = 0;

FSDataOutputStream out_1st,out_2nd;

/**

* kunci @param

* nilai @param

* @param konteks

* @throws IOException

* @throws InterruptedException

*/

public void mengurangi(kunci teks, iterable<Teks> values,konteks konteks) throws IOException, InterruptedException

{

// Buat konfigurasi untuk reducer

Konfigurasi reduce_config = konfigurasi baru();

// Beban Hadoop file konfigurasi

reduce_config.addResource(Jalur baru(“/user / Hadoop / inti-site.xml”));

reduce_config.addResource(Jalur baru(“/user / Hadoop / HDFS-site.xml”));

// Buat variabel

String key_word = “”;

String check_keyword = key_word;

keyword_file_path = Jalur baru(“file / repositori / keys.txt”);

FileSystem file_system_read = FileSystem.get(URI.create(“file / repositori / keys.txt”),Konfigurasi baru());

keyword_buff_reader = BufferedReader baru(InputStreamReader baru(file_system_read.open(keyword_file_path)));

FileSystem get_filesys = FileSystem.get(reduce_config);

FileSystem get_filesys_posneg = FileSystem.get(reduce_config);

Jalan path_output = jalan baru(“/user / sentiment_output_file.txt”);

Jalan path_output_posneg = jalan baru(“/user / posneg_output_file.txt”);

// Dapatkan kata kunci

while(keyword_buff_reader.ready())

{

key_word = keyword_buff_reader.readLine().memangkas();

}

// Periksa sistem file

jika (!get_filesys.exists(path_output)) {

out_1st = get_filesys.create(path_output);

out_2nd = get_filesys_posneg.create(path_output_posneg);

}

// Periksa pencocokan kata kunci menggunakan kamus positif dan negatif

jika(check_keyword.equals(key.toString().toLowerCase()))

{

untuk(new_tweets teks:values)

{

// Memuat kamus kata positif

positive_file_path = Jalur baru(“/user / map_reduce / pos_words.txt”);

FileSystem filesystem_one = FileSystem.get(URI.create(“file / pos_words.txt”),Konfigurasi baru());

positive_buff_reader = BufferedReader baru(InputStreamReader baru(filesystem_one.open(positive_file_path)));

// Memuat kata disctinary negatif

negative_file_path = Jalur baru(“/user / map_reduce / neg_words.txt”);

FileSystem filesystem_two = FileSystem.get(URI.create(“file / neg_words.txt”),Konfigurasi baru());

negative_buff_reader = BufferedReader baru(InputStreamReader baru(filesystem_two.open(negative_file_path)));

++total_record_count;

boolean first_flag = false;

boolean second_flag = false;

String all_tweets = new_tweets.toString();

String first_regex = “”;

String second_regex = “”;

while(positive_buff_reader.ready())

{

first_regex = positive_buff_reader.readLine().memangkas();

new_row ;

pattrn_matcher = Pattern.compile(first_regex, Pattern.CASE_INSENSITIVE);

matcher_txt = pattrn_matcher.matcher(all_tweets);

first_flag = matcher_txt.find();

 

jika(first_flag)

{

out_2nd.writeBytes(all_tweets);

context.write(Teks baru(first_regex),Teks baru(all_tweets));

istirahat;

}

}

while(negative_buff_reader.ready())

{

new_row ;

second_regex = negative_buff_reader.readLine().memangkas();

pattrn_matcher = Pattern.compile(second_regex, Pattern.CASE_INSENSITIVE);

matcher_txt = pattrn_matcher.matcher(all_tweets);

second_flag = matcher_txt.find();

jika(second_flag)

{

out_2nd.writeBytes(all_tweets);

context.write(Teks baru(second_regex),Teks baru(all_tweets));

istirahat;

}

}

jika(first_flag&second_flag)

{

++count_neu;

}

lain

{

jika(first_flag)

{

++count_pos;

}

jika(second_flag)

{

++count_neg;

}

jika(first_flag == false&second_flag == false)

{

++count_neu;

}

}

// Tutup buffer

negative_buff_reader.close();

positive_buff_reader.close();

}

// Menghitung nilai persen

percent_pos = count_pos / total_record_count * 100;

percent_neg = count_neg / total_record_count * 100;

percent_neu = count_neu / total_record_count * 100;

coba{

// Menulis ke file

out_1st.writeBytes(“\n”+key_word);

out_1st.writeBytes(“,”+total_record_count);

out_1st.writeBytes(“,”+percent_neg);

out_1st.writeBytes(“,”+percent_pos);

out_1st.writeBytes(“,”+percent_neu);

// Tutup file sistem

out_1st.close();

get_filesys.close();

}menangkap(Exception e){

e.printStackTrace();

}

}

}

}

[/kode]

Kesimpulan: Pada artikel ini saya telah membahas pengolahan MapReduce menggunakan lingkungan pemrograman Java. Komponen yang berbeda seperti Peta dan Mengurangi fungsi melakukan tugas utama dan mengembalikan output ke klien. pemrosesan melakukan efisien pada lingkungan terdistribusi hanya. Jadi kita harus menyiapkan kerangka Apache Hadoop pada lingkungan terdistribusi untuk mendapatkan hasil yang terbaik.

Harap Anda menikmati artikel dan Anda akan dapat menerapkannya dalam pemrograman praktis Anda. Keep reading.

Tagged on: ,
============================================= ============================================== Buy best TechAlpine Books on Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share