Hadoop MapReduce Gabung & Kontra dengan Contoh
โก Ringkasan Cerdas
Penggabungan MapReduce menggabungkan dua dataset besar berdasarkan kunci bersama, baik di dalam mapper maupun di dalam reducer, sementara penghitung MapReduce mengumpulkan statistik tentang pekerjaan tersebut sehingga catatan yang buruk dapat diukur daripada ditebak.
Apa itu Join dalam MapReduce?
Operasi Join pada MapReduce digunakan untuk menggabungkan dua dataset besar. Namun, proses ini melibatkan penulisan banyak kode untuk melakukan operasi join yang sebenarnya. Penggabungan dua dataset dimulai dengan membandingkan ukuran masing-masing dataset. Jika satu dataset lebih kecil dibandingkan dengan dataset lainnya, maka dataset yang lebih kecil akan didistribusikan ke setiap node data dalam cluster.
Setelah bergabung PetaKurangi Jika dataset didistribusikan, baik Mapper maupun Reducer akan menggunakan dataset yang lebih kecil untuk melakukan pencarian data yang cocok dari dataset yang besar, kemudian menggabungkan data tersebut untuk membentuk data keluaran.
Jenis Gabung
Tergantung pada tempat di mana operasi join sebenarnya dilakukan, operasi join di Hadoop diklasifikasikan menjadi dua jenis.
- Gabung sisi peta โ Ketika operasi join dilakukan oleh mapper, ini disebut map-side join. Pada tipe ini, operasi join dilakukan sebelum data benar-benar digunakan oleh fungsi map. Input untuk setiap map wajib berupa partisi dan dalam urutan terurut. Selain itu, jumlah partisi harus sama dan harus diurutkan berdasarkan kunci join.
- Sambungan sisi bawah โ Ketika operasi join dilakukan oleh reducer, ini disebut join sisi reduce. Dalam join ini, tidak perlu memiliki dataset dalam bentuk terstruktur (atau terpartisi). Di sini, pemrosesan sisi map menghasilkan kunci join dan tuple yang sesuai dari kedua tabel. Sebagai efek dari pemrosesan ini, semua tuple dengan kunci join yang sama masuk ke reducer yang sama, yang kemudian menggabungkan record dengan kunci join yang sama.
Alur proses keseluruhan gabungan di Hadoop digambarkan dalam diagram di bawah ini.

