Apa itu Bergabung di Mapreduce?
Operasi Mapreduce Join digunakan untuk menggabungkan dua dataset besar. Namun, proses ini melibatkan penulisan banyak kode untuk melakukan operasi gabungan yang sebenarnya. Penggabungan dua dataset dimulai dengan membandingkan ukuran setiap dataset. Jika satu dataset lebih kecil dibandingkan dengan dataset lain maka dataset yang lebih kecil didistribusikan ke setiap node data di cluster.
Setelah gabungan di MapReduce didistribusikan, baik Mapper atau Reducer menggunakan kumpulan data yang lebih kecil untuk melakukan pencarian catatan yang cocok dari kumpulan data besar dan kemudian menggabungkan catatan tersebut untuk membentuk catatan keluaran.
Dalam tutorial ini, Anda akan belajar-
- Apa itu Join in MapReduce?
- Jenis Gabung
- Bagaimana Menggabungkan dua DataSets: Contoh MapReduce
- Apa itu Counter di MapReduce?
- Jenis Penghitung MapReduce
- Contoh Penghitung
Jenis Gabung
Bergantung pada tempat di mana gabungan sebenarnya dilakukan, gabungan di Hadoop diklasifikasikan menjadi-
1. Gabungan sisi peta - Saat gabungan dilakukan oleh mapper, ini disebut sebagai gabungan sisi peta. Dalam tipe ini, gabungan dilakukan sebelum data benar-benar dikonsumsi oleh fungsi peta. Masukan untuk setiap peta wajib dalam bentuk partisi dan dalam urutan yang diurutkan. Juga, harus ada jumlah partisi yang sama dan harus diurutkan berdasarkan kunci penghubung.
2. Gabungan sisi -reduksi - Saat gabungan dilakukan oleh peredam, ini disebut sebagai gabungan sisi-reduksi. Tidak ada keharusan dalam gabungan ini untuk memiliki kumpulan data dalam bentuk terstruktur (atau dipartisi).
Di sini, pemrosesan sisi peta memancarkan kunci gabungan dan tupel yang sesuai dari kedua tabel. Sebagai akibat dari pemrosesan ini, semua tupel dengan kunci penghubung yang sama jatuh ke peredam yang sama yang kemudian menggabungkan catatan dengan kunci penghubung yang sama.
Alur proses gabungan secara keseluruhan di Hadoop digambarkan dalam diagram di bawah ini.
Bagaimana Menggabungkan dua DataSets: Contoh MapReduce
Ada dua Kumpulan Data dalam dua File Berbeda (ditampilkan di bawah). Key Dept_ID umum di kedua file. Tujuannya adalah menggunakan MapReduce Join untuk menggabungkan file-file ini
Input: Kumpulan data input adalah file txt, DeptName.txt & DepStrength.txt
Unduh File Input Dari Sini
Pastikan Anda telah menginstal Hadoop. Sebelum Anda mulai dengan contoh proses MapReduce Join yang sebenarnya, ubah pengguna menjadi 'hduser' (id digunakan saat konfigurasi Hadoop, Anda dapat beralih ke userid yang digunakan selama konfigurasi Hadoop Anda).
su - hduser_
Langkah 1) Salin file zip ke lokasi pilihan Anda
Langkah 2) Buka kompresi File Zip
sudo tar -xvf MapReduceJoin.tar.gz
Langkah 3) Buka direktori MapReduceJoin /
cd MapReduceJoin/
Langkah 4) Mulai Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Langkah 5) DeptStrength.txt dan DeptName.txt adalah file input yang digunakan untuk program contoh Gabungan MapReduce ini.
File ini perlu disalin ke HDFS menggunakan perintah di bawah ini-
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /
Langkah 6) Jalankan program menggunakan perintah di bawah ini-
$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin
Langkah 7) Setelah eksekusi, file output (bernama 'part-00000') akan disimpan di direktori / output_mapreducejoin di HDFS
Hasil dapat dilihat dengan menggunakan antarmuka baris perintah
$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000
Hasil juga dapat dilihat melalui antarmuka web sebagai-
Sekarang pilih 'Jelajahi filesystem' dan arahkan ke / output_mapreducejoin
Buka bagian-r-00000
Hasil ditampilkan
CATATAN: Harap dicatat bahwa sebelum menjalankan program ini untuk waktu berikutnya, Anda perlu menghapus direktori output / output_mapreducejoin
$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin
Alternatifnya adalah dengan menggunakan nama yang berbeda untuk direktori keluaran.
Apa itu Counter di MapReduce?
Sebuah Counter MapReduce adalah mekanisme yang digunakan untuk mengumpulkan dan mengukur informasi statistik tentang pekerjaan dan peristiwa MapReduce. Penghitung melacak berbagai statistik pekerjaan di MapReduce seperti jumlah operasi yang terjadi dan kemajuan operasi. Penghitung digunakan untuk diagnosis Masalah di MapReduce.
Penghitung Hadoop mirip dengan memasukkan pesan log ke dalam kode untuk peta atau pengurangan. Informasi ini dapat berguna untuk mendiagnosis masalah dalam pemrosesan pekerjaan MapReduce.
Biasanya, penghitung di Hadoop ini didefinisikan dalam program (peta atau pengurangan) dan bertambah selama eksekusi ketika peristiwa atau kondisi tertentu (khusus untuk penghitung itu) terjadi. Aplikasi penghitung Hadoop yang sangat baik adalah untuk melacak catatan yang valid dan tidak valid dari kumpulan data masukan.
Jenis Penghitung MapReduce
Pada dasarnya ada 2 jenis Penghitung MapReduce
- Penghitung Bawaan Hadoop: Ada beberapa penghitung Hadoop bawaan yang ada untuk setiap pekerjaan. Di bawah ini adalah grup penghitung bawaan-
- MapReduce Task Counters - Mengumpulkan informasi spesifik tugas (misalnya, jumlah record input) selama waktu pelaksanaannya.
- Penghitung FileSystem - Mengumpulkan informasi seperti jumlah byte yang dibaca atau ditulis oleh tugas
- FileInputFormat Counter - Mengumpulkan informasi sejumlah byte yang dibaca melalui FileInputFormat
- FileOutputFormat Counter - Mengumpulkan informasi sejumlah byte yang ditulis melalui FileOutputFormat
- Penghitung Pekerjaan - Penghitung ini digunakan oleh JobTracker. Statistik yang dikumpulkan oleh mereka termasuk misalnya, jumlah tugas yang diluncurkan untuk suatu pekerjaan.
- Penghitung Buatan Pengguna
Selain penghitung bawaan, pengguna dapat menentukan penghitungnya sendiri menggunakan fungsi serupa yang disediakan oleh bahasa pemrograman. Misalnya, di Java 'enum' digunakan untuk mendefinisikan penghitung yang ditentukan pengguna.
Contoh Penghitung
Contoh MapClass dengan Penghitung untuk menghitung jumlah nilai yang hilang dan tidak valid. File data input yang digunakan dalam tutorial ini Kumpulan data input kami adalah file CSV, SalesJan2009.csv
public static class MapClassextends MapReduceBaseimplements Mapper{static enum SalesCounters { MISSING, INVALID };public void map ( LongWritable key, Text value,OutputCollector output,Reporter reporter) throws IOException{//Input string is split using ',' and stored in 'fields' arrayString fields[] = value.toString().split(",", -20);//Value at 4th index is country. It is stored in 'country' variableString country = fields[4];//Value at 8th index is sales data. It is stored in 'sales' variableString sales = fields[8];if (country.length() == 0) {reporter.incrCounter(SalesCounters.MISSING, 1);} else if (sales.startsWith("\"")) {reporter.incrCounter(SalesCounters.INVALID, 1);} else {output.collect(new Text(country), new Text(sales + ",1"));}}}
Cuplikan kode di atas menunjukkan contoh implementasi penghitung di Hadoop Map Reduce.
Di sini, SalesCounters adalah penghitung yang didefinisikan menggunakan 'enum' . Ini digunakan untuk menghitung catatan masukan TIDAK ADA dan TIDAK VALID .
Dalam cuplikan kode, jika bidang 'negara' memiliki panjang nol maka nilainya hilang dan karenanya penghitung SalesCounters.MISSING yang sesuai bertambah.
Selanjutnya, jika bidang 'penjualan' dimulai dengan " maka catatan tersebut dianggap INVALID. Hal ini ditunjukkan dengan meningkatkan penghitung SalesCounters.INVALID.