Topik ini menyediakan jawaban atas beberapa pertanyaan yang sering diajukan mengenai Tunnel SDK.
Apakah data dapat didistribusikan secara otomatis ke setiap partisi tabel saat saya mengupload data menggunakan Tunnel SDK?
Tidak. Data tidak dapat didistribusikan secara otomatis ke setiap partisi tabel saat Anda mengupload data menggunakan Tunnel SDK. Data hanya dapat diupload ke satu tabel non-partisi atau satu partisi dari tabel partisi dalam satu waktu. Untuk mengupload data ke tabel partisi, Anda harus menentukan partisi tujuan upload tersebut. Jika tabel memiliki partisi bertingkat, Anda harus menentukan partisi tingkat terakhir.
Berapa ukuran maksimum file JAR UDF saat saya mengupload file tersebut menggunakan Tunnel SDK?
Ukuran maksimum file JAR UDF adalah 10 MB. Jika ukuran file melebihi 10 MB, kami menyarankan Anda mengupload file tersebut menggunakan perintah MaxCompute Tunnel Upload. Untuk informasi selengkapnya mengenai perintah MaxCompute Tunnel Upload, lihat Perintah Tunnel.
Apakah jumlah partisi dalam tabel yang Anda upload datanya menggunakan Tunnel SDK dibatasi?
Ya, jumlah partisi dibatasi. Maksimal 60.000 partisi didukung. Jika jumlah partisi melebihi 60.000, efisiensi pengumpulan dan analisis data menjadi rendah. MaxCompute memiliki batasan jumlah instans dalam satu pekerjaan. Jumlah instans suatu pekerjaan ditentukan berdasarkan volume data masukan dan jumlah partisi. Oleh karena itu, kami menyarankan Anda mengevaluasi kebutuhan bisnis sebelum memilih kebijakan partisi guna meminimalkan dampak partisi berlebihan terhadap bisnis Anda.
Apa yang harus saya lakukan jika muncul pesan error "StatusConflict" saat saya mengupload data menggunakan Tunnel SDK?
- Deskripsi masalahSaat data diupload menggunakan Tunnel SDK, muncul pesan error berikut:
RequestId=20170116xxxxxxx, ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status. java.io.IOException: RequestId=20170116xxxxxxx, ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status.at com.aliyun.odps.tunnel.io.TunnelRecordWriter.close(TunnelRecordWriter.java:93) - Penyebab: Masalah ini terjadi karena salah satu penyebab berikut saat Anda menonaktifkan RecordWriter.
- RecordWriter telah dinonaktifkan.
- Sesi tempat RecordWriter digunakan telah dinonaktifkan.
- Sesi tempat RecordWriter digunakan telah dikirim (submitted).
- Solusi: Anda dapat memperbaiki masalah ini berdasarkan penyebab di atas. Misalnya, untuk mengidentifikasi penyebabnya, Anda dapat melihat log atau memeriksa status RecordWriter dan sesi sebelum mengirim sesi tersebut. Setelah masalah diperbaiki, upload ulang data tersebut.
Apa yang harus saya lakukan jika muncul pesan error "Blocks not match" saat saya mengupload data menggunakan Tunnel SDK?
- Deskripsi masalah
Saat data diupload menggunakan Tunnel SDK, muncul pesan error berikut:
ErrorCode=Local Error, ErrorMessage=Blocks not match, server: 0, tunnelServiceClient: 1 at com.aliyun.odps.tunnel.TableTunnel$UploadSession.commit(TableTunnel.java:814) - Penyebab
Jumlah block yang diterima oleh server tidak sama dengan jumlah block yang ditentukan oleh parameter blocks dalam metode commit().
- Solusi
- Periksa jumlah RecordWriter yang diaktifkan dengan memanggil
uploadSession.openRecordWriter(i)dan nilai parameter blocks dalam metode commit() dari kode Anda. Pastikan jumlah RecordWriter yang diaktifkan sama dengan nilai parameter blocks dalam metode commit(). - Setelah kode dijalankan, periksa apakah metode
recordWriter.close();dipanggil sebelum metode commit(). Jika metode recordWriter.close() tidak dipanggil sebelum commit(), jumlah block yang diterima server mungkin tidak sama dengan jumlah block yang ditentukan oleh parameter blocks dalam metode commit().
- Periksa jumlah RecordWriter yang diaktifkan dengan memanggil
Apa yang harus saya lakukan jika muncul pesan error "StatusConflict" saat metode odps tunnel recordWriter.close() dipanggil untuk mengupload 80 juta catatan data sekaligus?
- Deskripsi masalahSaat metode odps tunnel recordWriter.close() dipanggil untuk mengupload 80 juta catatan data sekaligus, muncul pesan error berikut:
ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status. - Penyebab
Status sesi tidak valid. Sesi telah dinonaktifkan atau telah dikirim (submitted).
- Solusi
Kami menyarankan Anda membuat sesi baru dan menggunakan sesi tersebut untuk mengupload data kembali. Untuk mengupload data ke partisi berbeda, diperlukan sesi terpisah untuk setiap partisi. Jika masalah ini terjadi karena pengiriman sesi yang berulang, periksa apakah data telah berhasil diupload. Jika upload data gagal, upload ulang data tersebut. Untuk informasi selengkapnya, lihat Contoh upload data dalam mode multithreading.
Bagaimana cara menggunakan TunnelBufferedWriter dari Tunnel SDK untuk memastikan upload data berhasil?
TunnelBufferedWriter tersedia dalam MaxCompute SDK untuk Java versi 0.21.3-public ke atas. TunnelBufferedWriter menyederhanakan proses upload data dan menyediakan kemampuan toleransi kesalahan. TunnelBufferedWriter menyimpan data ke buffer klien MaxCompute dan membuat koneksi HTTP untuk mengupload data ketika buffer penuh.
TunnelBufferedWriter menyediakan kemampuan toleransi kesalahan maksimal untuk memastikan keberhasilan upload data. Untuk informasi selengkapnya mengenai penggunaan TunnelBufferedWriter, lihat TunnelBufferedWriter.
Saat saya menggunakan Tunnel SDK untuk mendownload data, muncul pesan error "You need to specify a partitionspec along with the specified table". Apa yang harus saya lakukan?
- Deskripsi masalah
Saat data dari tabel partisi didownload menggunakan Tunnel SDK, muncul pesan error berikut:
ErrorCode=MissingPartitionSpec, ErrorMessage=You need to specify a partitionspec along with the specified table. - Penyebab
Jika Anda menggunakan Tunnel SDK untuk mendownload data dari tabel partisi, Anda harus menentukan nilai kolom kunci partisi dalam tabel tersebut. Jika tidak, sistem akan mengembalikan error.
- Solusi
- Jika Anda menggunakan perintah Tunnel dari klien MaxCompute untuk mendownload data dari tabel partisi, klien MaxCompute memungkinkan Anda mendownload seluruh data tabel ke dalam folder.
- Sebelum menggunakan Tunnel SDK untuk mendownload data dari tabel partisi, Anda dapat menggunakan Tunnel SDK untuk mendapatkan informasi semua partisi tabel tersebut. Perintah berikut menunjukkan contohnya.
odps.tables().get(tablename) t.getPartitions()
SDK mana saja yang didukung oleh MaxCompute Tunnel?
MaxCompute Tunnel hanya mendukung SDK untuk Java.
Apakah ID block duplikat diizinkan dalam sesi upload?
Setiap ID block dalam sesi upload harus unik. Anda dapat menggunakan ID block untuk mengaktifkan RecordWriter dalam sesi upload, menggunakan RecordWriter tersebut untuk menulis data, lalu memanggil metode close untuk menyelesaikan penulisan data. Setelah data ditulis, Anda tidak dapat menggunakan ID block tersebut untuk mengaktifkan RecordWriter lain guna menulis data. Jumlah maksimum block adalah 20.000. Rentang ID block adalah 0 hingga 19.999.
Berapa ukuran maksimum sebuah block?
Ukuran default setiap block yang diupload ke Tunnel adalah 100 MiB. Ukuran maksimum sebuah block adalah 100 GB. Kami sangat menyarankan agar Anda mengatur ukuran block lebih besar dari 64 MB. Setiap block berkorespondensi dengan satu file. File dengan ukuran kurang dari 64 MB dianggap sebagai file kecil. Jika terdapat banyak file kecil, performa MaxCompute akan terpengaruh. Jika Anda terus-menerus mengupload data dalam jumlah besar, ukuran tiap block dapat diatur antara 64 MB hingga 256 MB. Jika Anda mengupload data sekali sehari, ukuran tiap block dapat sekitar 1 GB.
Anda dapat menggunakan TunnelBufferedWriter untuk mengupload file dan mencegah pembentukan file kecil. Untuk informasi selengkapnya, lihat TunnelBufferedWriter.
Apa yang harus saya lakukan jika operasi baca atau tulis mengalami timeout atau terjadi exception I/O?
Saat Anda mengupload data, tindakan jaringan dipicu setiap kali RecordWriter menulis data sebesar 8 KB. Jika tidak ada tindakan jaringan yang dipicu dalam waktu 120 detik, server akan menutup koneksi dan RecordWriter menjadi tidak tersedia. Dalam kasus ini, Anda harus mengaktifkan RecordWriter baru untuk menulis data.
Untuk mengatasi masalah ini, kami menyarankan Anda menggunakan TunnelBufferedWriter.
Saat Anda mendownload data, RecordReader bekerja dengan cara yang mirip dengan RecordWriter. Jika tidak ada tindakan jaringan yang dipicu dalam periode waktu yang lama, server akan menutup koneksi. Kami menyarankan Anda menggunakan RecordReader untuk terus-menerus membaca data tanpa memanggil antarmuka sistem lainnya.