MaxCompute menyediakan dua antarmuka pemrograman MapReduce dengan batasan penggunaan tertentu.
MaxCompute menyediakan dua antarmuka pemrograman MapReduce:
-
MaxCompute MapReduce: Antarmuka native MaxCompute yang menawarkan eksekusi cepat, pengembangan efisien, dan tidak mengekspos sistem file.
-
MaxCompute Extended MapReduce (MR2): Mendukung penjadwalan pekerjaan yang lebih kompleks dengan implementasi serupa antarmuka native. Berbeda dari MapReduce tradisional, MR2 mengubah model penjadwalan dan I/O dasar untuk menghilangkan operasi I/O berlebihan.
Kedua antarmuka ini sebagian besar konsisten dalam hal Istilah, pengiriman pekerjaan, Input dan output, serta Penggunaan resource, dengan perbedaan utama hanya pada Java SDK-nya. Lihat juga Hadoop MapReduce Tutorial.
MapReduce tidak dapat membaca dari atau menulis ke tabel eksternal.
MapReduce
Kasus penggunaan
MapReduce mendukung kasus penggunaan berikut:
-
Pencarian: web crawling, pembuatan inverted index, dan PageRank.
-
Analisis log akses web:
-
Menganalisis perilaku browsing dan belanja pengguna untuk rekomendasi personalisasi.
-
Menganalisis pola akses pengguna.
-
-
Analitik teks:
-
Hitung kata (WordCount) dan analisis TF-IDF pada novel populer.
-
Analisis kutipan dalam makalah akademis dan paten.
-
Analisis data Wikipedia.
-
-
Penambangan data besar: data tak terstruktur, spasial-temporal, dan citra.
-
Machine learning: Supervised Learning, Unsupervised Learning, serta algoritma klasifikasi seperti decision tree dan SVM.
-
Pemrosesan bahasa alami (NLP):
-
Pelatihan dan prediksi pada data besar.
-
Pembuatan matriks ko-okurensi kata, penambangan frequent itemset, dan deteksi dokumen duplikat.
-
-
Rekomendasi iklan: prediksi tingkat klik (CTR) dan tingkat konversi (CVR).
Cara kerja MapReduce
MapReduce memproses data dalam dua fase: Map lalu Reduce. Anda mengimplementasikan logika pemrosesan untuk kedua fase tersebut dalam framework MapReduce. Alur kerja lengkapnya adalah sebagai berikut:
-
Input: Data masukan dipisahkan menjadi blok-blok berukuran sama. Setiap blok diberikan ke worker Map terpisah untuk pemrosesan paralel.
-
Map: Setiap worker Map membaca dan memproses data, lalu memberikan kunci pada setiap catatan output. Kunci tersebut menentukan worker Reduce mana yang menerima catatan tersebut.
CatatanKunci dan worker Reduce memiliki hubungan many-to-one. Catatan dengan kunci yang sama dikirim ke worker Reduce yang sama, dan satu worker Reduce dapat menerima catatan dengan kunci berbeda.
-
Shuffle: Sebelum fase Reduce, framework mengurutkan data berdasarkan kunci sehingga catatan dengan kunci yang sama berdekatan. Jika Anda menentukan Combiner, framework akan mengagregasi catatan dengan kunci yang sama. Anda dapat mengimplementasikan logika Combiner kustom. Berbeda dari MapReduce klasik, MaxCompute mengharuskan parameter input dan output Combiner sesuai dengan parameter Reduce. Proses ini juga disebut Shuffle.
-
Reduce: Catatan dengan kunci yang sama dikirim ke worker Reduce yang sama. Setiap worker Reduce menerima data dari beberapa worker Map dan menjalankan operasi Reduce pada catatan yang dikelompokkan berdasarkan kunci, menghasilkan satu nilai output per kunci.
-
Output hasilnya.
Ini adalah ikhtisar singkat tentang framework MapReduce. Untuk informasi selengkapnya, lihat Istilah.
Contoh WordCount berikut menggambarkan setiap tahap MapReduce.
Asumsikan sebuah file teks a.txt berisi satu angka per baris dan Anda ingin menghitung kemunculan setiap angka. Setiap angka dianggap sebagai Word, dan jumlah kemunculannya adalah Count. Diagram berikut menunjukkan bagaimana MapReduce menyelesaikan tugas ini.
Procedure
-
Input: Teks dipisahkan menjadi blok dan setiap blok diberikan ke worker Map.
-
Map: Untuk setiap angka yang dibaca, atur Count-nya menjadi 1 dan keluarkan pasangan <Word, Count>, menggunakan Word sebagai kunci.
-
Shuffle > Combine dan urutkan: Output setiap worker Map diurutkan berdasarkan kunci (Word), lalu Combiner dijalankan untuk mengagregasi Count dari catatan dengan Word yang sama menjadi pasangan <Word, Count> baru.
-
Shuffle > Distribusikan ke Reduce: Data dikirim ke worker Reduce. Setiap worker Reduce mengurutkan ulang data yang diterima berdasarkan kunci.
-
Reduce: Setiap worker Reduce mengagregasi Count dari catatan dengan Word yang sama, menggunakan logika yang sama seperti Combiner, dan mengeluarkan hasil akhir.
-
Output hasilnya.
Semua data di MaxCompute disimpan dalam tabel. Oleh karena itu, input dan output MapReduce hanya dapat berupa tabel. Format output kustom dan antarmuka sistem file tidak didukung.
Batasan
-
Batasan umum MapReduce: Batasan.
-
Untuk batasan MapReduce pada eksekusi lokal, lihat Eksekusi lokal.
Extended MapReduce (MR2)
MR2 sebagian besar konsisten dengan MaxCompute MapReduce dalam cara penulisan fungsi Map dan Reduce. Perbedaan utamanya terletak pada eksekusi pekerjaan. Untuk contoh, lihat Contoh pipeline.
Latar belakang
MapReduce tradisional mengharuskan data output dari setiap putaran disimpan dalam sistem file terdistribusi (seperti HDFS atau tabel MaxCompute). Pipeline MapReduce multi-pekerjaan menulis data antara ke disk setelah setiap pekerjaan, tetapi tugas Map berikutnya sering kali hanya perlu membaca data tersebut sekali untuk fase Shuffle, sehingga menghasilkan I/O disk berlebihan.
MaxCompute mendukung model pemrograman yang lebih kompleks. Sistem ini dapat merangkai Reduce secara langsung setelah Reduce lain tanpa langkah Map antara. Hal ini memungkinkan pipeline dengan jumlah operasi Reduce berantai apa pun setelah Map, seperti Map > Reduce > Reduce, sehingga menghilangkan I/O yang tidak perlu.
Perbandingan dengan Hadoop Chain Mapper/Reducer
Hadoop Chain Mapper/Reducer mendukung operasi Map atau Reduce berantai yang serupa, tetapi secara mendasar berbeda dari MaxCompute MR2.
Chain Mapper/Reducer dibangun di atas model MapReduce tradisional dan hanya memungkinkan penambahan satu atau lebih operasi Mapper setelah Mapper atau Reducer yang sudah ada (tanpa Reducer tambahan). Ini memungkinkan Anda menggunakan kembali logika Mapper yang ada dengan membagi Map atau Reduce menjadi beberapa tahap Mapper, tetapi tidak mengubah model penjadwalan atau I/O dasar.