Topik ini menjelaskan API MapReduce yang didukung oleh MaxCompute dan batasannya.
MaxCompute menyediakan dua versi API MapReduce:
MaxCompute MapReduce: API MapReduce asli. Versi ini berjalan cepat dan memudahkan pengembangan program tanpa perlu mengekspos sistem file.
Extended MaxCompute MapReduce (MR2): Versi ini mendukung logika penjadwalan pekerjaan yang kompleks. Metode implementasi sama dengan MaxCompute MapReduce. Model Extended MapReduce (MR2) menggunakan penjadwalan dan model I/O yang dioptimalkan untuk mengurangi operasi I/O yang tidak perlu selama proses pekerjaan.
Kedua versi tersebut serupa dalam hal istilah dasar, pengiriman pekerjaan, input dan output, serta penggunaan sumber daya. Perbedaan utama terletak pada SDK untuk Java. Untuk informasi lebih lanjut, lihat Hadoop MapReduce.
MapReduce tidak dapat digunakan untuk membaca atau menulis data ke tabel eksternal.
MapReduce
Skenario
MapReduce mendukung skenario berikut:
Pencarian: web crawl, indeks terbalik, PageRank.
Analisis log akses web:
Menganalisis dan merangkum karakteristik perilaku pengguna, seperti penjelajahan web dan belanja online, untuk memberikan rekomendasi personalisasi.
Menganalisis perilaku akses pengguna.
Analisis statistik teks:
Menghitung jumlah kata dan analisis term frequency-inverse document frequency (TFIDF) dari novel populer.
Melakukan analisis statistik referensi makalah akademik dan dokumen paten.
Menganalisis data Wikipedia.
Penggalian sejumlah besar data: penggalian data tidak terstruktur, data spatio-temporal, dan data gambar.
Machine learning: supervised learning, unsupervised learning, dan algoritma klasifikasi, seperti pohon keputusan dan support vector machines (SVM).
Pemrosesan bahasa alami (NLP):
Pelatihan dan prediksi berdasarkan data besar.
Pembuatan matriks ko-kejadian, penggalian data itemset sering, dan deteksi dokumen duplikat berdasarkan pustaka yang ada.
Rekomendasi iklan: prediksi laju klik (CTR) dan laju konversi (CVR).
Proses
Program MapReduce memproses data dalam dua tahap: map dan reduce. Program tersebut menjalankan tahap map sebelum tahap reduce. Anda dapat menentukan logika pemrosesan untuk kedua tahap, namun harus sesuai dengan konvensi kerangka kerja MapReduce. Berikut adalah cara kerangka kerja MapReduce memproses data:
Data input: Sebelum operasi map, data input dipartisi menjadi blok data dengan ukuran yang sama. Setiap blok data diproses sebagai input untuk satu mapper, memungkinkan penggunaan beberapa mapper secara bersamaan.
Tahap map: Setiap mapper membaca data partisinya, menghitung data tersebut, dan menetapkan kunci untuk setiap rekaman data. Kunci menentukan reducer ke mana rekaman data dikirim.
CatatanKunci dan reducer memiliki hubungan banyak-ke-satu. Rekaman data dengan kunci yang sama dikirim ke reducer yang sama. Sebuah reducer dapat menerima rekaman data dengan kunci yang berbeda.
Tahap shuffle: Sebelum tahap reduce, kerangka kerja MapReduce mengurutkan rekaman data berdasarkan kunci untuk memastikan bahwa rekaman data dengan kunci yang sama berdekatan. Jika Anda menentukan combiner, kerangka kerja MapReduce memanggil combiner untuk menggabungkan rekaman data dengan kunci yang sama. Proses ini disebut shuffle.
Tahap reduce: Rekaman data dengan kunci yang sama dikirim ke reducer yang sama. Sebuah reducer tunggal dapat menerima rekaman data dari beberapa mapper. Setiap reducer melakukan operasi reduce pada beberapa rekaman data dengan kunci yang sama. Setelah operasi reduce, semua rekaman data dengan kunci yang sama diubah menjadi nilai tunggal.
Hasil dihasilkan.
Untuk informasi lebih lanjut tentang kerangka kerja MapReduce, lihat Fitur.
Berikut ini menggunakan WordCount sebagai contoh untuk menjelaskan konsep terkait MaxCompute MapReduce pada berbagai tahap.
Asumsikan bahwa sebuah file bernama a.txt ada dan setiap baris file berisi digit. Anda ingin menghitung berapa kali setiap digit muncul. Setiap digit disebut kata, dan jumlah kemunculannya mewakili hitungan. Gambar berikut menunjukkan bagaimana MaxCompute MapReduce menghitung kata-kata.
Procedure
MaxCompute MapReduce mempartisi data dalam file a.txt dan menggunakan data di setiap partisi sebagai input untuk mapper.
Mapper memproses data input dan mencatat nilai parameter Count sebagai 1 untuk setiap digit yang diperoleh. Dengan cara ini, pasangan <Word, Count> dihasilkan. Nilai parameter Word digunakan sebagai kunci untuk pasangan baru yang dihasilkan.
Pada tahap awal shuffle, rekaman data yang dihasilkan oleh setiap mapper diurutkan berdasarkan kunci (nilai parameter Word). Setelah rekaman data diurutkan, rekaman tersebut digabungkan dengan mengakumulasi nilai Count yang memiliki kunci yang sama untuk menghasilkan pasangan <Word, Count> baru.
Pada tahap akhir shuffle, rekaman data dikirim ke reducer. Reducer mengurutkan rekaman data yang diterima berdasarkan kunci.
Setiap reducer menggunakan logika yang sama dengan combiner untuk memproses data. Setiap reducer mengakumulasi nilai Count dengan kunci yang sama (nilai parameter Word).
Hasil dihasilkan.
Semua data MaxCompute disimpan dalam tabel. Oleh karena itu, input dan output MaxCompute MapReduce hanya dapat dalam format tabel. Anda tidak dapat menentukan format output, dan tidak ada antarmuka yang mirip dengan sistem file yang disediakan.
Batasan
Untuk informasi lebih lanjut tentang batasan MaxCompute MapReduce, lihat Batasan pada MaxCompute MapReduce.
Untuk informasi lebih lanjut tentang batasan pada pelaksanaan MaxCompute MapReduce dalam mode lokal, lihat Pelaksanaan lokal.
Model Extended MapReduce
Dalam model Extended MapReduce, fungsi Map dan Reduce ditulis dengan cara yang sama seperti MaxCompute. Perbedaannya terletak pada bagaimana pekerjaan dijalankan. Untuk informasi lebih lanjut, lihat Contoh pipeline.
Informasi latar belakang
Model MapReduce terdiri dari beberapa pekerjaan MapReduce. Dalam model MapReduce tradisional, output setiap pekerjaan MapReduce harus ditulis ke disk dalam sistem file terdistribusi seperti HDFS atau ke tabel MaxCompute. Namun, tugas Map berikutnya mungkin hanya perlu membaca output sekali untuk mempersiapkan tahap Shuffle. Mekanisme ini menghasilkan operasi I/O yang berlebihan.
Logika komputasi dan penjadwalan MaxCompute mendukung model pemrograman yang lebih kompleks. Operasi Map dapat diikuti oleh sejumlah operasi Reduce berturut-turut tanpa memerlukan operasi Map di antaranya, seperti Map-Reduce-Reduce.
Perbandingan dengan Hadoop ChainMapper dan ChainReducer
Demikian pula, Hadoop ChainMapper dan ChainReducer juga mendukung operasi Map atau Reduce yang diserialisasi. Namun, mereka pada dasarnya berbeda dari model Extended MapReduce.
Hadoop ChainMapper dan ChainReducer didasarkan pada model MapReduce tradisional. Mereka hanya mendukung operasi Map setelah operasi Map atau Reduce asli. Salah satu manfaatnya adalah Anda dapat menggunakan kembali logika bisnis Mapper untuk membagi operasi Map atau Reduce menjadi beberapa tahap Mapper. Namun, ini tidak mengubah penjadwalan atau model I/O.