HBase
 sql >> Teknologi Basis Data >  >> NoSQL >> HBase

6 Teknik Pengoptimalan Pekerjaan MapReduce Terbaik

Penyetelan performa akan membantu mengoptimalkan Hadoop . Anda pertunjukan. Di blog ini, kita akan membahas semua teknik untuk optimasi Pekerjaan MapReduce.

Dalam tutorial MapReduce ini, kami akan memberikan 6 tips penting untuk Pengoptimalan Pekerjaan MapReduce seperti konfigurasi yang tepat dari cluster Anda, penggunaan kompresi LZO, Penyetelan jumlah tugas MapReduce yang tepat, dll.

Kiat untuk Pengoptimalan Pekerjaan MapReduce

Berikut adalah beberapa teknik pengoptimalan pekerjaan MapReduce yang akan membantu Anda dalam mengoptimalkan performa pekerjaan MapReduce.

1. Konfigurasi cluster Anda yang tepat

  • Dengan -noatime opsi Dfs dan penyimpanan MapReduce sudah terpasang. Ini akan menonaktifkan waktu akses. Dengan demikian meningkatkan kinerja I/O.
  • Cobalah untuk menghindari RAID pada TaskTracker dan mesin datanode. Ini biasanya mengurangi kinerja.
  • Pastikan Anda telah mengonfigurasi mapred.local.dir dan dfs.data.dir untuk menunjuk ke satu direktori di setiap disk Anda. Ini untuk memastikan bahwa semua kapasitas I/O Anda digunakan.
  • Anda harus memantau grafik penggunaan swap dan penggunaan jaringan dengan perangkat lunak. Jika Anda melihat bahwa swap sedang digunakan, Anda harus mengurangi jumlah RAM yang dialokasikan untuk setiap tugas di mapred.child.java.opts .
  • Pastikan Anda memiliki pemantauan cerdas terhadap status kesehatan drive disk Anda. Ini adalah salah satu praktik penting untuk  penyesuaian performa MapReduce.

2. Penggunaan kompresi LZO

Untuk data Menengah, ini selalu merupakan ide yang bagus. Setiap tugas Hadoop yang menghasilkan jumlah keluaran peta yang tidak dapat diabaikan akan mendapatkan manfaat dari kompresi data menengah dengan LZO.

Meskipun LZO menambahkan sedikit overhead ke CPU, ini menghemat waktu dengan mengurangi jumlah IO disk selama pengacakan.

Setel mapred.compress.map.output ke true untuk mengaktifkan kompresi LZO

3. Penyetelan jumlah tugas MapReduce yang tepat

  • Dalam pekerjaan MapReduce, jika setiap tugas membutuhkan waktu 30-40 detik atau lebih, maka akan mengurangi jumlah tugas. Pemeta  atau peredam  proses melibatkan hal-hal berikut:pertama, Anda harus memulai JVM (JVM dimuat ke dalam memori). Maka Anda perlu menginisialisasi JVM. Dan setelah pemrosesan (pemeta/peredam) Anda perlu melakukan de-inisialisasi JVM. Dan tugas JVM ini sangat mahal. Misalkan kasus di mana mapper menjalankan tugas hanya selama 20-30 detik. Untuk ini, kita perlu memulai/menginisialisasi/menghentikan JVM. Ini mungkin memakan waktu yang cukup lama. Jadi, sangat disarankan untuk menjalankan tugas setidaknya selama 1 menit.
  • Jika pekerjaan memiliki input lebih dari 1 TB. Maka Anda harus mempertimbangkan untuk meningkatkan ukuran blok dataset input menjadi 256M atau bahkan 512M. Jadi jumlah tugas akan lebih kecil. Anda dapat mengubah ukuran blok dengan menggunakan perintah Hadoop distcp –Hdfs.block.size=$[256*1024*1024] /path/to/inputdata /path/to/inputdata-with-largeblocks
  • Seperti yang kita ketahui bahwa setiap tugas berjalan setidaknya selama 30-40 detik. Anda harus menambah jumlah tugas mapper menjadi beberapa kelipatan dari jumlah slot mapper di cluster.
  • Jangan terlalu banyak mengurangi tugas – untuk sebagian besar pekerjaan. Jumlah tugas pengurangan sama dengan atau sedikit kurang dari jumlah slot pengurangan di cluster.

4. Penggabung antara Pemeta dan Peredam

Jika algoritme melibatkan komputasi agregat dalam bentuk apa pun, maka kita harus menggunakan Kombiner. Combiner melakukan beberapa agregasi sebelum data mengenai peredam.

Kerangka kerja Hadoop MapReduce berjalan menggabungkan secara cerdas untuk mengurangi jumlah data yang akan ditulis ke disk. Dan data tersebut harus ditransfer antara tahap komputasi Peta dan Reduce.

5. Penggunaan jenis data yang paling tepat dan ringkas yang dapat ditulis

Pengguna data besar menggunakan jenis Teks yang dapat ditulis secara tidak perlu untuk beralih dari Hadoop Streaming ke Java MapReduce. Teks bisa nyaman. Tidak efisien untuk mengonversi data numerik ke dan dari string UTF8. Dan benar-benar dapat menghabiskan sebagian besar waktu CPU.

6. Penggunaan kembali Writables

Banyak pengguna MapReduce membuat satu kesalahan yang sangat umum yaitu mengalokasikan objek Writable baru untuk setiap output dari mapper/peredam. Misalkan, misalnya, implementasi word-count mapper sebagai berikut:

public void map(...) {
...
for (String word: words) {
output.collect(new Text(word), new IntWritable(1));
}

Implementasi ini menyebabkan alokasi ribuan objek berumur pendek. Sementara pengumpul sampah Java melakukan pekerjaan yang wajar dalam menangani hal ini, lebih efisien untuk menulis:

class MyMapper ... {
Text wordText = new Text();
IntWritable one = new IntWritable(1);
public void map(...) {
... for (String word: words)
{
wordText.set(word);
output.collect(word, one); }
}
}

Kesimpulan

Oleh karena itu, ada berbagai teknik pengoptimalan pekerjaan MapReduce yang membantu Anda dalam mengoptimalkan pekerjaan MapReduce. Seperti menggunakan penggabung antara mapper dan Reducer, dengan penggunaan kompresi LZO, penyetelan yang tepat dari jumlah tugas MapReduce, Penggunaan kembali yang dapat ditulis.

Jika Anda menemukan teknik lain untuk pengoptimalan pekerjaan MapReduce, beri tahu kami di bagian komentar yang diberikan di bawah.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pengantar Hadoop Combiner, Cara Kerja &Keuntungan

  2. Hadoop MapReduce Tutorial untuk Pemula

  3. Perhentian Berikutnya – Membangun Pipa Data dari Ujung ke Wawasan

  4. How-to:Gunakan Antarmuka Apache HBase REST, Bagian 1

  5. Plugin Cloudera Replication memungkinkan replikasi x-platform untuk Apache HBase