Mengoptimalkan performa untuk operasi Amazon EMR di DynamoDB - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengoptimalkan performa untuk operasi Amazon EMR di DynamoDB

Operasi Amazon EMR pada tabel DynamoDB dihitung sebagai operasi baca, dan tunduk pada pengaturan throughput yang ditetapkan tabel. Amazon EMR mengimplementasikan logikanya sendiri untuk mencoba menyeimbangkan beban pada tabel DynamoDB Anda untuk meminimalkan kemungkinan melebihi throughput ditetapkan Anda. Pada akhir setiap kueri Hive, Amazon EMR mengembalikan informasi tentang klaster yang digunakan untuk memproses kueri, termasuk berapa kali throughput ditetapkan Anda terlampaui. Anda dapat menggunakan informasi ini, serta CloudWatch metrik tentang throughput DynamoDB Anda, untuk mengelola beban pada tabel DynamoDB Anda dengan lebih baik dalam permintaan-permintaan berikutnya.

Faktor-faktor berikut mempengaruhi performa kueri Hive ketika bekerja dengan tabel DynamoDB.

Unit kapasitas baca yang ditetapkan

Ketika Anda menjalankan kueri Hive terhadap tabel DynamoDB, Anda harus memastikan bahwa Anda telah menetapkan jumlah unit kapasitas baca yang memadai.

Misalnya, anggaplah bahwa Anda telah menetapkan 100 unit kapasitas baca untuk tabel DynamoDB Anda. Ini akan memungkinkan Anda melakukan 100 baca, atau 409,600 byte, per detik. Jika tabel yang berisi 20GB data (21.474.836.480 byte), dan kueri Hive Anda melakukan pindai tabel penuh, Anda dapat memperkirakan berapa lama kueri dijalankan:

21.474.836.480/409.600 = 52.429 detik = 14,56 jam

Satu-satunya cara untuk mengurangi waktu yang diperlukan adalah menyesuaikan unit kapasitas baca pada tabel sumber DynamoDB. Menambahkan lebih banyak simpul ke klaster Amazon EMR tidak akan membantu.

Dalam output Hive, persentase penyelesaian diperbarui ketika satu proses pemeta atau lebih telah selesai dilakukan. Untuk tabel DynamoDB yang besar dengan pengaturan Kapasitas Baca ditetapkan yang rendah, output persentase penyelesaian mungkin tidak diperbarui dalam waktu yang lama; dalam kasus di atas, tugas akan muncul menjadi selesai 0% dalam beberapa jam. Untuk status yang lebih rinci pada kemajuan tugas Anda, buka konsol Amazon EMR; Anda akan dapat melihat status tugas pemeta individu, dan statistik untuk baca data.

Anda juga dapat masuk ke antarmuka Hadoop pada simpul utama dan melihat statistik Hadoop. Ini menunjukkan status tugas peta individu dan beberapa statistik data baca. Untuk informasi selengkapnya, lihat Antarmuka web yang di-hosting pada simpul utama dalam Panduan Pengelolaan Amazon EMR.

Pengaturan persen baca

Secara default, Amazon EMR mengelola beban permintaan terhadap tabel DynamoDB Anda sesuai dengan throughput ditetapkan Anda saat ini. Namun, ketika Amazon EMR mengembalikan informasi tentang tugas Anda yang mencakup throughput ditetapkan dalam jumlah yang tinggi melebihi tanggapan, Anda dapat menyesuaikan tingkat baca default menggunakan parameter dynamodb.throughput.read.percent ketika Anda menyiapkan tabel Hive. Untuk informasi selengkapnya tentang pengaturan parameter persentase baca, lihat Pilihan Hive.

Pengaturan persentase tulis

Secara default, Amazon EMR mengelola beban permintaan terhadap tabel DynamoDB Anda sesuai dengan throughput ditetapkan Anda saat ini. Namun, ketika Amazon EMR mengembalikan informasi tentang tugas Anda yang mencakup throughput ditetapkan dalam jumlah yang tinggi melebihi tanggapan, Anda dapat menyesuaikan tingkat tulis default menggunakan parameter dynamodb.throughput.write.percent ketika Anda menyiapkan tabel Hive. Untuk informasi selengkapnya tentang pengaturan parameter persentase tulis, lihat Pilihan Hive.

Pengaturan durasi coba lagi

Secara default, Amazon EMR menjalankan kembali kueri Hive jika ia belum mengembalikan hasil dalam waktu dua menit, yang merupakan interval coba lagi default. Anda dapat menyesuaikan interval ini dengan mengatur parameter dynamodb.retry.duration ketika Anda menjalankan kueri Hive. Untuk informasi selengkapnya tentang pengaturan parameter persentase tulis, lihat Pilihan Hive.

Jumlah tugas peta

