Topik ini menjawab beberapa pertanyaan umum terkait tabel eksternal.
Kategori | FAQ |
Tabel eksternal Object Storage Service (OSS) | |
Tabel eksternal Hologres | |
Kinerja | Apa yang harus saya lakukan jika pekerjaan SQL berjalan lambat berdasarkan tabel eksternal? |
Apa yang harus saya lakukan jika muncul kesalahan ODPS-0123131 saat ekstraktor kustom membaca data tidak terstruktur yang berisi bidang data tipe DATETIME?
Deskripsi Masalah
Saat ekstraktor kustom membaca data tidak terstruktur, pesan kesalahan berikut muncul jika bidang data bertipe DATETIME, seperti 2019-11-11 06:43:36.
FAILED: ODPS-0123131:User defined function exception - Traceback: java.lang.IllegalArgumentException at java.sql.Date.valueOf(Date.java:143) at com.aliyun.odps.udf.example.text.TextExtractor.textLineToRecord(TextExtractor.java:194) at com.aliyun.odps.udf.example.text.TextExtractor.extract(TextExtractor.java:153) at com.aliyun.odps.udf.ExtractorHandler.extract(ExtractorHandler.java:120)Penyebab
Fungsi
java.sql.Date.valueOf()dalamDate.valueOf(parts)pada posisi tertentu dari kode hanya mendukung parameter bertipe STRING, seperti"yyyy-[m]m-[d]d". Fungsi ini tidak mendukung parameter bertipe DATETIME.Solusi
Tambahkan dependensi Joda-Time dan impor informasi ke kode.
-- Perkenalkan dependensi Joda-Time. <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.10</version> </dependency> -- Tambahkan informasi impor. import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat;Tambahkan fungsi
DateTimeFormat.forPattern()untuk mengonversi bidang bertipe DATETIME menjadi tipe STRING agar dapat dibaca.record.setDate(index, new Date(DateTime.parse(parts[i], DateTimeFormat.forPattern("yyyy-MM-dd HH:mi:ss")).getMillis()));
Contoh
Unggah file JAR hasil pengemasan proyek ekstraktor di klien MaxCompute.
add jar /Users/gary/big_data/odps/text_extractor/target/text_extractor-1.0-SNAPSHOT.jar/Users/gary/big_data/odps/text_extractor/target/text_extractor-1.0-SNAPSHOT.jaradalah direktori lokal untuk menyimpan file JAR yang dihasilkan.Unggah file JAR pihak ketiga Joda-Time di klien MaxCompute.
add jar /Users/gary/.m2/repository/joda-time/joda-time/2.10/joda-time-2.10.jar/Users/gary/.m2/repository/joda-time/joda-time/2.10/joda-time-2.10.jaradalah direktori lokal untuk menyimpan file JAR pihak ketiga Joda-Time.Unggah data uji ke direktori yang ditentukan di OSS. Dalam contoh ini, nama file adalah
video_play_log.txt. Data sampel:5c661071dba64d5080c91da085ff1073^Music-Click-Fast Forward^26.12.04.68^2019-11-11 06:43:36Baca data dari tabel eksternal.
select * from <project_name>.video_play_log;Hasil yang diperoleh:
+------+-------+---+----------------+ | uuid | action | ip | time | +------+-------+---+----------------+ | 5c661071dba64d5080c91da085ff1073 | Music-Click-Fast Forward | 26.12.04.68 | 2019-11-11 06:43:36 | +------+-------+---+----------------+
Setelah saya mengunggah UDF yang lulus uji lokal ketika menggunakan MaxCompute untuk mengakses tabel eksternal OSS, terjadi kesalahan kelebihan memori. Apa yang harus saya lakukan?
Deskripsi Masalah
Setelah mengunggah UDF yang lulus uji lokal menggunakan MaxCompute untuk mengakses tabel eksternal OSS, pesan kesalahan berikut muncul:
FAILED: ODPS-0123131:User defined function exception - Traceback: java.lang.OutOfMemoryError: Java heap spaceMeskipun konfigurasi berikut telah ditambahkan, waktu proses meningkat tetapi kesalahan tetap ada.
set odps.stage.mapper.mem = 2048; set odps.stage.mapper.jvm.mem = 4096;Penyebab
Tabel eksternal memiliki jumlah objek yang berlebihan, sehingga membutuhkan ruang memori besar. Selain itu, tidak ada partisi yang ditentukan untuk objek tersebut.
Solusi
Kueri sejumlah kecil data.
Tentukan partisi untuk objek guna mengurangi penggunaan memori.
Apa yang harus saya lakukan jika pesan kesalahan "Data inline melebihi ukuran maksimum yang diizinkan" muncul saat saya menggunakan tabel eksternal untuk memproses data OSS?
Deskripsi Masalah
Saat MaxCompute memproses data OSS, pesan kesalahan
Inline data melebihi ukuran maksimum yang diizinkanmuncul.Penyebab
Penyimpanan OSS membatasi ukuran setiap objek. Jika ukuran objek melebihi 3 GB, kesalahan akan terjadi.
Solusi
Ubah konfigurasi properti berikut untuk menyesuaikan rencana eksekusi. Properti ini digunakan untuk mengelola ukuran data yang dapat ditulis oleh setiap reducer ke tabel eksternal OSS, memastikan bahwa objek penyimpanan OSS tidak melebihi 3 GB dalam ukuran.
set odps.sql.mapper.split.size=256; # Sesuaikan ukuran data yang dibaca oleh setiap mapper. Unit: MB. set odps.stage.reducer.num=100; # Sesuaikan jumlah pekerja dalam fase reduce.
Bagaimana cara menggunakan tabel eksternal OSS untuk membaca data JSON di MaxCompute?
Untuk informasi lebih lanjut tentang cara membaca data JSON menggunakan tabel eksternal OSS di MaxCompute, lihat Baca data JSON dari tabel eksternal OSS di MaxCompute.
Bagaimana cara menggunakan tabel eksternal OSS untuk mengekspor beberapa file kecil menjadi satu file?
Periksa apakah reducer atau joiner digunakan pada langkah terakhir dari rencana eksekusi SQL di LogView logs. Jika reducer digunakan pada langkah terakhir, jalankan perintah set odps.stage.reducer.num=1;. Jika joiner digunakan pada langkah terakhir, jalankan perintah set odps.stage.joiner.num=1;.
Apa yang harus saya lakukan jika kesalahan ODPS-0130071 dilaporkan saat saya menggunakan MaxCompute untuk membaca data Hologres secara langsung?
Deskripsi Masalah
Saat membaca data Hologres secara langsung, pesan kesalahan "ODPS-0130071 Failed to split to equal size...max count: 7777" dilaporkan. Contoh:
ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: storage/table/src/input_splits_builder.cpp(195): StorageException: Failed to split to equal size, total size: 2143570729934, min size: 268435456, max size: 272629760, max count: 7777, split size: 275629513, split count: 7777Penyebab
Saat MaxCompute membaca data Hologres secara langsung, strategi pemisahan Mapper default (ukuran data input/split.size sebesar 256 MB) digunakan. Hal ini menghasilkan jumlah Mapper yang melebihi batas maksimum 7777.
CatatanPembatasan ini diberlakukan untuk mencegah pengguna langsung mengirimkan tugas yang menghasilkan sejumlah besar Mapper, yang dapat memengaruhi stabilitas file Hologres atau koneksi jaringan.
Solusi
Anda dapat menyelesaikan masalah ini dengan mengonfigurasi parameter berikut:
SET odps.external.holo.mapper.instances=10000; --Tingkatkan batas atas konkurensi menjadi 10000. SET odps.sql.mapper.split.size=512; --Sesuaikan konkurensi tugas dengan meningkatkan ukuran split menjadi 512 MB.
Apa yang harus saya lakukan jika pekerjaan SQL berjalan lambat berdasarkan tabel eksternal?
Saat pekerjaan SQL berjalan berdasarkan tabel eksternal, pekerjaan tersebut mungkin berjalan lambat karena salah satu alasan berikut:
Pembacaan file kompresi GZIP yang lambat dari tabel eksternal OSS
Deskripsi Masalah
Tabel eksternal OSS telah dibuat. Sumber datanya adalah file kompresi GZIP di OSS dengan ukuran file 200 GB. Eksekusi berjalan lambat selama pembacaan data.
Penyebab
Eksekusi pernyataan SQL lambat karena jumlah mapper yang digunakan untuk melakukan komputasi terlalu sedikit.
Solusi
Untuk data terstruktur, konfigurasikan parameter odps.sql.mapper.split.size untuk menyesuaikan jumlah data yang dibaca oleh satu mapper, mempercepat eksekusi pernyataan SQL.
set odps.sql.mapper.split.size=256; # Sesuaikan ukuran data tabel yang dibaca oleh setiap mapper. Unit: MB.Untuk data tidak terstruktur, periksa apakah hanya satu file OSS yang tersimpan di direktori tabel eksternal OSS. Jika hanya satu file OSS yang ada, hanya satu mapper yang dapat dihasilkan karena data tidak terstruktur tidak dapat dipisah dalam mode kompresi. Hal ini mengakibatkan pemrosesan data yang lambat. Kami sarankan Anda membagi file OSS besar menjadi file kecil di direktori tabel eksternal OSS. Ini membantu meningkatkan jumlah mapper yang dihasilkan untuk membaca tabel eksternal dan meningkatkan kecepatan baca.
Pencarian data yang lambat di tabel eksternal menggunakan SDK MaxCompute
Deskripsi Masalah
SDK MaxCompute mencari data di tabel eksternal dengan kecepatan rendah.
Solusi
Tabel eksternal hanya mendukung pencarian penuh, sehingga kecepatan pencarian lambat. Kami sarankan Anda menggunakan tabel internal MaxCompute sebagai ganti tabel eksternal untuk pencarian.
Pencarian data yang lambat dari tabel eksternal Tablestore
Deskripsi Masalah
Data diquery dari tabel eksternal Tablestore dengan kecepatan rendah. Jika data bisnis yang sama ditulis ke tabel eksternal Tablestore secara real-time dan secara berkala ditulis ke tabel internal MaxCompute, serta kedua tabel memiliki skema dan volume data yang sama, waktu yang diperlukan untuk mengquery data di tabel internal MaxCompute jauh lebih sedikit daripada waktu yang diperlukan untuk mengquery data di tabel eksternal Tablestore.
Solusi
Data mungkin dikomputasi beberapa kali, menyebabkan query data lambat. Untuk meningkatkan efisiensi query dalam skenario ini, Anda dapat mengimpor data yang diperlukan ke tabel internal MaxCompute dan kemudian mengquery data di tabel internal. Metode ini lebih efisien daripada membaca data dari Tablestore setiap kali data diquery.
Apa yang harus saya lakukan jika "Tidak dapat terhubung ke server" kesalahan dilaporkan saat saya membaca data dari tabel eksternal OSS?
Deskripsi masalah
Saat saya membaca data dari tabel eksternal OSS, kesalahan berikut dilaporkan:
ODPS-0123131:User defined function exception - common/io/oss/oss_client.cpp(95): OSSRequestException: req_id: , http status code: -998, error code: HttpIoError, message: Tidak dapat terhubung ke server.Penyebab
Penyebab 1:
oss_endpointdi parameteross_locationyang digunakan saat Anda membuat tabel eksternal OSS menunjuk ke endpoint publik, bukan endpoint internal.Penyebab 2:
oss_endpointdi parameteross_locationyang digunakan saat Anda membuat tabel eksternal OSS menunjuk ke endpoint di wilayah yang berbeda.
Solusi
Untuk Penyebab 1:
Periksa
oss_endpointdi parameteross_locationdari pernyataan pembuatan tabel eksternal Anda. Jika menggunakan endpoint publik, ubah ke endpoint internal yang sesuai. Untuk informasi parameter lebih lanjut, lihat Parameter.Sebagai contoh, jika Anda menggunakan
oss://oss-ap-southeast-5.aliyuncs.com/<bucket>/....untuk membuat tabel eksternal di wilayah Indonesia (Jakarta), ubah ke endpoint internaloss://oss-ap-southeast-5-internal.aliyuncs.com/<bucket>/.....Untuk Penyebab 2:
Verifikasi bahwa
oss_endpointdi parameteross_locationdalam pernyataan pembuatan tabel eksternal sesuai dengan endpoint wilayah tempat Anda ingin mengakses. Untuk informasi lebih lanjut tentang endpoint OSS di wilayah berbeda, lihat Wilayah dan endpoint.
Apa yang harus saya lakukan jika "Jaringan tidak terjangkau (koneksi gagal)" kesalahan dilaporkan saat saya membuat tabel eksternal OSS?
Deskripsi masalah
Saat saya membuat tabel eksternal OSS, kesalahan berikut dilaporkan:
ODPS-0130071:[1,1] Semantic analysis exception - external table checking failure, error message: Tidak dapat terhubung ke endpoint 'oss-cn-beijing.aliyuncs.com': Hubungi bucket.oss-cn-beijing.aliyuncs.com:80 [bucket.oss-cn-beijing.aliyuncs.com] gagal: Jaringan tidak terjangkau (koneksi gagal).Penyebab
Saat Anda membuat tabel eksternal OSS,
oss_endpointdi parameteross_locationmenunjuk ke endpoint publik, bukan endpoint internal.Solusi
Verifikasi bahwa
oss_endpointdi parameteross_locationdalam pernyataan pembuatan tabel eksternal menunjuk ke endpoint internal. Jika endpoint publik digunakan, ubah ke endpoint internal. Untuk informasi parameter lebih lanjut, lihat Parameter.Sebagai contoh, jika Anda menggunakan
oss://oss-cn-beijing.aliyuncs.com/<bucket>/....untuk membuat tabel eksternal di wilayah China (Beijing), ubah ke endpoint internaloss://oss-cn-beijing-internal.aliyuncs.com/<bucket>/.....