Topik ini menjelaskan masalah umum dalam pekerjaan Pengiriman data MaxCompute (versi baru) dan solusinya.
Error "User does not exist"
Jika catatan eksekusi pekerjaan Pengiriman data MaxCompute (versi baru) menampilkan error ODPS-0420095: Access Denied - Authorization Failed [4002], You don't exist in project ****. Context ID:11111-1111-111-1111-11111111. --->Tips: Pricipal:INVALID$v4_11111111111; You don't exist in project ****, hal ini menunjukkan bahwa pengguna target belum ditambahkan atau ditambahkan secara salah ke ruang kerja MaxCompute. Untuk mengatasi masalah ini, tambahkan kembali pengguna tersebut dan lengkapi otorisasi. Untuk informasi lebih lanjut, lihat Otorisasi role default untuk menulis data ke MaxCompute (untuk pengiriman data dalam akun yang sama) atau Otorisasi role kustom untuk menulis data ke MaxCompute (untuk pengiriman data dalam akun yang sama).
Error "RAM role has no permission"
Jika catatan eksekusi pekerjaan Pengiriman data MaxCompute (versi baru) menampilkan error ODPS-0420095: Access Denied - Authorization Failed [4019], You have NO privilege 'odps:Describe' on {acs:odps:*:projects/****/tables/****}. Context ID:111111-1111-11111-1111-1111111. --->Tips: Pricipal:INVALID$v4_111111111, hal ini menunjukkan bahwa RAM role tidak memiliki izin yang diperlukan saat ditambahkan sebagai anggota ruang kerja MaxCompute. Untuk mengatasinya, berikan kembali izin yang diperlukan kepada RAM role tersebut. Untuk informasi lebih lanjut, lihat Otorisasi role default untuk menulis data ke MaxCompute (untuk pengiriman data dalam akun yang sama) atau Otorisasi role kustom untuk menulis data ke MaxCompute (untuk pengiriman data dalam akun yang sama).
Error FAILED: mismatched input
Jika Anda adalah RAM user dan mengalami error FAILED: mismatched input saat menambahkan RAM role sebagai anggota ruang kerja MaxCompute, hal ini menunjukkan bahwa akun Anda tidak memiliki izin untuk menjalankan pernyataan seperti ADD USER. Untuk mengatasi hal ini, gunakan Akun Alibaba Cloud atau RAM user dengan kebijakan berikut untuk menjalankan pernyataan seperti ADD USER. Setelah operasi satu kali ini selesai, Anda dapat menggunakan RAM user tersebut untuk menjalankan pernyataan seperti ADD USER tanpa mengalami error ini lagi.
{
"Version": "1",
"Statement": [
{
"Action": "ram:CreateServiceLinkedRole",
"Resource": "*",
"Effect": "Allow",
"Condition": {
"StringEquals": {
"ram:ServiceName": "usermgmt.odps.aliyuncs.com"
}
}
}
]
}
Izin pengguna tidak mencukupi
Jika pengguna saat ini mengalami error FAILED: ODPS-0130013:Authorization exception - Authorization Failed [4003], You have NO privilege to do the PROJECT SECURITY OPERATION for {acs:odps:*:projects/****/authorization/users}. Context ID:1111-11111-1111-1111-11111. saat menambahkan RAM role sebagai anggota ruang kerja MaxCompute, hal ini menunjukkan bahwa pengguna tersebut tidak memiliki izin yang diperlukan untuk operasi keamanan proyek di MaxCompute. Untuk mengatasinya, berikan role admin kepada pengguna tersebut. Untuk informasi lebih lanjut, lihat Hubungan antara izin MaxCompute dan DataWorks.
Ikuti langkah-langkah berikut untuk memberikan role admin kepada pengguna.
-
Masuk ke Konsol MaxCompute.
-
Di pojok kiri atas halaman, pilih wilayah.
-
Pada halaman Project Management, temukan proyek target dan klik Manage di kolom Actions.
-
Klik tab Role Permissions.
-
Temukan role admin dan klik Manage Members di kolom Actions.
-
Pada panel Manage Members, masukkan nama akun di bidang Account name to add.
-
Pada kotak dialog Manage Members, klik OK. Pilih akun target, klik tanda panah kanan (>) untuk memindahkannya ke daftar Added Accounts, lalu klik OK.
Error "SlotExceeded" dan "io: read/write on closed pipe"
Jika catatan eksekusi pekerjaan Pengiriman data MaxCompute (versi baru) menampilkan salah satu error berikut, konkurensi pengiriman data saat ini mungkin melebihi kuota slot MaxCompute:
SlotExceeded: Your slot quota is exceeded. Region: cn-shanghai Project: xxx Slot Quota Exceeded. Total: xxx, Acquired: xxx
maxcompute error ClientError: io: read/write on closed pipe
Untuk mengurangi kemungkinan terjadinya masalah ini, gunakan __receive_time__ sebagai bidang partisi. Bidang ini didasarkan pada waktu penerimaan di sisi server. Log dalam jendela waktu penerimaan yang sama akan ditulis ke partisi yang sama, sehingga membantu menghindari penulisan konkuren ke beberapa partisi dan dapat mengurangi konsumsi slot. Anda dapat mengubah bidang partisi saat membuat pekerjaan Pengiriman data MaxCompute (versi baru).
Partisi berdasarkan waktu log
Saat membuat pekerjaan Pengiriman data MaxCompute (versi baru), Anda dapat mengatur MaxCompute Partition Key Column menjadi __partition_time__ untuk mempartisi data berdasarkan waktu log. Dalam konfigurasi MaxCompute partition key column, __partition_time__ dan __receive_time__ adalah bidang partisi yang ditentukan sistem yang dihitung dari waktu log dan waktu penerimaan, secara berturut-turut. Anda juga dapat mengklik ikon plus (+) untuk menambahkan kolom kunci partisi kustom dan memetakannya ke bidang yang sudah ada di Simple Log Service, seperti http_method atau operation.
Bidang __partition_time__ dihitung berdasarkan nilai bidang __time__ di Simple Log Service. String waktu dihasilkan berdasarkan zona waktu dan format waktu partisi yang ditentukan. Untuk mencegah melebihi batas partisi tabel tunggal di MaxCompute, MaxCompute menyelaraskan nilai kolom kunci partisi berbasis tanggal ke interval 1.800 detik (30 menit). Untuk informasi lebih lanjut, lihat Bidang __partition_time__.
Kolom partisi MaxCompute: __partition_time__ dan __receive_time__
__partition_time__ didasarkan pada waktu log. Nilai __partition_time__ dihitung dari bidang __time__ suatu log. Karena __time__ berasal dari log, partisi target dapat dipengaruhi oleh latensi pengumpulan dan ketidaksesuaian jam klien.
|
Skenario |
Waktu penerimaan |
Partisi target |
Penyebab |
|
Log normal A |
10:00 |
|
Waktu log sama dengan waktu penerimaan. |
|
Log B yang tertunda |
10:00 |
|
Waktu log lebih awal daripada waktu penerimaan. |
|
Log C dari klien dengan ketidaksesuaian jam |
10:00 |
|
Waktu log lebih baru daripada waktu penerimaan. |
Jika log dalam jendela waktu penerimaan yang sama tersebar ke beberapa partisi, masalah berikut dapat terjadi:
-
Partisi historis terus menerima data yang datang terlambat, sehingga sulit menentukan apakah suatu partisi telah lengkap.
-
Partisi masa depan mungkin muncul lebih awal dari yang diharapkan karena log dengan stempel waktu klien yang tidak normal ditulis ke rentang partisi masa depan.
-
Penjadwalan tugas downstream menjadi lebih sulit karena batas partisi tidak jelas dan manajemen siklus hidup data menjadi lebih kompleks.
__receive_time__ didasarkan pada waktu penerimaan di sisi server. Simple Log Service menulis bidang ini saat menerima log, sehingga nilainya tidak terpengaruh oleh latensi pengumpulan, ketidaksesuaian jam klien, atau pengecualian penguraian waktu log. Pada contoh sebelumnya, ketiga log tersebut diterima pada pukul 10:00 dan ditulis ke p=10:00.
Menggunakan __receive_time__ memberikan manfaat berikut:
-
Log dalam jendela waktu penerimaan yang sama ditulis ke partisi yang sama, dan batas partisi tetap jelas.
-
Kemajuan partisi konsisten dengan kemajuan aktual pengiriman data, sehingga kelengkapan partisi lebih mudah ditentukan.
-
Penjadwalan tugas downstream lebih dapat diprediksi karena partisi historis cenderung tidak diisi ulang berulang kali.
Direkomendasikan untuk menggunakan __receive_time__ sebagai bidang partisi. Dalam skenario data real-time, __partition_time__ dan __receive_time__ biasanya tidak memiliki perbedaan signifikan. Namun, di lingkungan produksi dengan data yang tertunda atau ketidaksesuaian jam klien, __receive_time__ memberikan perilaku partisi yang lebih stabil.
Lihat partisi tabel MaxCompute
Jalankan perintah show partitions <table-name>; untuk melihat partisi suatu tabel. Dalam perintah ini, ganti <table-name> dengan nama tabel Anda.
Kirim data waktu log
Saat membuat pekerjaan Pengiriman data MaxCompute (versi baru), Anda dapat menambahkan bidang __time__ di bagian MaxCompute Common Column. Bidang __time__ merepresentasikan waktu log dalam format Stempel waktu UNIX, akurat hingga detik.
Sebagai contoh, Anda dapat memetakan bidang __time__ ke kolom tujuan di tabel MaxCompute Anda, seperti c14.
Nilai bidang null
Masalah ini biasanya disebabkan oleh ketidakcocokan tipe data, kegagalan konversi tipe, atau bidang yang tidak ada di log sumber.
-
Untuk menangani ketidakcocokan tipe data atau kegagalan konversi, lihat Tangani data kotor.
-
Untuk informasi tentang persyaratan format tipe data, lihat Stabilitas dan batasan.
Kegagalan pekerjaan setelah mengaktifkan daftar putih IP
Jika Anda mengaktifkan daftar putih alamat IP untuk proyek MaxCompute (misalnya, daftar putih alamat IP jaringan klasik), pekerjaan pengiriman data mungkin gagal dengan pesan error seperti berikut:
error:RequestId=202211181752058538dc0b0018****, ErrorCode=NoPermission, ErrorMessage=Access denied by project ip white list: sourceIP:'192.168.x.x' is not in white list. project: slstest-1 from:
errorType:odps.OdpsError
jobId:****-****
Untuk mengatasi kegagalan yang disebabkan oleh daftar putih alamat IP, jalankan perintah berikut di MaxCompute:
-
Masuk ke Konsol MaxCompute .
-
Di pojok kiri atas halaman, pilih wilayah tempat proyek Anda berada.
-
Di panel navigasi kiri MaxCompute, pilih .
-
Di DataWorks, lakukan langkah-langkah berikut. Untuk informasi lebih lanjut tentang cara menggunakan DataWorks, lihat Lanjutan: Analisis kategori produk terlaris.
-
Kueri konfigurasi daftar putih alamat IP saat ini.
setproject; select 1; -
Tambahkan
AliyunLogSLRService,AliyunLogDefaultServiceke daftar putih layanan yang sudah ada dengan menggunakan perintah berikut:setproject odps.security.ip.whitelist.services=AliyunLogSLRService,AliyunLogDefaultService; -
Setelah konfigurasi selesai, jalankan perintah berikut untuk memverifikasi pengaturan daftar putih baru.
setproject; select 1;Setelah menjalankan perintah
setproject, sistem akan mengembalikan properti konfigurasi proyek. Periksa nilai propertiodps.security.ip.whitelist.servicesdanodps.security.outbound.destination:odps.output.field.formatter= odps.project.longtimetmpfile.max.remain.days=30 odps.project.longtimetmpfile.min.remain.days=3 odps.project.maintenance.alarm={"storage.warning.ratio":"85","storage.warning.receiver":"","storage.critical.receiver":"","storage.critical.ratio":"95"} odps.project.maintenance.window= odps.schema.evolution.enable=false odps.schema.model.enabled=false odps.security.enabledownloadprivilege=false odps.security.ip.whitelist= odps.security.ip.whitelist.services=AliyunLogSLRService,AliyunLogDefaultService odps.security.outbound.destination= odps.security.vpc.whitelist= odps.session.flag.authority=false odps.spark.kube.mode=false odps.sql.acid.table.enable=true odps.sql.allow.cartesian=false odps.sql.allow.fullscan=false odps.sql.auto.mv.quota.gb=-1 odps.sql.cfile2.field.maxsize=8192
-