Pemeta daemon yang diluncurkan Hadoop untuk memproses permintaan Anda untuk mengekspor dan melakukan data kueri pada data yang disimpan dalam DynamoDB dibatasi pada tingkat baca maksimum 1 MiB per detik untuk membatasi kapasitas baca yang digunakan. Jika Anda memiliki throughput ditetapkan tambahan yang tersedia di DynamoDB, Anda dapat meningkatkan performa ekspor Hive dan operasi kueri dengan meningkatkan jumlah pemeta daemon. Untuk melakukan ini, Anda dapat meningkatkan jumlah instans EC2 dalam klaster Anda atau meningkatkan jumlah pemeta daemon yang berjalan pada setiap instans EC2.

Anda dapat meningkatkan jumlah instans EC2 dalam sebuah klaster dengan melakukan pemfilteran stopword atas klaster saat ini dan meluncurkannya kembali dengan instans EC2 dalam jumlah besar. Anda menentukan jumlah instans EC2 di kotak dialog Konfigurasikan Instans EC2 jika Anda meluncurkan klaster dari konsol Amazon EMR, atau dengan pilihan --num-instances jika Anda meluncurkan klaster dari CLI.

Jumlah tugas peta yang berjalan pada instans tergantung pada tipe instans EC2. Untuk informasi lebih lanjut tentang tipe instans EC2 yang didukung dan jumlah pemeta yang disediakan masing-masing tipe, lihat Konfigurasi tugas. Di sana, Anda akan menemukan bagian "Konfigurasi Tugas" untuk masing-masing konfigurasi yang didukung.

Cara lain untuk meningkatkan jumlah pemeta daemon adalah dengan mengubah parameter konfigurasi mapreduce.tasktracker.map.tasks.maximum Hadoop ke nilai yang lebih tinggi. Ini memiliki keuntungan yang memberikan Anda lebih banyak pemeta tanpa perlu meningkatkan jumlah atau ukuran instans EC2, sehingga Anda bisa menghemat uang Anda. Kerugiannya adalah bahwa dengan mengatur nilai ini terlalu tinggi akan dapat menyebabkan instans EC2 di klaster Anda kehabisan memori. Untuk mengatur mapreduce.tasktracker.map.tasks.maximum, luncurkan klaster dan tentukan nilai untuk mapreduce.tasktracker.map.tasks.maximum sebagai properti dari klasifikasi konfigurasi peta-situs. Ini ditunjukkan dalam contoh berikut. Untuk informasi selengkapnya, lihat Konfigurasikan aplikasi.

{ "configurations": [ { "classification": "mapred-site", "properties": { "mapred.tasktracker.map.tasks.maximum": "10" } } ] }

Permintaan data paralel

Beberapa permintaan data, baik dari lebih dari satu pengguna atau lebih dari satu aplikasi ke satu tabel dapat menguras throughput ditetapkan baca dan performa menjadi lambat.

Durasi proses

konsistensi data di DynamoDB tergantung pada pesanan operasi baca dan tulis pada setiap simpul. Saat kueri Hive sedang berjalan, aplikasi lain mungkin memuat data baru ke dalam tabel DynamoDB atau memodifikasi atau menghapus data yang ada. Dalam hal ini, hasil kueri Hive mungkin tidak akan mencerminkan perubahan yang dilakukan terhadap data saat kueri sedang berjalan.

Hindari throughput yang melebihi

Saat menjalankan kueri Hive terhadap DynamoDB, berhati-hatilah untuk tidak melebihi throughput ditetapkan Anda, karena ini akan menguras kapasitas yang dibutuhkan untuk panggilan aplikasi Anda untuk DynamoDB::Get. Untuk memastikan bahwa hal ini tidak terjadi, Anda harus secara teratur memantau volume baca dan throttling pada panggilan aplikasiDynamoDB::Get dengan memeriksa log dan memantau metrik di Amazon CloudWatch.

Waktu permintaan

Melakukan penjadwalan kueri Hive yang mengakses tabel DynamoDB ketika ada permintaan yang lebih rendah pada tabel DynamoDB akan dapat meningkatkan performa. Misalnya, jika sebagian besar pengguna aplikasi Anda tinggal di San Francisco, Anda dapat memilih untuk mengekspor data pada pukul 4 pagi setiap hari. PST, ketika sebagian besar pengguna tertidur, dan tidak memperbarui catatan dalam basis data DynamoDB Anda.

Tabel berbasis waktu

Jika data diatur sebagai serangkaian tabel DynamoDB berbasis waktu, misalnya satu tabel per hari, maka Anda dapat mengekspor data ketika tabel tidak aktif lagi. Anda dapat menggunakan teknik ini untuk membuat cadangan data ke Amazon S3 secara berkelanjutan.

Data yang diarsipkan

Jika Anda berencana untuk menjalankan banyak kueri Hive terhadap data yang disimpan dalam DynamoDB dan aplikasi Anda dapat mentolerir data yang diarsipkan, Anda mungkin ingin mengekspor data ke HDFS atau Amazon S3 dan menjalankan kueri Hive terhadap salinan data, bukan terhadap DynamoDB. Ini menghemat operasi baca dan throughput ditetapkan Anda.