Setelah kedua varian tersebut jelas, bagian selanjutnya akan membahas cara melakukan reduce-side join pada dua berkas departemen kecil.
Cara Menggabungkan dua Kumpulan Data: Contoh MapReduce
Terdapat dua set data dalam dua file berbeda (seperti yang ditunjukkan di bawah). Kunci Dept_ID terdapat di kedua file tersebut. Tujuannya adalah menggunakan MapReduce Join untuk menggabungkan file-file ini.
Memasukkan: Kumpulan data masukan berupa file txt, DeptName.txt & DeptStrength.txt
Pastikan Anda memilikinya Hadoop Terinstal. Sebelum Anda memulai proses sebenarnya dari contoh MapReduce Join, ubah pengguna menjadi 'hduser' (ID yang digunakan selama konfigurasi Hadoop, Anda dapat beralih ke ID pengguna yang digunakan selama konfigurasi Hadoop Anda).
su - hduser_
Perintah tersebut mengubah akun Hadoop, seperti yang ditunjukkan di bawah ini.
Langkah 1) Salin file zip ke lokasi pilihan Anda
Langkah 2) Buka kompresi File Zip
sudo tar -xvf MapReduceJoin.tar.gz
Sang mantantracNama-nama file yang telah diedit bergulir saat tar mengekstrak arsip.
Langkah 3) Masuk ke direktori MapReduceJoin/
cd MapReduceJoin/
Langkah 4) Mulai Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Kedua skrip tersebut mencetak daemon yang mereka jalankan.
Langkah 5) DeptStrength.txt dan DeptName.txt adalah file input yang digunakan untuk program contoh MapReduce Join ini.
File-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
Perintah tersebut akan ditampilkan terlebih dahulu, dan kemudian proses akan melaporkan kemajuannya di konsol.
Langkah 7) Setelah eksekusi, file output (bernama 'part-00000') akan disimpan di direktori /output_mapreducejoin pada HDFS.
Hasilnya dapat dilihat menggunakan antarmuka baris perintah
$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000
Hasilnya juga dapat dilihat melalui antarmuka web sebagai-
Sekarang pilih 'Jelajahi sistem file' dan navigasikan ke atas ke /output_mapreducejoin
Buka bagian r-00000
Hasil ditampilkan
CATATAN: Harap dicatat bahwa sebelum menjalankan program ini untuk kali berikutnya, Anda perlu menghapus direktori keluaran /output_mapreducejoin
$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin
Alternatifnya adalah dengan menggunakan nama yang berbeda untuk direktori keluaran.
Join memberi tahu Anda seperti apa data tersebut. Counter, yang akan dibahas selanjutnya, memberi tahu Anda bagaimana kinerja proses yang menghasilkan data tersebut.
Apa itu Penghitung di MapReduce?
Counter dalam MapReduce adalah mekanisme yang digunakan untuk mengumpulkan dan mengukur informasi statistik tentang pekerjaan dan peristiwa MapReduce. Counter menyimpan informasi tentang hal ini. track merupakan berbagai statistik pekerjaan di MapReduce seperti jumlah operasi yang terjadi dan kemajuan operasi. Counter digunakan untuk mendiagnosis 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 ini di Hadoop didefinisikan dalam sebuah program (map atau reduce) dan akan bertambah nilainya selama eksekusi ketika suatu peristiwa atau kondisi tertentu (spesifik untuk penghitung tersebut) terjadi. Salah satu aplikasi yang sangat baik dari penghitung Hadoop adalah untuk track catatan 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 per pekerjaan. Di bawah ini adalah grup penghitung bawaan-
- Penghitung Tugas MapReduce โ Mengumpulkan informasi spesifik tugas (misalnya, jumlah catatan masukan) selama waktu eksekusinya.
- Penghitung Sistem File โ Mengumpulkan informasi seperti jumlah byte yang dibaca atau ditulis oleh suatu tugas.
- Penghitung FileInputFormat โ Mengumpulkan informasi sejumlah byte yang dibaca melalui FileInputFormat.
- Penghitung FileOutputFormat โ Mengumpulkan informasi sejumlah byte yang ditulis melalui FileOutputFormat.
- Penghitung Pekerjaan โ Penghitung ini mencatat statistik keseluruhan pekerjaan, seperti jumlah tugas yang diluncurkan untuk suatu pekerjaan.
- Penghitung yang ditentukan pengguna: Selain penghitung bawaan, pengguna dapat mendefinisikan penghitungnya sendiri menggunakan fungsi serupa yang disediakan oleh bahasa pemrograman. Misalnya, dalam Java, sebuah 'enum' digunakan untuk mendefinisikan penghitung yang ditentukan pengguna.
๐ก Catatan versi: Penghitung lowongan pekerjaan dikelola oleh Job.Tracker di bawah MRv1. Di YARN, peran itu dimiliki oleh MapReduce ApplicationMaster, jadi nama penghitung tetap ada tetapi komponen yang melaporkannya telah berubah.
Suatu pekerjaan tidak dapat menyatakan jumlah penghitung yang tidak terbatas. mapreduce.job.counters.max Pengaturan ini membatasi total per pekerjaan hingga 120 secara default, dan pekerjaan yang menyatakan lebih dari itu akan gagal dengan pesan kesalahan. LimitExceededExceptionJadi, penghitung dimaksudkan untuk sejumlah sinyal agregat, bukan penghitungan per kunci.
Contoh Penghitung
Contoh MapClass dengan Counter 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 MapClass extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text> { static enum SalesCounters { MISSING, INVALID }; public void map ( LongWritable key, Text value, OutputCollector<Text, Text> output, Reporter reporter) throws IOException { //Input string is split using ',' and stored in 'fields' array String fields[] = value.toString().split(",", -20); //Value at 4th index is country. It is stored in 'country' variable String country = fields[4]; //Value at 8th index is sales data. It is stored in 'sales' variable String 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 MapReduce.
Di sini, Penghitung Penjualan adalah penghitung yang didefinisikan menggunakan 'enum'. Ini digunakan untuk menghitung data input yang HILANG dan TIDAK VALID.
Dalam cuplikan kode, jika 'negaraJika kolom tersebut memiliki panjang nol, maka nilainya hilang dan oleh karena itu penghitung yang sesuai, SalesCounters.MISSING, akan bertambah.
Selanjutnya, jika 'penjualanJika kolom ' diawali dengan tanda โ maka catatan tersebut dianggap TIDAK VALID. Hal ini ditunjukkan dengan bertambahnya penghitung SalesCounters.INVALID.
๐ก Catatan API: Cuplikan di atas menggunakan yang asli org.apache.hadoop.mapred API, di mana MapReduceBase, yang Mapper antarmuka, OutputCollector ke Reporter muncul secara terpisah. Kode saat ini ditulis terhadap org.apache.hadoop.mapreduce, di mana satu Context menggantikan kolektor dan pelapor, dan sebuah penghitung bertambah dengan context.getCounter(SalesCounters.MISSING).increment(1)Konsep penghitungnya identik di keduanya.











