View a markdown version of this page

Konfigurasikan pencatatan dan debugging cluster Amazon EMR - Amazon EMR

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

Konfigurasikan pencatatan dan debugging cluster Amazon EMR

Salah satu hal yang harus diputuskan saat Anda merencanakan klaster adalah seberapa banyak dukungan debugging yang ingin Anda sediakan. Saat pertama kali mengembangkan aplikasi pemrosesan data, sebaiknya uji aplikasi pada klaster yang memproses sebagian kecil, namun mewakili data Anda. Jika Anda melakukan ini, Anda mungkin ingin memanfaatkan semua alat debugging yang ditawarkan Amazon EMR, seperti pengarsipan berkas log ke Amazon S3.

Setelah Anda menyelesaikan pengembangan dan memasukkan aplikasi pemrosesan data ke produksi penuh, Anda dapat memilih untuk mengurangi skala debugging. Melakukannya dapat menghemat biaya penyimpanan arsip berkas log di Amazon S3 dan mengurangi beban pemrosesan pada klaster karena tidak perlu lagi menulis status ke Amazon S3. Keuntungannya, tentu saja, adalah jika terjadi kesalahan, Anda hanya membutuhkan lebih sedikit alat untuk menyelidiki masalah tersebut.

berkas log default

Secara default, setiap cluster menulis file log di semua node. Ini ditulis untuk direktori /mnt/var/log/. Anda dapat mengaksesnya dengan menggunakan SSH untuk terhubung ke salah satu node seperti yang dijelaskan dalamConnect ke node primer Amazon EMR cluster menggunakan SSH. Amazon EMR mengumpulkan log sistem dan aplikasi tertentu yang dihasilkan oleh daemon Amazon EMR dan proses Amazon EMR lainnya untuk memastikan operasi layanan yang efektif.

catatan

Jika Anda menggunakan Amazon EMR rilis 6.8.0 atau versi lebih lama, file log tidak disimpan ke Amazon S3 selama penghentian cluster, sehingga Anda tidak dapat mengakses file log setelah node dihentikan. Amazon EMR merilis log arsip 6.9.0 dan yang lebih baru ke Amazon S3 selama penurunan skala cluster, sehingga file log yang dihasilkan di cluster tetap ada bahkan setelah node dihentikan.

Anda tidak perlu mengaktifkan apa pun agar file log ditulis di semua node. Ini adalah perilaku default Amazon EMR dan Hadoop.

Amazon EMR menangkap tiga kategori log untuk logging S3:

  • Log sistem: log daemon EMR

  • Log aplikasi: log kerangka kerja dari Hadoop, Spark, Hive, dan aplikasi lain yang berjalan di cluster

  • Log UI persisten: Log diperlukan untuk UI aplikasi persisten seperti Spark History Server dan Tez UI

Pada sistem file lokal, cluster menghasilkan beberapa jenis file log di/mnt/var/log, termasuk:

  • Langkah log — Log ini dihasilkan oleh layanan Amazon EMR dan berisi informasi tentang klaster dan hasil dari setiap langkah. File log disimpan dalam /mnt/var/log/hadoop/steps/ direktori pada node utama. Setiap langkah mencatat hasilnya dalam subdirektori bernomor terpisah: /mnt/var/log/hadoop/steps/s-stepId1/ untuk langkah pertama, /mnt/var/log/hadoop/steps/s-stepId2/, untuk langkah kedua, dan seterusnya. Pengidentifikasi langkah 13 karakter (misalnya stepId1, stepId2) unik untuk sebuah klaster.

  • Log komponen Hadoop dan YARN — Log untuk komponen yang terkait dengan Apache YARN dan MapReduce, misalnya, terkandung dalam folder terpisah /mnt/var/log di semua node. Lokasi berkas log untuk komponen Hadoop di bawah /mnt/var/log adalah sebagai berikut: hadoop-hdfs, hadoop-mapreduce, hadoop-httpfs, dan hadoop-yarn. Direktori hadoop-state-pusher adalah untuk output dari proses pendorong status Hadoop.

  • Log tindakan bootstrap — Jika tugas Anda menggunakan tindakan bootstrap, hasil dari tindakan tersebut akan dicatat. File log disimpan di//log/bootstrap-actionsmnt/var/pada semua node. Setiap tindakan bootstrap mencatat hasilnya di subdirektori bernomor terpisah: /mnt/var/log/bootstrap-actions/1/ untuk tindakan bootstrap pertama, /mnt/var/log/bootstrap-actions/2/, untuk tindakan bootstrap kedua, dan seterusnya.

  • Log status instans- Log ini memberikan informasi tentang CPU, status memori, dan utas pengumpul sampah dari simpul. File log disimpan /mnt/var/log/instance-state/ di semua node.

