Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memahami log yang disunting
AWS Clean Rooms menyunting log Spark sebelum mengekspornya sehingga log yang diekspor tidak mengungkapkan isi data anggota, atau mengidentifikasi tabel dan lokasi penyimpanan data sumber. AWS Clean Rooms merekonstruksi catatan log dan memancarkan hanya bidang yang diketahui aman untuk dibagikan. Beberapa informasi disimpan dengan sengaja, termasuk nama-nama kolom yang dibaca kueri.
Redaksi tidak membedakan antara anggota. Harapkan nama tabel dan nilai kueri Anda sendiri untuk disunting dari log yang Anda ekspor untuk kueri Anda sendiri, dengan persyaratan yang sama dengan informasi anggota lain. Bidang kosong dan placeholder normal dan tidak menunjukkan masalah dengan ekspor.
Apa yang terkandung dalam log yang diekspor
Log yang diekspor menyimpan informasi yang diperlukan untuk mendiagnosis kegagalan dan masalah kinerja:
-
Tim ing — Durasi tugas dan tahap, waktu berjalan, waktu CPU, waktu pengumpulan sampah, deserialisasi dan waktu serialisasi hasil, waktu tunggu shuffle, dan waktu penulisan shuffle semuanya dipertahankan dengan tepat. Timing adalah sinyal utama untuk analisis kinerja.
-
Pengidentifikasi dan jumlah eksekusi Spark — ID pekerjaan, tahap, tugas, dan percobaan, jumlah partisi, jumlah tugas, ID pelaksana, nama host, dan port.
-
Struktur rencana kueri — Pohon rencana fisik, termasuk nama operator seperti
HashAggregateSortMergeJoin,Exchange, dan, sehingga Anda dapat melihat bentuk rencana dan bagaimana mesin memilih untuk menjalankan kueri Anda. Nama operator yang bukan milik Spark muncul sebagai[REDACTED]. -
Nama kolom sumber — Nama kolom yang berasal dari tabel yang dipindai, sehingga Anda dapat melihat kolom mana yang digunakan dalam filter, gabungan, dan agregasi. Nama yang dibuat kueri, seperti alias, tidak dipertahankan. Untuk informasi selengkapnya, lihat Bagaimana nama kolom dan tabel diperlakukan.
-
Jenis pemindaian dan format file — Operator pemindaian biasanya menyertakan nama tabel yang sedang dibaca. Nama diganti dengan formulir yang hanya mengidentifikasi jenis pemindaian dan format file, seperti
Scan parquet, sehingga Anda masih dapat mengetahui bagaimana data dibaca. Jika format file tidak AWS Clean Rooms mengenali, operator munculScantanpa format. -
Kelas kesalahan — Ketika kueri gagal, log mengidentifikasi jenis kesalahan tetapi bukan data yang menyebabkannya. Mereka melaporkan kelas kesalahan Spark, kode SQLSTATE-nya, dan pesan standar yang didefinisikan Spark untuk kelas itu, dengan
<placeholder>token pesan dibiarkan tidak terisi, karena nilai yang akan mengisinya berasal dari data. Pemeran yang gagal, misalnya, laporan[CAST_INVALID_INPUT]dan pesan yang menjelaskan bahwa nilai dari satu jenis tidak dapat ditransfer ke jenis lain, tanpa menunjukkan nilainya. Ketika satu kegagalan menyebabkan yang lain, kelas kesalahan dalam rantai dilaporkan bersama, hingga beberapa tingkat dalam. Kegagalan yang tidak berasal dari Spark dilaporkan hanya sebagai kesalahan non-Spark, tanpa kelas.Kegagalan tugas individu hanya melaporkan jenis kegagalan, seperti
ExceptionFailure. Mereka tidak membawa kelas kesalahan mereka sendiri. -
Konfigurasi Spark — Pengaturan yang nilainya selalu angka, ukuran, atau kata kunci tetap, dan yang paling sering diperlukan untuk mendiagnosis masalah kinerja: inti driver dan eksekutor dan memori, pecahan memori dan pengaturan off-heap, pengaturan alokasi dinamis, pengaturan eksekusi kueri adaptif, paralelisme default dan jumlah partisi shuffle, ambang gabungan siaran, ukuran partisi maksimum, pengaturan kompresi shuffle, mode penjadwal, dan serializer. Sebagian besar konfigurasi lainnya disunting, karena pengaturan dapat berisi jalur, pengidentifikasi, dan teks kueri. Salah satu pengaturan ini juga dihilangkan jika nilainya bukan angka biasa, ukuran, atau kata kunci.
-
Pemanfaatan memori dan volume data — Memori eksekusi puncak, memori dan tumpahan disk, memori JVM eksekutor, ukuran data yang di-cache, jumlah blok shuffle, dan jumlah byte dan catatan yang dibaca dan ditulis, termasuk volume baca dan tulis acak. Angka-angka ini dibulatkan ke bawah, bukan tepat. Untuk informasi selengkapnya, lihat Bagaimana log yang disunting berbeda dari log Spark standar.
-
Mengapa eksekutor berhenti — Kategori untuk setiap eksekutor yang berhenti, seperti kehabisan memori, dimatikan oleh pengemudi, dinonaktifkan, atau gagal merespons. Ini sering merupakan cara tercepat untuk menjelaskan mengapa kueri gagal. Log juga mencatat setiap eksekutor atau host yang Spark menghentikan penjadwalan pekerjaan, yang berguna ketika kegagalan terus berulang di satu tempat. Untuk informasi selengkapnya, lihat Bagaimana log yang disunting berbeda dari log Spark standar.
-
Detail kegagalan pengambilan acak — Ketika tugas tidak dapat mengambil output shuffle, pengidentifikasi shuffle, peta, indeks peta, dan pengurangan dipertahankan, bersama dengan eksekutor dan host yang dicoba diambil. Ini memungkinkan Anda membedakan kegagalan berulang terhadap satu sumber, yang biasanya menunjukkan eksekutor yang tidak responsif, dari kegagalan yang tersebar di banyak sumber, yang biasanya menunjukkan masalah jaringan sementara.
Apa yang disunting
-
Nilai data — Nilai literal dari kueri Anda, dan nilai data dari tabel apa pun. Predikat filter menunjukkan kolom mana yang difilter tetapi bukan nilai yang dibandingkan.
-
Nama tabel dan lokasi penyimpanan — Pengidentifikasi tabel, nama database, dan jalur Amazon S3.
-
Teks kueri — Pernyataan SQL dan deskripsi apa pun yang terkait dengan kueri.
-
Teks pesan kesalahan dan jejak tumpukan — Karena pesan kesalahan dapat mengutip nilai yang menyebabkan kesalahan, teks pesan dan jejak tumpukan dihapus. Nama kelas pengecualian yang mendasarinya juga disunting, karena pengecualian yang dilemparkan oleh fungsi yang ditentukan pengguna membawa nama yang dipilih oleh penulis kueri. Kelas kesalahan Spark dipertahankan sebagai gantinya, untuk kueri dan pekerjaan. Alasan tahap gagal dan alasan tugas dibunuh juga disunting.
-
Nama yang direkam Spark untuk pekerjaannya sendiri — Nama dan situs panggilan tahap dan kumpulan data yang di-cache, dan nama aplikasi. Ini adalah bidang teks bebas yang dapat menggemakan nama tabel atau jalur penyimpanan. Di Spark History Server, tahapan karena itu muncul tanpa deskripsi yang biasanya mengidentifikasinya, dan Anda menemukan panggung berdasarkan ID dan tempatnya dalam rencana sebagai gantinya.
-
Nama kolom yang dihitung dan dialias — Nama yang dibuat kueri alih-alih dibaca dari tabel, karena mesin kueri menghasilkan nama seperti itu dari ekspresi dan nama dapat berisi nilai. Ini muncul sebagai pengidentifikasi numerik seperti
#42. Untuk informasi selengkapnya, lihat Bagaimana nama kolom dan tabel diperlakukan. -
Detail pemindaian — Skema baca, predikat filter yang diterapkan pada setiap pemindaian (filter yang ditekan ke bawah, filter partisi, dan filter data), dan lokasi data.
-
Tautan ke log driver dan eksekutor — URL log yang dicatat Spark untuk setiap pelaksana dan untuk driver. Di Spark History Server, tautan yang biasanya membuka log driver atau eksekutor tidak diisi.
-
Pengidentifikasi sumber daya dan titik akhir layanan — ID AWS akun, ARN seperti peran dan AWS KMS kunci IAM, dan URL titik akhir dari layanan yang AWS Clean Rooms memanggil untuk menjalankan kueri Anda.
-
AWS detail layanan — nama AWS Clean Rooms kelas, entri classpath, konfigurasi JVM, dan Hadoop dan properti sistem. Properti pekerjaan juga disunting, terlepas dari pengidentifikasi yang dibutuhkan Spark History Server untuk mengaitkan pekerjaan dengan eksekusi kueri yang menjadi miliknya.
Bagaimana nama kolom dan tabel diperlakukan
Log yang diekspor menyimpan nama-nama kolom yang dibaca kueri. Nama tabel dan alias kolom yang dibuat dalam kueri disunting. Nama yang dibuat kueri dihasilkan dari ekspresi yang dinamai, dan nama yang dihasilkan dapat berisi nilai dari kueri: SELECT 'confidential' menghasilkan kolom bernamaconfidential. Oleh karena itu, nama hanya muncul ketika dapat ditelusuri kembali ke kolom tabel yang dipindai. Setiap nama lain diganti dengan pengenal numerik.
Misalnya, pertimbangkan kueri berikut.
SELECT user_id, SUM(amount) AS total FROM sales WHERE region = 'us-west' GROUP BY user_id
Log yang diekspor merepresentasikannya sebagai berikut.
| Elemen kueri | Di log yang diekspor |
|---|---|
Kolomuser_id,amount, dan region |
Sajikan berdasarkan nama, sehingga Anda dapat melihat apa yang dikelompokkan, dijumlahkan, dan difilter kueri |
Tabelsales, database, dan lokasi penyimpanannya |
Tidak hadir |
Nilainya 'us-west' |
Diganti dengan [REDACTED] |
Alias total |
Diganti dengan pengidentifikasi numerik, karena kueri membuat nama daripada membacanya dari tabel |
Bagaimana log yang disunting berbeda dari log Spark standar
Jumlah baris dan volume data adalah perkiraan
Jumlah catatan, volume byte, ukuran tumpahan, dan pengukuran memori puncak dibulatkan ke bawah ke urutan besarnya, karena penghitungan yang tepat dapat mengungkapkan ukuran data anggota lain. Tugas yang membaca 1.342 catatan melaporkan 1.000. Pengukuran di bawah 100 dilaporkan sebagai 0.
Karena setiap angka dibulatkan ke bawah, tugas yang melaporkan 100 dan tugas yang melaporkan 1.000 mungkin telah membaca jumlah catatan yang hampir sama. Perlakukan angka-angka yang berbeda hanya satu urutan besarnya dengan hati-hati; perbedaan yang lebih besar, seperti 1.000 terhadap 10.000.000, masih dapat dipercaya menunjukkan kemiringan.
Nilai yang disunting mengambil lebih dari satu bentuk
Dalam rencana kueri, nilai yang disunting muncul sebagai teks [REDACTED] literal. Di tempat lain di log, bidang yang disunting biasanya kosong sebagai gantinya. Ini mungkin string kosong, daftar kosong, atau nilai yang tidak ada sama sekali, sehingga Spark History Server masih dapat membaca catatan. Kedua bentuk itu berarti hal yang sama.
Paket kueri tidak menggunakan sintaks operator yang sudah dikenal
Ekspresi dalam rencana ditulis sebagai panggilan fungsi daripada dalam notasi matematika. Perbandingan muncul sebagai EqualTo(#12, [REDACTED]) bukan(a = 5). Nama fungsi muncul dalam formulir ini juga, dan nama fungsi yang ditentukan pengguna tidak muncul sama sekali.
Hanya rencana fisik yang disertakan
Log yang diekspor berisi rencana fisik. Mereka tidak berisi rencana logis yang diurai, dianalisis, atau dioptimalkan yang biasanya menyertainya.
Per-task metrik disunting
Grafik rencana mencantumkan metrik yang dilaporkan setiap operator, seperti jumlah baris keluaran. Metrik yang dilaporkan tugas individual tidak menunjukkan nilai sama sekali, karena angka per tugas di belakangnya dihapus. Untuk nomor tingkat tugas, gunakan metrik per tugas di tampilan panggung sebagai gantinya.
Metrik driver Spark dibulatkan ke bawah
Metrik yang dihitung Spark pada driver, termasuk yang untuk siaran, pemindaian, dan penulisan, memang melaporkan nilai, tetapi dibulatkan ke bawah ke urutan besarnya karena alasan yang sama seperti jumlah catatan dan volume data: angka yang tepat dapat mengungkapkan ukuran data anggota lain.
Hanya log peristiwa yang diekspor
Ekspor berisi log peristiwa Spark. Itu tidak berisi driver bentuk bebas dan output eksekutor yang ditulis Spark di sampingnya, karena satu baris dari output itu dapat berisi nama tabel, jalur penyimpanan, atau nilai data. Diagnosis harus dilakukan dari log peristiwa.
Kegagalan pelaksana menunjukkan pesan kesalahan umum
Karena alasan bentuk bebas eksekutor berhenti dapat berisi detail AWS Clean Rooms layanan, log malah melaporkan pesan kesalahan umum, seperti keluar dari memori, shutdown yang diprakarsai oleh driver, pelaksana yang dinonaktifkan, atau proses yang hilang. Catatan ini khusus untuk AWS Clean Rooms dan bukan acara Spark standar, jadi Server Sejarah Spark dan alat lain mungkin tidak menampilkannya. Jika Anda tidak melihatnya, Anda dapat menemukannya di file log peristiwa yang diekspor.
Catatan yang tidak dikenali disunting secara default
Jika catatan log bukan yang AWS Clean Rooms mengenali, semua teksnya diganti dengan[REDACTED], termasuk nama bidangnya, dan semua nomornya diganti dengan nol. Hanya jenis rekaman yang dipertahankan. Catatan semacam itu tidak membawa informasi diagnostik.