Topik ini menjelaskan error umum dalam MaxFrame.
Masalah 1: Error "invalid type INT for function UDF definition, you need to set odps.sql.type.system.odps2=true; to use it"
Penyebab: Error ini terjadi karena Anda menggunakan tipe data MaxCompute V2.0, tetapi versi tipe data MaxCompute V2.0 belum diaktifkan, sehingga pekerjaan gagal saat dieksekusi.
Solusi: Aktifkan tipe data MaxCompute V2.0 menggunakan flag berikut:
from maxframe import config # Tambahkan ini sebelum new_session config.options.sql.settings = { "odps.sql.type.system.odps2": "true" }
Masalah 2: Error "UDF : No module named 'cloudpickle'"
Penyebab: Paket cloudpickle yang diperlukan tidak tersedia.
Solusi: Referensikan image dasar MaxCompute sebagai berikut:
from maxframe import config # Tambahkan ini sebelum new_session config.options.sql.settings = { "odps.session.image": "common", }
Masalah 3: Cara menggunakan kembali resource dalam user-defined function (UDF) yang dikirimkan oleh DataFrame (apply)
Pada beberapa skenario user-defined function (UDF), Anda mungkin perlu membuat atau menghapus resource tertentu, seperti menginisialisasi koneksi database atau memuat model, dan ingin operasi tersebut hanya dilakukan sekali saat setiap UDF dimuat.
Untuk menggunakan kembali resource, Anda dapat memanfaatkan fitur Python di mana nilai default parameter fungsi hanya diinisialisasi sekali.
Sebagai contoh, pada UDF berikut, model hanya dimuat sekali:
def predict(s, _ctx={}):
from ultralytics import YOLO
# Nilai awal _ctx adalah dict kosong, yang hanya diinisialisasi sekali selama eksekusi Python.
# Saat menggunakan model, periksa apakah model sudah ada di _ctx. Jika belum, muat dan simpan ke dalam dict tersebut.
if not _ctx.get("model", None):
model = YOLO(os.path.join("./", "yolo11n.pt"))
_ctx["model"] = model
model = _ctx["model"]
# Kemudian, panggil API model yang relevan.
Contoh berikut menunjukkan UDF yang perlu menghapus resource dengan menggunakan kelas kustom bernama MyConnector untuk membuat dan menutup koneksi database:
class MyConnector:
def __init__(self):
# Buat koneksi database di __init__
self.conn = create_connection()
def __del__(self):
# Tutup koneksi database di __del__
try:
self.conn.close()
except:
pass
def process(s, connector=MyConnector()):
# Panggil langsung koneksi database di dalam connector. Anda tidak perlu membuat dan menutup koneksi lagi di dalam UDF.
connector.conn.execute("xxxxx")
Jumlah kali inisialisasi bergantung pada jumlah worker UDF. Setiap worker memiliki lingkungan Python terpisah. Misalnya, jika pemanggilan UDF memproses 100.000 baris data dan tugas tersebut ditugaskan ke 10 worker UDF, setiap worker memproses 10.000 baris. Dalam kasus ini, inisialisasi berjalan total 10 kali—sekali per worker.
Masalah 4: Cara memperbarui versi MaxFrame di kelompok sumber daya DataWorks (eksklusif dan tujuan umum)
Masalah 5: Praktik terbaik untuk menggunakan gambar kustom MaxFrame
Masalah 6: Error kueri "ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: java.lang.RuntimeException: sequence_row_id cannot be applied because of : no CMF"
Solusi: Tambahkan `index_col` ke kueri sebagai berikut:
df2=md.read_odps_table("tablename",index_col="cloumn").to_pandas()
df2=reset_index(inplace=True)Masalah 7: Error "Cannot determine dtypes by calculating with enumerate data, please specify it as arguments" saat menggunakan metode dengan UDF, seperti apply
Penyebab: MaxFrame mencoba menginferensi tipe DataFrame atau Series yang dikembalikan oleh UDF untuk memeriksa dan membangun struktur data bagi perhitungan selanjutnya. Namun, dtypes mungkin tidak dapat ditentukan dengan benar dalam situasi berikut:
UDF tidak dapat dijalankan di lingkungan saat ini, misalnya karena ketergantungan pada gambar kustom, library pihak ketiga, atau parameter input yang salah.
Jika
output_typeditentukan, tipe pengembalian aktual fungsi mungkin tidak sesuai denganoutput_typeyang dideklarasikan.
Solusi: Perbaiki kode atau tentukan `dtypes` secara eksplisit agar MaxFrame mengetahui tipe pengembalian UDF. Contohnya:
Untuk mengembalikan DataFrame yang berisi satu kolom int:
df.apply(..., dtypes=pd.Series([np.int_]), output_type="dataframe")Untuk mengembalikan DataFrame yang berisi dua kolom, A dan B:
df.apply(..., dtypes={"A": np.int_, "B": np.str_}, output_type="dataframe")Untuk mengembalikan Series bernama flag dengan tipe bool:
df.apply(..., dtype="bool", name="flag", output_type="series")
Masalah 8: Cara menambahkan flag dengan cara yang sama seperti di SQL
from maxframe import config
config.options.sql.settings = {
"odps.stage.mapper.split.size": "8",
"odps.stage.joiner.num": "20"
}Masalah 9: Cara mereferensikan paket pihak ketiga dalam pengembangan MaxFrame
Untuk informasi lebih lanjut, lihat Referensi paket dan gambar pihak ketiga.
from maxframe.udf import with_resources
@with_resources("resource_name")
def process(row):
...
Masalah 10: Error tugas "TypeError: Cannot accept arguments append_partitions"
Periksa versi PyODPS Anda. Masalah ini dapat diatasi dengan meningkatkan ke versi 0.12.0.
Masalah 11: Cara mengurai banyak bidang string JSON
SDK MaxFrame versi 1.0.0 dan yang lebih baru mendukung penguraian beberapa bidang string JSON sebagai berikut:
Masalah 12: ODPS-0010000: Fuxi job failed - Job failed for unknown reason, cannot get jobstatus
Penyebab: Instalasi dependensi gagal saat menggunakan metode seperti
@with_python_requirements, sehingga pekerjaan tidak dapat dijalankan.Penjelasan pesan error:
ODPS-0010000: Fuxi job failed - Job failed for unknown reason, cannot get jobstatusDetail lebih lanjut dapat ditemukan di stderr Logview PythonPack, seperti kegagalan konektivitas jaringan berikut:
Solusi:
Ini adalah error internal PythonPack. Node yang melakukan packaging dan instalasi dependensi Pip mungkin sementara tidak dapat mengakses repositori dependensi. Coba ulang pekerjaan tersebut. Jika masalah tetap berlanjut, hubungi tim MaxFrame.
Untuk pekerjaan periodik, simpan hasil packaging yang berhasil dari PythonPack guna memastikan stabilitas, lalu gunakan hasil tersebut pada pekerjaan harian berikutnya. Contohnya:
from maxframe import options # Tetapkan hasil pythonpack ke prod. Dengan cara ini, pekerjaan berikutnya langsung menggunakan hasil pythonpack yang disimpan. options.pythonpack.task.settings = {"odps.pythonpack.production": "true"}Untuk mengabaikan cache, tambahkan
force_rebuild=Truedi@with_python_requirements.Sebagai alternatif, hindari penggunaan PythonPack untuk menginstal dependensi. Lakukan packaging dependensi yang diperlukan secara offline, unggah sebagai resource MaxFrame, lalu referensikan dalam pekerjaan. MaxFrame secara otomatis menambahkan dependensi tersebut ke konteks callable.
PyODPS-Pack adalah alat yang menyederhanakan proses ini. PyODPS-Pack secara otomatis memuat container Docker manylinux dengan lingkungan yang sama untuk packaging guna menghindari masalah kompatibilitas. Alat ini saat ini hanya berjalan di mesin Linux X86. Perangkat Apple dengan chip ARM seri M belum didukung.
Untuk menggunakan resource MaxCompute di MaxFrame, gunakan
@with_resources.
Masalah 13: ODPS-0123055:User script exception
Penyebab: Ini adalah jenis error paling umum dalam MaxFrame. Error ini terjadi selama eksekusi UDF di operator seperti
apply,apply_chunk,flatmap,map, dantransform. Pesan error menunjukkan bahwa UDF yang dikirimkan melemparkan exception Python. Penyebab utamanya meliputi:Kesalahan logika dalam kode. Tinjau logika tersebut.
Penanganan error tidak tepat sehingga melemparkan exception yang tidak tertangani. Pastikan blok
try-exceptmenangani semua exception yang mungkin terjadi.UDF mengakses jaringan. Secara default, akses jaringan dinonaktifkan di kontainer UDF MaxCompute.
Tipe output yang dideklarasikan dengan `dtype` atau `dtypes` di operator tidak sesuai dengan tipe aktual yang dikembalikan oleh UDF.
UDF mereferensikan dependensi yang tidak tersedia di lingkungan runtime, sehingga kode pengguna tidak dapat dideserialisasi dengan benar.
Penjelasan pesan error:
Sebagian besar error
ODPS-0123055:User script exceptionmerupakan exception Python. Anda dapat memeriksastderrdari instans yang gagal.Sebagai contoh, menjalankan operasi pemuatan JSON pada string non-JSON menyebabkan error—masalah umum dalam pemrosesan data:
def simple_failure(row): import json text = row["json_text"] data = json.loads(text) return data df = md.read_pandas(pd.DataFrame({"json_text": ["123", "456", "789"]})) df.apply( simple_failure, axis=1, dtypes={"text": np.str_}, output_type="dataframe" ).execute()Pesan error yang sesuai ditunjukkan di bawah ini. Pesan tersebut dengan jelas menunjukkan bahwa error terjadi di fungsi
simple_failurepada baris 5, yaitu barisdata = json.loads(text):ScriptError: ODPS-0123055: InstanceId: 20250622063246442gquihia95z2 ODPS-0123055:User script exception - Traceback (most recent call last): File "/home/admin/mf_udf_ref_20250622062907997gvwps9irzzc_user_udf_139907101614080.py", line 130, in wrapped return func(self, *args, **kw) ^^^^^^^^^^^^^^^^^^^^^^^ File "/home/admin/mf_udf_ref_20250622062907997gvwps9irzzc_user_udf_139907101614080.py", line 262, in process for result in self.user_func(*args): File "/home/admin/mf_udf_ref_20250622062907997gvwps9irzzc_user_udf_139907101614080.py", line 230, in user_func_caller _user_function_results = _user_function(data, *_args, **_kw_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/var/folders/_8/v9wr7xm54bz0rj5pl4p9dkww0000gn/T/ipykernel_18735/2599074506.py", line 5, in simple_failure File "/usr/ali/python3.11.7/lib/python3.11/json/__init__.py", line 346, in loads return _default_decoder.decode(s) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/ali/python3.11.7/lib/python3.11/json/decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/ali/python3.11.7/lib/python3.11/json/decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) | fatalInstance: Odps/meta_dev_20250622063246442gquihia95z2_SQL_0_0_0_job_0/M1#0_0Jika fungsi dapat diserialisasi dengan benar, Anda biasanya dapat mengidentifikasi sumber error melalui jejak stack.
Namun, jika UDF mereferensikan dependensi yang tidak tersedia di lingkungan runtime, fungsi tersebut tidak dapat diserialisasi dengan benar. Pesan error akan menunjukkan bahwa dependensi tidak ditemukan dan secara eksplisit mengidentifikasi objek atau dependensi penyebab kegagalan serialisasi, seperti pada contoh berikut:
# Anggap xxhash diinstal secara lokal dan diimpor import xxhash def type_failure(row): # Referensikan xxhash di UDF return str(xxhash.xxh64("hello maxfrmae")) df = md.read_pandas(pd.DataFrame(np.random.randn(3, 5), columns=list("ABCDE"))) df.apply( type_failure, axis=1, dtypes={"hash_value": np.str_}, output_type="dataframe" ).execute()Error tersebut menghasilkan stack exception berikut. MaxFrame gagal melakukan
unpicklefungsi lokal selama runtime, dan pesanNo module named 'xxhash'ditampilkan—ini adalah pesan error yang tepat:File "/home/admin/mf_udf_ref_20250622070426909g26q6zdfar2_user_udf_140362144866304.py", line 209, in __init__ _user_function = cloudpickle.loads(base64.b64decode(b'gAWVnwIAAAAAAACMF2Nsb3VkcGlja2xlLmNsb3VkcGlja2xllIwOX21ha2VfZnVuY3Rpb26Uk5QoaACMDV9idWlsdGluX3R5cGWUk5SMCENvZGVUeXBllIWUUpQoSwFLAEsASwFLBUsDQ1CXAHQBAAAAAAAAAAAAAHQCAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAABkAaYBAACrAQAAAAAAAAAApgEAAKsBAAAAAAAAAABTAJROjA5oZWxsbyBtYXhmcm1hZZSGlIwDc3RylIwGeHhoYXNolIwFeHhoNjSUh5SMA3Jvd5SFlIxNL3Zhci9mb2xkZXJzL184L3Y5d3I3eG01NGJ6MHJqNXBsNHA5ZGt3dzAwMDBnbi9UL2lweWtlcm5lbF8xODczNS81NTM2OTIzNjYucHmUjAx0eXBlX2ZhaWx1cmWUaBJLBEMdgADdCw6Ndo98inzQHCzRDy3UDy3RCy7UCy7QBC6UQwCUKSl0lFKUfZQojAtfX3BhY2thZ2VfX5ROjAhfX25hbWVfX5SMCF9fbWFpbl9flHVOTk50lFKUjBxjbG91ZHBpY2tsZS5jbG91ZHBpY2tsZV9mYXN0lIwSX2Z1bmN0aW9uX3NldHN0YXRllJOUaBx9lH2UKGgZaBKMDF9fcXVhbG5hbWVfX5RoEowPX19hbm5vdGF0aW9uc19flH2UjA5fX2t3ZGVmYXVsdHNfX5ROjAxfX2RlZmF1bHRzX1+UTowKX19tb2R1bGVfX5RoGowHX19kb2NfX5ROjAtfX2Nsb3N1cmVfX5ROjBdfY2xvdWRwaWNrbGVfc3VibW9kdWxlc5RdlIwLX19nbG9iYWxzX1+UfZRoDGgAjAlzdWJpbXBvcnSUk5RoDIWUUpRzdYaUhlIwLg=='), buffers=[ ]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...... File "/usr/ali/python3.11.7/lib/python3.11/site-packages/cloudpickle/cloudpickle.py", line 649, in subimport __import__(name) ModuleNotFoundError: No module named 'xxhash'Bagian berikut menjelaskan kode error dan pesan untuk jenis error lainnya.
Tipe pengembalian salah:
def type_failure(row): text = row["A"] # Mengembalikan float return text df = md.read_pandas(pd.DataFrame(np.random.randn(3, 5), columns=list("ABCDE"))) # Deklarasikan bahwa fungsi mengembalikan DataFrame yang berisi kolom str bernama A df.apply(type_failure, axis=1, dtypes={"A": np.str_}, output_type="dataframe").execute()Pesan tersebut menunjukkan bahwa unicode (str) diharapkan, tetapi float diterima. Informasi ini biasanya ditentukan oleh `dtypes` atau `dtype`. Pastikan tipe yang dideklarasikan sesuai dengan tipe aktual yang dikembalikan oleh fungsi.
ScriptError: ODPS-0123055: InstanceId: 202506220642291g87d6xot20d ODPS-0123055:User script exception - Traceback (most recent call last): File "/home/admin/mf_udf_ref_20250622062907997gvwps9irzzc_user_udf_139905326100480.py", line 130, in wrapped return func(self, *args, **kw) ^^^^^^^^^^^^^^^^^^^^^^^ File "/home/admin/mf_udf_ref_20250622062907997gvwps9irzzc_user_udf_139905326100480.py", line 263, in process self.forward(*result) TypeError: return value expected <class 'unicode'> but <class 'float'> found, value: 1.8263596267666997 | fatalInstance: Odps/meta_dev_202506220642291g87d6xot20d_SQL_0_0_0_job_0/M1#0_0Akses saat jaringan dinonaktifkan
def request_aliyun_com(row): import requests url = "https://github.com/aliyun/alibabacloud-odps-maxframe-client" response = requests.get(url) return response.text df.apply( request_aliyun_com, axis=1, dtypes={"content": np.str_}, output_type="dataframe" ).execute()Pesan error yang sesuai:
ScriptError: ODPS-0123055: InstanceId: 20250622070516226gzo61d9idlr ODPS-0123055:User script exception - Traceback (most recent call last): File "/usr/ali/python3.11.7/lib/python3.11/site-packages/urllib3/connection.py", line 196, in _new_conn sock = connection.create_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/ali/python3.11.7/lib/python3.11/site-packages/urllib3/util/connection.py", line 85, in create_connection raise err File "/usr/ali/python3.11.7/lib/python3.11/site-packages/urllib3/util/connection.py", line 73, in create_connection sock.connect(sa) ConnectionRefusedError: [Errno 111] Connection refused
Solusi:
Untuk error exception, analisis informasi stack untuk mengidentifikasi fungsi penyebab error, lalu perbaiki fungsi tersebut.
Setelah memperbaiki error, uji secara lokal dengan membuat data yang sesuai dan memanggil fungsi tersebut sebagai fungsi Python biasa. Contohnya:
def udf_func(row): import json text = row["json_text"] data = json.loads(text) return data # Buat input dan uji logika fungsi secara lokal udf_func(pd.Series(['{"hello": "maxfrmae"}'], index=["json_text"]))Untuk masalah akses jaringan, aktifkan akses jaringan. Untuk informasi lebih lanjut, lihat Proses pengaktifan jaringan.
Untuk kegagalan deserialisasi, periksa apakah ada dependensi tak terduga yang diperkenalkan. Selain itu, pastikan dependensi yang disebutkan dalam pesan error telah diinstal dengan benar menggunakan PythonPack atau disertakan dalam lingkungan runtime sebagai resource.
Masalah 14: ODPS-0123144: Fuxi job failed - kInstanceMonitorTimeout CRASH_EXIT, usually caused by bad udf performance
Penyebab: UDF mengalami timeout.
Penjelasan pesan error
Selama eksekusi UDF, Anda mungkin menemui pesan error seperti
kInstanceMonitorTimeoutatauCRASH_EXIT, usually caused by bad udf performance.Error ini biasanya berarti UDF mengalami timeout. Dalam skenario komputasi offline MaxCompute, waktu eksekusi UDF dipantau berdasarkan batch baris. Jika UDF tidak menyelesaikan pemrosesan jumlah baris tertentu dalam waktu yang ditentukan, maka akan mengalami timeout dan gagal. Konfigurasi terkait adalah sebagai berikut:
from maxframe import options options.sql.settings = { # Ukuran batch. Default: 1024. Minimum: 1. "odps.sql.executionengine.batch.rowcount": "1", # Timeout batch. Default: 1800. Maksimum: 3600. "odps.function.timeout": "3600", }Solusi
Sesuaikan ukuran batch dan timeout batch sesuai kebutuhan.
Masalah 15: ODPS-0123144: Fuxi job failed - fuxi job failed, Job exceed live limit
Penyebab: Pekerjaan MaxCompute memiliki periode timeout maksimum 24 jam. Jika pekerjaan berjalan lebih dari 24 jam, pekerjaan tersebut gagal.
Penjelasan pesan error
Sistem pemetaan CDN menentukan bahwa pekerjaan telah mengalami timeout lalu menghentikannya. Status pekerjaan berubah menjadi Failed. Jika pekerjaan dijalankan di DataWorks, periode timeout yang berbeda mungkin berlaku. Untuk informasi lebih lanjut, hubungi tim DataWorks. Dalam kasus ini, status pekerjaan adalah Canceled.
Solusi
Anda dapat menyesuaikan waktu runtime maksimum pekerjaan sesuai kebutuhan:
from maxframe import options # Tetapkan waktu hidup maksimum untuk sesi MaxFrame options.session.max_alive_seconds = 72 * 60 * 60 # Tetapkan timeout idle maksimum untuk sesi MaxFrame options.session.max_idle_seconds = 72 * 60 * 60 options.sql.settings = { # Tetapkan waktu runtime maksimum untuk pekerjaan SQL. Default: 24 jam. Maksimum: 72 jam. "odps.sql.job.max.time.hours": 72, }
Masalah 16: 0130071:[0,0] Semantic analysis exception - physical plan generation failed: unable to retrive row count of file pangu://xxx
Penyebab: Error ini dapat terjadi saat Anda menggunakan flag seperti
odps.sql.split.dopuntuk menentukan jumlah tugas split.Penjelasan pesan error
Error ini biasanya menunjukkan bahwa file meta tidak dihasilkan saat data ditulis ke tabel sumber. Akibatnya, metadata tabel sumber tidak dapat diambil secara langsung, dan tabel sumber tidak dapat dibagi secara akurat.
Solusi
Gunakan flag
odps.stage.mapper.split.sizesebagai gantinya. Satuannya megabyte (MB). Nilai default adalah 256, dan nilai minimum adalah 1.Jika pembagian yang akurat diperlukan, pertimbangkan untuk membuat ulang CMF. Untuk melakukannya, hubungi tim MaxCompute.
Selain itu, untuk memastikan file meta dihasilkan saat menulis ke tabel, tambahkan flag berikut:
from maxframe import options options.sql.settings = { "odps.task.merge.enabled": "false", "odps.sql.reshuffle.dynamicpt": "false", "odps.sql.enable.dynaparts.stats.collection": "true", "odps.optimizer.dynamic.partition.is.first.nth.value.split.enable": "false", "odps.sql.stats.collection.aggressive":"true", }Kami akan mempertimbangkan cara yang lebih baik untuk memastikan stabilitas fitur split akurat di masa depan.
Masalah 17: ODPS-0130071:[x,y] Semantic analysis exception
Penyebab: Dalam skenario `ReadOdpsQuery`, error ini biasanya menunjukkan masalah semantik pada kueri SQL itu sendiri.
Pesan error
Error ini biasanya menunjukkan masalah semantik pada pernyataan SQL.
Solusi
Periksa sintaks SQL.
Tingkatkan klien MaxFrame dengan menjalankan perintah berikut:
pip install --upgrade maxframe.Jika masalah tetap berlanjut, hubungi tim MaxFrame.
Masalah 18: ODPS-0020041:StringOutOfMaxLength:String length X is larger than maximum Y
Penyebab: String yang terlalu besar ditemui saat menulis data ke tabel atau selama proses shuffle. Panjang string melebihi panjang maksimum yang diizinkan.
Penjelasan pesan error
Untuk memastikan stabilitas komputasi, MaxCompute membatasi panjang maksimum string yang dapat dibaca dan ditulis di lapisan penyimpanan hingga 268.435.456 karakter.
Solusi
Pertimbangkan untuk memotong atau mengabaikan data yang mungkin menyebabkan error. Di ReadOdpsQuery, Anda dapat menggunakan LENGTH untuk memfilter data.
Pertimbangkan untuk mengompresi data sebelum menyimpannya, misalnya menggunakan gzip. Hal ini dapat secara signifikan mengurangi panjang dan ukuran string.
def compress_string(input_string): """ Mengompresi string menggunakan gzip. """ encoded_string = input_string.encode('utf-8') compressed_bytes = gzip.compress(encoded_string) return compressed_bytesHubungi tim MaxCompute untuk dukungan terkait data spesifik.
Masalah 19: ODPS-0010000:System internal error - fuxi job failed, caused by: process exited with code 0
Penyebab: Pekerjaan yang berisi UDF atau fungsi AI gagal.
Penjelasan pesan error
Hal ini biasanya menunjukkan bahwa error kehabisan memori (OOM) terjadi selama eksekusi UDF atau fungsi AI.
Solusi
Hubungi tim MaxCompute untuk mengonfirmasi penggunaan memori aktual.
Jalankan UDF atau fungsi AI dengan memori lebih besar.
Untuk UDF, gunakan
@with_running_optionsuntuk mengatur memori:@with_running_options(memory="8GB") def udf_func(row): return rowUntuk fungsi AI, atur memori di fungsi menggunakan
running_options={"memory": "8GB"}.
Masalah 20: ODPS-0123131:User defined function exception - internal error - Fatal Error Happended
Penyebab: Membaca dari atau menulis ke tabel eksternal.
Penjelasan pesan error: Hal ini biasanya menunjukkan bahwa error internal terjadi saat membaca dari atau menulis ke tabel eksternal.
Solusi: Hubungi tim MaxCompute.
Masalah 21: ODPS-0010000:System internal error - com.aliyun.odps.metadata.common.MetastoreServerException: 0420111:Database not found
Penyebab: Informasi skema, proyek, atau tabel yang ditentukan tidak ditemukan saat membaca dari atau menulis ke tabel.
Penjelasan pesan error: Metadata yang menjadi dasar komputasi tidak ditemukan. Akibatnya, pekerjaan tidak dapat dijalankan.
Solusi:
Periksa apakah informasi proyek, skema, dan tabel yang digunakan dalam SQL sudah benar. Jika belum, perbaiki informasi tersebut dan coba lagi.
Hubungi tim MaxCompute.
Masalah 22: ODPS-0010000:System internal error - fuxi job failed, caused by: process killed by signal 7
Penyebab: Pekerjaan yang berisi UDF gagal.
Penjelasan pesan error: UDF mengirimkan sinyal abnormal selama runtime.
Solusi:
Periksa apakah UDF menggunakan sinyal untuk mengirim sinyal cancel, timeout, atau sinyal lain ke proses.
Hubungi tim MaxCompute untuk troubleshooting.
Masalah 23: ODPS-0010000:System internal error - fuxi job failed, caused by: StdException:vector::_M_range_insert
Penyebab: Error ini terkait dengan pekerjaan yang berisi UDF.
Penjelasan pesan error: UDF tidak dapat meminta memori yang cukup saat runtime, sehingga menyebabkan kegagalan penyisipan vektor. Periksa kode bisnis, library dependensi, dan pengaturan memori.
Solusi:
Periksa masalah memori di UDF. Pastikan library dependensi native tidak memiliki masalah memori dan versinya terbaru. Tingkatkan memori yang diminta oleh UDF.
Hubungi tim MaxCompute untuk troubleshooting.
Masalah 24: ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: task:M1 instance count exceeds limit 99999
Penyebab: Hal ini dapat terjadi pada pekerjaan apa pun jika tabel sumber berukuran besar. Pengaturan flag split yang salah juga dapat menyebabkan masalah ini.
Penjelasan pesan error
Dalam pekerjaan SQL MaxCompute, jika tidak ada pengaturan yang dikonfigurasi, tabel sumber secara default dibagi dan diproses secara terdistribusi. Ukuran chunk default adalah 256 MB. Jika jumlah total chunk yang dibuat melebihi 99.999, error ini terjadi.
Solusi:
Gunakan flag
odps.stage.mapper.split.size. Satuannya megabyte (MB). Nilai default adalah 256, dan nilai minimum adalah 1. Atur nilai yang lebih besar untuk memastikan jumlah total chunk kurang dari 99.999.Gunakan flag
odps.sql.split.dop. Nilai minimum adalah 1. Flag ini menentukan jumlah target chunk yang diharapkan.Karena berbagai kendala, jumlah akhir chunk mungkin tidak sama dengan jumlah target yang diharapkan. Menetapkan jumlah chunk mendekati batas atas masih dapat menyebabkan error. Jika kedua metode gagal setelah beberapa penyesuaian, hubungi tim MaxCompute.
Masalah 25: ODPS-0110061:Failed to run ddltask - ODPS-0130131:Table not found
Penyebab: Error ini dapat terjadi pada pekerjaan MaxFrame jangka panjang yang berjalan lebih dari satu hari.
Penjelasan pesan error
Tugas Data Definition Language (DDL) internal MaxFrame gagal. Kegagalan ini biasanya terjadi ketika satu tahap komputasi berjalan lebih dari 24 jam, sehingga tabel node leluhur dalam sesi yang sama kedaluwarsa.
Tabel-tabel ini biasanya merupakan tabel temporary yang dibuat selama proses komputasi, khususnya tabel yang dihasilkan setelah pemanggilan
df.execute(). Tabel sink yang ditentukan olehto_odps_tablebiasanya tidak mengalami masalah ini.Solusi:
Tetapkan Waktu hidup (TTL) yang lebih lama untuk tabel temporary. Satuannya hari. Secara default, TTL tabel temporary adalah satu hari. Jika pekerjaan komputasi memiliki beberapa operator yang mungkin berjalan lintas hari berbeda, Anda harus mengatur parameter ini:
options.sql.settings = { "session.temp_table_lifecycle": 3, }
Masalah 26: NoTaskServerResponseError
Penyebab: Di Jupyter Notebook, Anda membuat sesi MaxFrame dan menjalankan beberapa pekerjaan. Kemudian, Anda berhenti lebih dari 1 jam sebelum menjalankan skrip berikutnya. Error ini mungkin terjadi.
Penjelasan pesan error
Sesi MaxFrame telah kedaluwarsa dan tidak dapat ditemukan.
Solusi:
Buat ulang sesi tersebut. Namun, status komputasi dari sel sebelumnya tidak akan dipertahankan.
Jika Anda berencana berhenti sejenak dan ingin melanjutkan pekerjaan nanti, atur parameter berikut:
from maxframe import options # Tetapkan masa kedaluwarsa menjadi 24 jam. Default-nya adalah 1 jam. options.session.max_idle_seconds = 60 * 60 * 24
Masalah 27: IntCastingNaNError: Cannot convert non-finite values (NA or inf) to integer: Error while type casting for column 'xx'
Penyebab: Kolom bertipe BIGINT atau INT berisi nilai NULL atau INF, dan hasilnya dicetak—termasuk pencetakan otomatis di Jupyter Notebook.
Penjelasan pesan error
Data MaxFrame dibangun di atas DataFrame. Saat data dimuat secara lokal, data tersebut dikonversi ke pandas DataFrame. Di pandas, data bertipe BIGINT dan INT tidak dapat berisi NULL. Nilai NULL diperlakukan sebagai FLOAT.
Solusi:
Tim MaxFrame sedang berupaya menyelesaikan masalah ini. Namun, sistem tipe sangat kompleks, sehingga timeline yang jelas belum dapat diberikan saat ini. Untuk sementara, pertimbangkan metode berikut:
Gunakan `fillna` untuk mengisi nilai NULL sebelum mencetak.
Gunakan `astype` untuk mengonversi ke FLOAT sebelum mencetak.
Jangan mencetak kolom tersebut kecuali benar-benar diperlukan.
Masalah 28: ODPS-0010000:System internal error - fuxi job failed, SQL job failed after failover for too many times
Penyebab
Pekerjaan mencakup operasi Reduce atau Join.
Nilai `split.dop` yang besar atau nilai `split.size` yang kecil diatur, sehingga menghasilkan banyak instans mapper.
Nilai `reducer.num` atau `joiner.num` yang besar diatur, sehingga menghasilkan banyak instans reducer atau joiner.
Penjelasan pesan error
Data shuffle terlalu besar, sehingga menyebabkan error kehabisan memori (OOM) pada Job Master.
Solusi:
Kurangi jumlah mapper dan reducer/joiner. Jumlah maksimum sebaiknya tidak melebihi 10.000.
Hubungi tim MaxCompute.
Masalah 29: ODPS-0010000:System internal error - task/common/task_resource_helper.cpp(747): OdpsException: ODPS-0020011:Invalid parameter - Total resource size must be <= 2048MB
Penyebab: Pekerjaan berisi UDF, dan UDF tersebut bergantung pada resource berukuran besar.
Penjelasan pesan error
Ukuran total resource yang dapat diandalkan oleh UDF adalah 2048 MB. Pekerjaan yang melebihi batas ini tidak dapat dijalankan.
Solusi:
Gunakan akselerasi volume eksternal untuk mengunduh resource yang sesuai dari Object Storage Service (OSS). Metode ini memberikan kecepatan unduh lebih cepat dan batas yang lebih tinggi.
Masalah 30: ODPS-0130071:[22,132] Semantic analysis exception - column values_list in source has incompatible type ARRAY/MAP/STRUCT
Penyebab: Data yang diproses berisi array, map, atau struct.
Penjelasan pesan error
Ini mungkin merupakan masalah deklarasi tipe. Kolom target yang diharapkan bukan bertipe array, map, atau struct.
Ini mungkin merupakan bug pada sistem tipe MaxFrame.
Solusi:
Tingkatkan klien MaxFrame dengan menjalankan
pip install -U maxframe, lalu coba lagi.Hubungi tim MaxFrame untuk troubleshooting.
Masalah 31: Shuffle output too large
Solusi: Gunakan flag `odps.sql.sys.flag.fuxi_JobMaxInternalFolderSize` untuk menentukan ukuran ruang shuffle dalam megabyte (MB).