Arsipkan berkas log ke Amazon S3

catatan

Saat ini Anda tidak dapat menggunakan agregasi log ke Amazon S3 dengan utilitas yarn logs.

Amazon EMR merilis log arsip 6.9.0 dan yang lebih baru ke Amazon S3 selama penurunan skala cluster, sehingga file log yang dihasilkan di cluster tetap ada bahkan setelah node dihentikan. Perilaku ini diaktifkan secara otomatis, jadi Anda tidak perlu melakukan apa pun untuk menyalakannya. Untuk rilis Amazon EMR 6.8.0 dan yang lebih lama, Anda dapat mengonfigurasi cluster untuk mengarsipkan file log yang disimpan di semua node secara berkala ke Amazon S3. Hal ini memastikan bahwa berkas log tersedia setelah klaster berakhir, baik melalui pematian normal atau karena kesalahan. Amazon EMR arsip berkas log ke Amazon S3 dengan interval 5 menit.

Agar file log diarsipkan ke Amazon S3 untuk Amazon EMR rilis 6.8.0 dan sebelumnya, Anda harus mengaktifkan fitur ini saat meluncurkan cluster. Anda dapat melakukannya dengan menggunakan konsol, CLI, atau API. Secara default, klaster diluncurkan dengan menggunakan konsol yang telah mengaktifkan pengarsipan log. Untuk klaster yang diluncurkan menggunakan CLI atau API, log ke Amazon S3 harus diaktifkan secara manual.

Console
Untuk mengarsipkan file log ke Amazon S3 dengan konsol baru
  1. Masuk ke Konsol Manajemen AWS, dan buka konsol Amazon EMR di https://console.aws.amazon.com/emr.

  2. Di bawah EMR di EC2 di panel navigasi kiri, pilih Clu ster, lalu pilih Buat cluster.

  3. Di bawah log cluster, pilih kotak centang Publikasikan log khusus cluster ke Amazon S3.

  4. Di bidang lokasi Amazon S3, ketik (atau telusuri ke) jalur Amazon S3 untuk menyimpan log Anda. Jika Anda mengetikkan nama folder yang tidak ada di bucket, Amazon S3 membuatnya.

    Saat Anda menetapkan nilai ini, Amazon EMR menyalin file log dari instans EC2 di cluster ke Amazon S3. Ini mencegah file log hilang saat cluster berakhir dan EC2 mengakhiri instans yang menghosting cluster. Log ini berguna untuk tujuan pemecahan masalah. Untuk informasi lebih lanjut tentang format berkas log, lihat Tampilkan berkas log.

  5. Secara opsional, pilih kotak centang Enkripsi log khusus cluster. Kemudian, pilih AWS KMS kunci dari daftar, masukkan kunci ARN, atau buat kunci baru. Opsi ini hanya tersedia dengan Amazon EMR versi 5.30.0 dan yang lebih baru, tidak termasuk versi 6.0.0. Untuk menggunakan opsi ini, tambahkan izin AWS KMS untuk profil instans EC2 dan peran Amazon EMR Anda. Untuk informasi selengkapnya, lihat Untuk mengenkripsi file log yang disimpan di Amazon S3 dengan AWS Kunci yang dikelola pelanggan KMS.

  6. Pilih opsi lain yang berlaku untuk cluster Anda.

  7. Untuk meluncurkan cluster Anda, pilih Buat cluster.

CLI
Untuk mengarsipkan file log ke Amazon S3 dengan AWS CLI

Untuk mengarsipkan file log ke Amazon S3 menggunakan AWS CLI, ketik create-cluster perintah dan tentukan jalur log Amazon S3 menggunakan --log-uri parameter.

  1. Untuk mencatat file ke Amazon S3 ketik perintah berikut dan ganti myKey dengan nama pasangan kunci EC2 Anda.

    aws emr create-cluster --name "Test cluster" --release-label emr-7.13.0 --log-uri s3://DOC-EXAMPLE-BUCKET/logs --applications Name=Hadoop Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3
  2. Ketika Anda menentukan jumlah instance tanpa menggunakan --instance-groups parameter, satu node utama diluncurkan, dan instance yang tersisa diluncurkan sebagai node inti. Semua simpul akan menggunakan tipe instans yang ditentukan dalam perintah.

    catatan

    Jika sebelumnya Anda belum membuat peran layanan Amazon EMR default dan profil instans EC2, masukkan aws emr create-default-roles untuk membuatnya sebelum mengetik subperintah. create-cluster

