Dalam pemrograman Map Reduce, fase reduce memiliki pengocokan, pengurutan, dan pengurangan sebagai sub-bagiannya. Menyortir adalah urusan yang mahal.
Apa tujuan fase shuffling dan sorting pada reducer di Map Reduce Programming?
Dalam pemrograman Map Reduce, fase reduce memiliki pengocokan, pengurutan, dan pengurangan sebagai sub-bagiannya. Menyortir adalah urusan yang mahal.
Apa tujuan fase shuffling dan sorting pada reducer di Map Reduce Programming?
Jawaban:
Pertama-tama shuffling
adalah proses mentransfer data dari pembuat peta ke pereduksi, jadi saya pikir sudah jelas bahwa pereduksi itu perlu, karena jika tidak, mereka tidak akan dapat memiliki masukan (atau masukan dari setiap pembuat peta) . Pengacakan dapat dimulai bahkan sebelum fase peta selesai, untuk menghemat waktu. Itulah mengapa Anda dapat melihat status pengurangan lebih besar dari 0% (tetapi kurang dari 33%) ketika status peta belum 100%.
Sorting
menghemat waktu untuk peredam, membantunya dengan mudah membedakan kapan tugas pengurangan baru harus dimulai. Ini hanya memulai tugas pengurangan baru, ketika kunci berikutnya dalam data masukan yang diurutkan berbeda dari sebelumnya, untuk membuatnya lebih sederhana. Setiap tugas pengurangan mengambil daftar pasangan nilai-kunci, tetapi harus memanggil metode reduce () yang mengambil input daftar kunci (nilai), sehingga harus mengelompokkan nilai berdasarkan kunci. Sangat mudah untuk melakukannya, jika data masukan telah diurutkan sebelumnya (secara lokal) dalam fase peta dan cukup disortir-gabung dalam fase pengurangan (karena reduksi mendapatkan data dari banyak pembuat peta).
Partitioning
, yang Anda sebutkan di salah satu jawaban, adalah proses yang berbeda. Ini menentukan di mana peredam pasangan (kunci, nilai), keluaran dari fase peta, akan dikirim. Partisi default menggunakan hashing pada kunci untuk mendistribusikannya ke tugas pengurangan, tetapi Anda dapat menimpanya dan menggunakan Partisi kustom Anda sendiri.
Sumber informasi yang bagus untuk langkah-langkah ini adalah tutorial Yahoo ini .
Representasi grafis yang bagus dari ini adalah sebagai berikut (shuffle disebut "copy" dalam gambar ini):
Perhatikan itu shuffling
dan sorting
tidak dilakukan sama sekali jika Anda menetapkan pereduksi nol (setNumReduceTasks (0)). Kemudian, tugas MapReduce berhenti di fase peta, dan fase peta tidak menyertakan jenis penyortiran apa pun (bahkan fase peta lebih cepat).
PEMBARUAN: Karena Anda mencari sesuatu yang lebih resmi, Anda juga dapat membaca buku Tom White "Hadoop: The Definitive Guide". Inilah bagian yang menarik untuk pertanyaan Anda.
Tom White telah menjadi komiter Apache Hadoop sejak Februari 2007, dan merupakan anggota dari Apache Software Foundation, jadi saya rasa ini cukup kredibel dan resmi ...
Mari kita lihat kembali fase utama program Mapreduce.
The fase peta dilakukan dengan pembuat peta. Pemetaan berjalan pada pasangan kunci / nilai masukan yang tidak diurutkan. Setiap mapper mengeluarkan nol, satu, atau beberapa pasangan kunci / nilai keluaran untuk setiap pasangan kunci / nilai masukan.
The menggabungkan fase dilakukan dengan combiners. The combiner harus menggabungkan pasangan nilai / kunci dengan kunci yang sama. Setiap penggabung dapat menjalankan nol, sekali, atau beberapa kali.
The shuffle dan semacam fase dilakukan oleh framework. Data dari semua pembuat peta dikelompokkan berdasarkan kunci, dipisahkan di antara pereduksi dan diurutkan berdasarkan kunci. Setiap peredam mendapatkan semua nilai yang terkait dengan kunci yang sama. Pemrogram dapat menyediakan fungsi perbandingan khusus untuk pengurutan dan pemartisi untuk pemisahan data.
The partitioner yang memutuskan peredam akan mendapatkan kunci pasangan nilai tertentu.
The peredam Memperoleh diurutkan kunci / [daftar nilai] pasang, diurutkan berdasarkan kunci. Daftar nilai berisi semua nilai dengan kunci yang sama yang dihasilkan oleh pembuat peta. Setiap peredam mengeluarkan nol, satu atau beberapa pasangan kunci / nilai keluaran untuk setiap pasangan kunci / nilai masukan .
Lihat artikel javacodegeeks ini oleh Maria Jurcovicova dan artikel mssqltips oleh Datta untuk pemahaman yang lebih baik
Di bawah ini adalah gambar dari artikel safaribooksonline
ie
string di bawah Pengurang dan Output seharusnya benar-benar is
.
Saya berpikir untuk menambahkan beberapa poin yang hilang dalam jawaban di atas. Diagram yang diambil dari sini dengan jelas menyatakan apa yang sebenarnya terjadi.
Jika saya menyatakan lagi tujuan sebenarnya dari
Split: Meningkatkan pemrosesan paralel dengan mendistribusikan beban pemrosesan ke berbagai node (Mappers), yang akan menghemat waktu pemrosesan secara keseluruhan.
Gabungkan: Kecilkan output dari setiap Mapper. Ini akan menghemat waktu yang dihabiskan untuk memindahkan data dari satu node ke node lainnya.
Sortir (Acak & Urutkan): Memudahkan run-time untuk menjadwalkan (menelurkan / memulai) reduksi baru, di mana saat menelusuri daftar item yang diurutkan, setiap kali kunci saat ini berbeda dari sebelumnya, ia dapat menelurkan peredam baru .
Beberapa persyaratan pemrosesan data tidak perlu disortir sama sekali. Syncsort telah membuat penyortiran di Hadoop dapat dicolokkan. Ini adalah blog yang bagus dari mereka tentang penyortiran. Proses memindahkan data dari pembuat peta ke pereduksi disebut pengocokan, lihat artikel ini untuk informasi lebih lanjut tentang hal yang sama.
Saya selalu menganggap ini perlu karena output dari mapper adalah input untuk peredam, jadi itu diurutkan berdasarkan ruang kunci dan kemudian dibagi menjadi beberapa keranjang untuk setiap masukan peredam. Anda ingin memastikan semua nilai yang sama dari Kunci berakhir di keranjang yang sama menuju ke peredam sehingga dikurangi bersama-sama. Tidak ada gunanya mengirim K1, V2 dan K1, V4 ke reduksi yang berbeda karena mereka harus bersama-sama untuk dikurangi.
Mencoba menjelaskannya sesederhana mungkin
Pengacakan adalah proses di mana data perantara dari pembuat peta ditransfer ke 0,1 atau lebih pereduksi. Setiap peredam menerima 1 atau lebih kunci dan nilai terkaitnya tergantung pada jumlah pereduksi (untuk beban seimbang). Selanjutnya nilai yang terkait dengan setiap kunci diurutkan secara lokal.
Hanya ada dua hal yang MapReduce lakukan SECARA ASLI: Mengurutkan dan (diimplementasikan dengan mengurutkan) GroupBy yang dapat diskalakan.
Sebagian besar aplikasi dan Pola Desain di atas MapReduce dibangun di atas dua operasi ini, yang disediakan oleh shuffle dan sortir.
Ini bacaan yang bagus. Semoga membantu. Dalam hal penyortiran Anda mengkhawatirkan, saya pikir ini untuk operasi penggabungan pada langkah terakhir Peta. Ketika operasi peta selesai, dan perlu menulis hasilnya ke disk lokal, multi-penggabungan akan dioperasikan pada pemisahan yang dihasilkan dari buffer. Dan untuk operasi penggabungan, mengurutkan setiap partisi di tingkat lanjut sangat membantu.
Nah, Di Mapreduce ada dua frase penting yang disebut Mapper dan reducer keduanya terlalu penting, tapi Reducer itu wajib. Dalam beberapa program, reduksi bersifat opsional. Sekarang datanglah ke pertanyaan Anda. Mengocok dan menyortir adalah dua operasi penting di Mapreduce. Framework Hadoop pertama mengambil data terstruktur / tidak terstruktur dan memisahkan data menjadi Key, Value.
Sekarang program Mapper memisahkan dan menyusun data menjadi key dan values untuk diproses. Hasilkan nilai Kunci 2 dan nilai 2. Nilai-nilai ini harus diolah dan diatur ulang dalam urutan yang tepat untuk mendapatkan solusi yang diinginkan. Sekarang pengocokan dan penyortiran ini dilakukan di sistem lokal Anda (Kerangka kerja urus) dan proses di sistem lokal setelah kerangka proses membersihkan data di sistem lokal. Baik
Di sini kami menggunakan penggabung dan partisi juga untuk mengoptimalkan proses shuffle dan sortir ini. Setelah pengaturan yang tepat, nilai-nilai kunci tersebut diteruskan ke Reducer untuk mendapatkan keluaran Klien yang diinginkan. Akhirnya Reducer mendapatkan output yang diinginkan.
K1, V1 -> K2, V2 (kita akan menulis program Mapper), -> K2, V '(disini shuffle dan soft data) -> K3, V3 Generate the output. K4, V4.
Harap dicatat semua langkah ini hanya operasi logis, bukan mengubah data asli.
Pertanyaan Anda: Apa tujuan fase pengocokan dan pengurutan pada peredam dalam Pemrograman Pengurangan Peta?
Jawaban singkat: Untuk mengolah data untuk mendapatkan keluaran yang diinginkan. Mengocok adalah menggabungkan data, mengurangi adalah mendapatkan keluaran yang diharapkan.