Beberapa tahun yang lalu, MapReduce dipuji sebagai revolusi pemrograman terdistribusi. Ada juga kritikus tetapi pada umumnya ada hype antusiasme. Bahkan dipatenkan! [1]
Namanya mengingatkan map
dan reduce
dalam pemrograman fungsional, tetapi ketika saya membaca (Wikipedia)
Langkah peta: Node master mengambil input, membaginya menjadi sub-masalah yang lebih kecil, dan mendistribusikannya ke node pekerja. Node pekerja dapat melakukan ini lagi pada gilirannya, yang mengarah ke struktur pohon multi-level. Node pekerja memproses masalah yang lebih kecil, dan meneruskan jawabannya kembali ke node masternya.
Kurangi langkah: Master node kemudian mengumpulkan jawaban untuk semua sub-masalah dan menggabungkan mereka dalam beberapa cara untuk membentuk output - jawaban untuk masalah yang pada awalnya berusaha dipecahkan.
atau [2]
Internal MAP: [...] MAP membagi nilai input menjadi kata-kata. [...] MAP dimaksudkan untuk mengaitkan setiap pasangan kunci / nilai yang diberikan dari input dengan banyak pasangan kunci / nilai potensial.
Internal REDUCE: [...] [REDUCE] melakukan agregasi imperatif (katakanlah, reduksi): ambil banyak nilai, dan kurangi menjadi satu nilai.
Saya tidak bisa tidak berpikir: ini membagi & menaklukkan (dalam arti Mergesort), sederhana dan sederhana! Jadi, apakah ada kebaruan (konseptual) di MapReduce di suatu tempat, atau itu hanya implementasi baru dari ide-ide lama yang berguna dalam skenario tertentu?
Jawaban:
M / R tidak membagi & menaklukkan. Ini tidak melibatkan aplikasi algoritma yang diulang ke subset yang lebih kecil dari input sebelumnya. Ini adalah pipeline (fungsi yang ditentukan sebagai komposisi fungsi yang lebih sederhana) di mana tahapan-tahapan pipa berganti-ganti peta dan mengurangi operasi. Tahap yang berbeda dapat melakukan operasi yang berbeda.
MapReduce tidak membuka dasar baru dalam teori perhitungan - ia tidak menunjukkan cara baru untuk menguraikan masalah menjadi operasi yang lebih sederhana. Ini menunjukkan bahwa operasi sederhana tertentu praktis untuk kelas masalah tertentu.
Kontribusi makalah MapReduce adalah
Beberapa kritik termasuk dalam kelas-kelas ini:
sumber
EDIT (Maret 2014) Saya harus mengatakan bahwa saya telah bekerja lebih banyak pada algoritma untuk model komputasi tipe MapReduce, dan saya merasa seperti saya menjadi terlalu negatif. Teknik Divide-Compress-Conquer yang saya bicarakan di bawah ini sangat serbaguna, dan dapat menjadi dasar dari algoritma yang menurut saya tidak mudah dan menarik.
Biarkan saya menawarkan jawaban yang akan jauh lebih rendah daripada Mike dalam hal kelengkapan, tetapi dari model sudut pandang teori komputasi / algoritma.
Sekarang, saya pikir ini sebenarnya adalah twist yang menarik pada divide dan conquer, twistnya adalah bahwa setelah tahap divide Anda perlu mengompres solusi subproblem sehingga sebuah prosesor tunggal dapat menaklukkan. Namun, sepertinya ini satu-satunya teknik yang kami buat sejauh ini. Gagal pada masalah dengan grafik jarang, seperti konektivitas jarang misalnya. Bandingkan ini dengan model streaming, yang menghasilkan banyak ide baru, seperti algoritma pengambilan sampel yang cerdik dari Flajolet dan Martin, algoritma pairing deterministik dari Misra dan Gries, kekuatan teknik sketsa sederhana, dll.
Sebagai paradigma pemrograman, pengurangan peta sangat berhasil. Komentar saya menganggap pengurangan peta sebagai model perhitungan yang menarik. Model teoritis yang baik agak aneh. Jika mereka mengikuti kenyataan terlalu dekat, mereka sulit digunakan, tetapi yang lebih penting, (meminjam istilah dari pembelajaran mesin) teorema terbukti untuk model yang terlalu spesifik tidak menggeneralisasi, yaitu tidak berlaku pada model lain. Itu sebabnya kami ingin mengabstraksi sedetail mungkin, sambil tetap menyisakan cukup untuk menantang kami untuk membuat algoritma baru. Akhirnya, ide-ide baru itu akhirnya bisa menemukan jalan kembali ke dunia nyata. PRAM adalah salah satu model yang tidak realistis yang menghasilkan ide-ide menarik tetapi ide-ide tersebut terbukti jarang berlaku untuk komputasi paralel dunia nyata. Di sisi lain, streaming juga tidak realistis, tapi itu menginspirasi ide-ide algoritmik yang sebenarnya digunakan di dunia nyata. Lihathitung-min sketsa . Teknik sketsa sebenarnya juga digunakan dalam sistem yang didasarkan pada pengurangan peta.
sumber
Saya sangat setuju dengan Anda. Dari perspektif konseptual, tidak ada yang benar-benar baru: Map / Reduce awalnya dikenal dalam Parallel Computing sebagai model pemrograman data-flow. Namun, dari sudut pandang praktis, Map / Reduce seperti yang diusulkan oleh Google dan dengan implementasi open-source berikutnya juga telah memicu Cloud Computing dan sekarang cukup populer untuk dekomposisi dan pemrosesan paralel yang sangat sederhana. Tentu saja, itu tidak cocok untuk hal lain yang membutuhkan domain kompleks atau dekomposisi fungsional.
sumber
Saya pikir Anda sudah memukul kepala dengan komentar Anda.
Tidak benar bahwa dalam peta bahasa fungsional apa pun dapat diparalelkan - bahasanya harus murni . (Saya percaya Haskell adalah satu-satunya bahasa fungsional yang samar-samar secara umum. Lisp, OCaml, dan Scala semuanya tidak murni.)
Kami sudah tahu tentang manfaat kode murni sejak sebelum timesharing, ketika para insinyur pertama kali mem-pipel prosesor mereka. Jadi mengapa tidak ada yang menggunakan bahasa murni?
Ini sangat, sangat, sangat sulit. Pemrograman dalam bahasa murni sering terasa seperti pemrograman dengan kedua tangan terikat di belakang Anda.
Apa yang dilakukan MR adalah melonggarkan batasan kemurnian, dan menyediakan kerangka kerja untuk bagian-bagian lain (seperti fase acak) sehingga cukup mudah untuk menulis kode yang dapat didistribusikan untuk sebagian besar masalah.
sumber
count
variabel yang dibagikan dalam kode semu Anda; cukup memberikan nilai saat ini untukdo_something
bekerja. Bisakah Anda memberikan contoh algoritma d & c "nyata" (Mergesort, Quicksort, ...) yang mana panggilan rekursif bergantung satu sama lain (setelah panggilan dikeluarkan)?