Untuk mengenkripsi file log yang disimpan di Amazon S3 dengan AWS Kunci yang dikelola pelanggan KMS

Dengan Amazon EMR versi 5.30.0 dan yang lebih baru (kecuali Amazon EMR 6.0.0), Anda dapat mengenkripsi file log yang disimpan di Amazon S3 dengan kunci yang AWS dikelola pelanggan KMS. Untuk mengaktifkan opsi ini di konsol, ikuti langkah-langkah di Arsipkan berkas log ke Amazon S3. Profil instans Amazon EC2 dan peran Amazon EMR Anda harus memenuhi prasyarat berikut:

  • Profil instans Amazon EC2 yang digunakan untuk klaster Anda harus memiliki izin untuk menggunakan kms:GenerateDataKey.

  • Peran Amazon EMR yang digunakan untuk klaster Anda harus memiliki izin untuk menggunakan kms:DescribeKey.

  • Profil instans Amazon EC2 dan peran Amazon EMR harus ditambahkan ke daftar pengguna kunci untuk kunci yang dikelola pelanggan AWS KMS yang ditentukan, seperti yang ditunjukkan oleh langkah-langkah berikut:

    1. Buka konsol AWS Key Management Service (AWS KMS) di https://console.aws.amazon.com/kms.

    2. Untuk mengubah Wil AWS ayah, gunakan pemilih Wilayah di sudut kanan atas halaman.

    3. Pilih alias kunci KMS untuk dimodifikasi.

    4. Pada halaman detail kunci di bawah Pengguna Kunci, pilih Tambahkan.

    5. Di kotak dialog Tambahkan pengguna kunci, pilih profil instans Amazon EC2 dan peran Amazon EMR.

    6. Pilih Tambahkan.

  • Anda juga harus mengonfigurasi kunci KMS untuk mengizinkan persistentappui.elasticmapreduce.amazonaws.com dan Prinsi elasticmapreduce.amazonaws.com p Layanan untukkms:GenerateDataKey, kms:GenerateDataKeyWithoutPlaintext dan. kms:Decrypt Hal ini memungkinkan EMR untuk membaca dan menulis log yang dienkripsi dengan kunci KMS ke penyimpanan yang dikelola. Peran IAM Pengguna harus memiliki izin untuk menggunakan kms:GenerateDataKey dankms:Decrypt.

    { "Sid": "Allow User Role to use KMS key", "Effect": "Allow", "Principal": { "AWS": "User Role" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:elasticmapreduce:clusterId": "j-*", "kms:ViaService": "elasticmapreduce.region.amazonaws.com" } } }, { "Sid": "Allow Persistent APP UI to validate KMS key for write", "Effect": "Allow", "Principal":{ "Service": [ "elasticmapreduce.amazonaws.com" ] }, "Action": [ "kms:GenerateDataKeyWithoutPlaintext" ], "Resource": "*", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:elasticmapreduce:region:account:cluster/j-*", "kms:EncryptionContext:aws:elasticmapreduce:clusterId": "j-*" } } }, { "Sid": "Allow Persistent APP UI to Write/Read Logs", "Effect": "Allow", "Principal":{ "Service": [ "persistentappui.elasticmapreduce.amazonaws.com", "elasticmapreduce.amazonaws.com" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:elasticmapreduce:region:account:cluster/j-*", "kms:EncryptionContext:aws:elasticmapreduce:clusterId": "j-*", "kms:ViaService": "s3.region.amazonaws.com" } } }

    Sebagai praktik terbaik keamanan, kami sarankan Anda menambahkan aws:SourceArn kondisi kms:EncryptionContext dan. Kondisi ini membantu memastikan kunci hanya digunakan oleh Amazon EMR di EC2 dan hanya digunakan untuk log yang dihasilkan dari pekerjaan yang berjalan di cluster tertentu.

Untuk informasi selengkapnya, lihat Peran layanan IAM yang digunakan oleh Amazon EMR, dan Menggunakan kebijakan utama dalam panduan pengembang Layanan Manajemen K AWS unci.

Untuk mengumpulkan log di Amazon S3 menggunakan AWS CLI

catatan

Saat ini Anda tidak dapat menggunakan agregasi log dengan utilitas yarn logs. Anda hanya dapat menggunakan agregasi yang didukung oleh prosedur ini.

Agregasi log (Hadoop 2.x) mengkompilasi log dari semua kontainer untuk aplikasi individual ke dalam satu file. Untuk mengaktifkan agregasi log ke Amazon S3 menggunakan AWS CLI, Anda menggunakan tindakan bootstrap saat peluncuran cluster untuk mengaktifkan agregasi log dan untuk menentukan bucket untuk menyimpan log.

  • Untuk mengaktifkan agregasi log buat file konfigurasi berikut myConfig.json yang disebut yang berisi berikut ini:

    [ { "Classification": "yarn-site", "Properties": { "yarn.log-aggregation-enable": "true", "yarn.log-aggregation.retain-seconds": "-1", "yarn.nodemanager.remote-app-log-dir": "s3:\/\/DOC-EXAMPLE-BUCKET\/logs" } } ]

    Ketik perintah berikut dan ganti myKey dengan nama pasangan kunci EC2 Anda. Anda juga dapat mengganti teks merah dengan konfigurasi Anda sendiri.

    aws emr create-cluster --name "Test cluster" \ --release-label emr-7.13.0 \ --applications Name=Hadoop \ --use-default-roles \ --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge \ --instance-count 3 \ --configurations file://./myConfig.json

    Ketika Anda menentukan jumlah instance tanpa menggunakan --instance-groups parameter, satu node utama diluncurkan, dan instance yang tersisa diluncurkan sebagai node inti. Semua simpul akan menggunakan tipe instans yang ditentukan dalam perintah.

    catatan

    Jika sebelumnya Anda belum membuat peran layanan EMR default dan profil instans EC2, jalankan aws emr create-default-roles untuk membuatnya sebelum menjalankan subperintahcreate-cluster.

Untuk informasi selengkapnya tentang menggunakan perintah Amazon EMR di AWS CLI, lihat Refer ensi Per AWS CLI intah.

Alat diagnostik mandiri dan pemecahan masalah Amazon EMR

Runbook ini membantu mengidentifikasi kesalahan saat menjalankan pekerjaan di cluster Amazon EMR. Runbook menganalisis daftar log yang ditentukan pada sistem file dan mencari daftar kata kunci yang telah ditentukan sebelumnya. Entri log ini digunakan untuk membuat CloudWatch acara Amazon Events sehingga Anda dapat mengambil tindakan yang diperlukan berdasarkan peristiwa tersebut. Secara opsional, runbook menerbitkan entri log ke grup CloudWatch log Amazon Logs pilihan Anda. AWSSupport-AnalyzeEMRLogs.

Runbook ini membantu mendiagnosis log Amazon EMR di S3 menggunakan Amazon Athena dalam integrasi dengan Katalog Data AWS Glue. Amazon Athena digunakan untuk menanyakan file log Amazon EMR untuk wadah, log simpul, atau keduanya, dengan parameter opsional untuk rentang tanggal tertentu atau pencarian berbasis kata kunci. Runbook ini menyediakan daftar semua kesalahan dan pengecualian yang sering terjadi yang ditemukan di log cluster Amazon EMR, bersama dengan lokasi log S3 yang sesuai. Ini juga menyediakan ringkasan pengecualian unik yang diketahui yang dicocokkan dalam log Amazon EMR, bersama dengan resolusi yang direkomendasikan dan artikel Pusat Pengetahuan/RE: Post untuk membantu dalam pemecahan masalah. AWSSupport-DiagnoseEMRLogsWithAthena

Lokasi log

Daftar berikut mencakup semua jenis log dan lokasinya di Amazon S3. Anda dapat menggunakan ini untuk memecahkan masalah Amazon EMR.

Log langkah

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/steps/<step-id>/

Log aplikasi

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/containers/

Lokasi ini mencakup wadah stderr danstdout,directory.info,prelaunch.out, dan launch_container.sh log.

Log pengelola sumber daya

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/applications/hadoop-yarn/

Hadoop HDFS

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/applications/hadoop-hdfs/

Lokasi ini termasuk NameNode, DataNode, dan TimelineServer log YARN.

Log manajer simpul

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/applications/hadoop-yarn/

Instance-state log

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/daemons/instance-state/

Log penyediaan Amazon EMR

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/provision-node/*

Log sarang

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/applications/hive/*

  • Untuk menemukan log Hive di cluster Anda, hapus tanda bintang (*) dan tambahkan /var/log/hive/ ke tautan di atas.

  • Untuk menemukan HiveServer 2 log, hapus tanda bintang (*) dan tambahkan var/log/hive/hiveserver2.log ke tautan di atas.

  • Untuk menemukan log HiveCli, hapus tanda bintang (*) dan tambahkan /var/log/hive/user/hadoop/hive.log ke tautan di atas.

  • Untuk menemukan log Hive Metastore Server, hapus tanda bintang (*) dan tambahkan /var/log/hive/user/hive/hive.log ke tautan di atas.

Jika kegagalan Anda ada di node utama atau tugas aplikasi Tez Anda, berikan log dari wadah Hadoop yang sesuai.

Kontrol perilaku logging S3 (Amazon EMR 7.13.0 dan yang lebih baru)

Dimulai dengan Amazon EMR 7.13.0, Anda dapat mengontrol perilaku unggahan melalui fitur ini. S3LoggingConfiguration Ini memungkinkan Anda menentukan kebijakan unggahan yang berbeda untuk jenis log yang berbeda: log sistem, log aplikasi, dan log UI persisten.

Kebijakan unggah

Untuk setiap jenis log, Anda dapat menentukan salah satu kebijakan unggahan berikut. Jenis log yang tidak ditentukan akan default ke perilaku standar (emr-managed):

emr-managed (Default)

Perilaku standar. Log diunggah ke Amazon S3 seperti yang dikonfigurasi di AndaLogUri, dengan log tertentu disimpan oleh layanan untuk tujuan dukungan operasional dan pemecahan masalah.

on-customer-s3only

Customer-managed penyimpanan saja. Log hanya diunggah ke bucket S3 yang ditentukan pelanggan. Ini mengharuskan Anda untuk menentukan LogUri saat membuat cluster. Persistent-ui-logs tidak dapat memiliki kebijakan on-customer-s3only. Kebijakan yang diizinkan untuk persistent-ui-log dikelola dan dinonaktifkan emr.

dinonaktifkan

Tidak ada unggahan S3 untuk jenis log ini.

Contoh konfigurasi

Anda dapat mengonfigurasi logging S3 saat membuat cluster Amazon EMR baru melalui AWS CLI, atau AWS SDK. Konfigurasi ditentukan melalui MonitoringConfiguration parameter.

Contoh: Perilaku default

Jika Anda tidak menentukan S3LoggingConfiguration, semua jenis log default ke perilaku emr-managed:

aws emr create-cluster \ --name "MyCluster" \ --release-label emr-7.13.0 \ --instance-type m5.xlarge \ --instance-count 3 \ --log-uri s3://my-bucket/logs/ \ --use-default-roles
Contoh: Konfigurasi logging S3 khusus

Contoh ini menunjukkan cara mengonfigurasi kebijakan upload yang berbeda untuk setiap jenis log:

aws emr create-cluster \ --name "MyCluster" \ --release-label emr-7.13.0 \ --instance-type m5.xlarge \ --instance-count 3 \ --log-uri s3://my-bucket/logs/ \ --use-default-roles \ --monitoring-configuration '{ "S3LoggingConfiguration": { "LogTypeUploadPolicy": { "application-logs": "on-customer-s3only", "system-logs": "emr-managed" } } }'

Konfigurasi ini mengunggah log aplikasi hanya ke bucket S3 pelanggan, dan menetapkan kebijakan emr-managed untuk log sistem. Jenis log yang tidak ditentukan (log UI persisten) mengikuti perilaku default (emr-managed).

Pertimbangan-pertimbangan

  • Konfigurasi logging S3 hanya dapat diatur pada waktu pembuatan cluster dan tidak dapat dimodifikasi untuk menjalankan cluster.

  • Persistent-ui-logs tidak dapat memiliki kebijakan on-customer-s3only. Kebijakan yang diizinkan untuk persistent-ui-log dikelola dan dinonaktifkan emr.

  • LogUri Persyaratan: Saat menggunakan kebijakan on-customer-s3only untuk log sistem atau log aplikasi, Anda harus menentukan parameter. LogUri Tanpa LogUri, pembuatan cluster akan gagal.

  • Perilaku Default: Jika tidak S3LoggingConfiguration ditentukan, semua jenis log default ke perilaku yang dikelola emr.