Topik ini menjawab pertanyaan umum (FAQ) mengenai penggunaan kit pengembangan perangkat lunak (SDK) Tunnel.
|
Category |
FAQ |
|
Tunnel SDK Upload |
|
|
Tunnel SDK Download |
|
|
Other questions |
Saat saya mengunggah data menggunakan Tunnel SDK, apakah data tersebut dapat didistribusikan secara otomatis ke partisi?
Tunnel SDK tidak dapat mendistribusikan data yang diunggah secara otomatis ke partisi yang berbeda. Setiap unggahan hanya dapat menargetkan satu tabel atau satu partisi dalam tabel tersebut. Untuk tabel partisi, Anda harus menentukan partisi tujuan. Untuk tabel partisi multi-level, Anda harus menentukan partisi level terendah.
Saat saya mengunggah data menggunakan Tunnel SDK, apakah ada batas ukuran untuk paket JAR yang dibuat dari User-Defined Function (UDF)?
Paket JAR tidak boleh melebihi 10 MB. Jika paket JAR Anda lebih besar dari 10 MB, Anda dapat menggunakan perintah Tunnel Upload MaxCompute untuk mengunggah data.
Apakah ada batas jumlah partisi saat saya mengunggah data menggunakan Tunnel SDK?
Maksimal 60.000 partisi didukung. Jumlah partisi yang terlalu banyak dapat mempersulit statistik dan analisis. MaxCompute membatasi jumlah instans dalam satu Pekerjaan, dan jumlah instans pekerjaan berkaitan erat dengan volume data masukan dan jumlah partisi. Oleh karena itu, Anda harus mengevaluasi kebutuhan bisnis Anda dan memilih kebijakan partisi yang sesuai untuk mencegah masalah akibat terlalu banyak partisi.
Bagaimana cara mengatasi error "StatusConflict" yang terjadi saat saya mengunggah data menggunakan Tunnel SDK?
-
Gejala
Saat Anda mengunggah data menggunakan Tunnel SDK, error berikut dikembalikan.
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: Error ini terjadi saat Anda mencoba menutup RecordWriter. Kemungkinan penyebabnya adalah sebagai berikut:
-
Anda mencoba menutup RecordWriter yang sudah ditutup sebelumnya.
-
Sesi yang terkait dengan RecordWriter tersebut sudah ditutup.
-
Sesi tersebut sudah dikomit.
-
-
Solusi: Periksa kemungkinan penyebab di atas. Misalnya, Anda dapat mencetak log untuk memeriksa status RecordWriter dan sesi sebelum mengkomit sesi tersebut. Setelah memastikan tidak ada masalah tersebut, coba unggah data lagi.
Bagaimana cara mengatasi error "Blocks Not Match" yang terjadi saat saya mengunggah data menggunakan Tunnel SDK?
-
Gejala:
Saat Anda mengunggah data menggunakan Tunnel SDK, error berikut dikembalikan.
ErrorCode=Local Error, ErrorMessage=Blocks not match, server: 0, tunnelServiceClient: 1 at com.aliyun.odps.tunnel.TableTunnel$UploadSession.commit(TableTunnel.java:814) -
Penyebab
Jumlah blok yang diterima server tidak sesuai dengan jumlah blok yang ditentukan dalam parameter komit.
-
Solusi
-
Dalam kode Anda, periksa jumlah writer yang dibuka oleh
uploadSession.openRecordWriter(i)dan array blok yang digunakan saat komit. Pastikan keduanya saling sesuai. -
Setelah operasi tulis selesai, pastikan
recordWriter.close();dipanggil. Jika Anda langsung mengkomit sesi, jumlah blok di sisi server mungkin tidak sesuai dengan jumlah yang diharapkan.
-
Bagaimana cara mengatasi error "StatusConflict" yang terjadi saat saya menjalankan odps tunnel recordWriter.close() setelah mengunggah 80 juta record sekaligus?
-
Gejala
Saat Anda mengunggah 80 juta record sekaligus, error berikut dikembalikan saat menjalankan odps tunnel recordWriter.close().
ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status. -
Penyebab
Sesi berada dalam kondisi tidak valid karena operasi sebelumnya telah menutup atau mengkomitnya.
-
Solusi
Buat sesi baru dan unggah data lagi. Setiap partisi memerlukan sesi terpisah. Jika error disebabkan oleh beberapa kali komit, pertama-tama periksa apakah data berhasil diunggah. Jika unggahan gagal, ulangi operasi tersebut. Untuk informasi lebih lanjut, lihat Contoh unggahan multi-thread.
Bagaimana cara menggunakan TunnelBufferedWriter untuk menghindari error saat saya melakukan unggahan data batch dengan Tunnel SDK?
Mulai dari versi 0.21.3-public, MaxCompute Java SDK menyertakan BufferedWriter SDK, yang menyederhanakan unggahan data dan menyediakan Toleransi kesalahan. Dari perspektif pengguna, Anda hanya perlu membuka writer pada sesi lalu menulis record. Secara praktis, BufferedWriter terlebih dahulu menyimpan record dalam buffer di sisi client. Saat buffer penuh, koneksi HTTP dibuka untuk mengunggah data.
BufferedWriter dirancang untuk mentoleransi kesalahan dan memastikan unggahan data berhasil. Untuk informasi lebih lanjut, lihat TunnelBufferedWriter.
Bagaimana cara mengatasi error "You need to specify a partitionspec along with the specified table" yang terjadi saat saya mengunduh data menggunakan Tunnel SDK?
-
Gejala
Saat Anda mengunduh data dari tabel partisi menggunakan Tunnel SDK, error berikut dikembalikan.
ErrorCode=MissingPartitionSpec, ErrorMessage=You need to specify a partitionspec along with the specified table. -
Penyebab
Saat Anda mengunduh data dari tabel partisi menggunakan Tunnel SDK, Anda harus menentukan nilai untuk kolom kunci partisi. Jika tidak, error akan terjadi.
-
Solusi
-
Jika Anda menggunakan command line Tunnel di tool client MaxCompute untuk mengekspor data, client mendukung ekspor seluruh tabel partisi. Data diekspor ke folder.
-
Jika Anda menggunakan Tunnel SDK untuk mengekspor data, pertama-tama gunakan SDK untuk mengambil semua partisi tabel tersebut. Berikut adalah contoh perintahnya.
odps.tables().get(tablename) t.getPartitions()
-
Bahasa pemrograman apa saja yang didukung oleh MaxCompute Tunnel SDK?
MaxCompute Tunnel saat ini mendukung Java SDK.
Apakah BlockId dapat digunakan kembali?
BlockId tidak dapat digunakan kembali dalam UploadSession yang sama. Untuk satu UploadSession, setelah Anda membuka RecordWriter dengan BlockId, menulis sejumlah data, lalu memanggil close(), Anda tidak dapat menggunakan BlockId yang sama untuk membuka RecordWriter lain. Secara default, maksimal terdapat 20.000 blok, dengan BlockId berkisar dari 0 hingga 19.999.
Apakah ada batas ukuran untuk sebuah block?
Ukuran default blok data yang diunggah ke Tunnel adalah 100 MiB. Ukuran maksimum untuk satu blok adalah 100 GB. Untuk data yang lebih besar dari 64 MB, pastikan setiap blok sesuai dengan satu file. File yang lebih kecil dari 64 MB dianggap sebagai small files. Jumlah small files yang terlalu banyak dapat menurunkan performa. Jika Anda terus-menerus mengunggah data dalam jumlah besar, atur ukuran blok antara 64 MB hingga 256 MB. Jika Anda melakukan unggahan batch harian, Anda dapat mengatur ukuran blok sekitar 1 GB.
Penggunaan BufferedWriter yang baru menyederhanakan unggahan dan membantu menghindari masalah seperti small files. Untuk informasi lebih lanjut, lihat TunnelBufferedWriter.
Bagaimana cara mengatasi timeout baca/tulis atau IOException?
Saat Anda mengunggah data, aksi jaringan dipicu setiap 8 KB data yang ditulis oleh Writer. Jika tidak ada aktivitas jaringan selama 120 detik, sisi server secara aktif menutup koneksi. Writer kemudian menjadi tidak tersedia. Untuk melanjutkan penulisan, Anda harus membuka Writer baru.
Kami menyarankan Anda menggunakan TunnelBufferedWriter.
Saat Anda mengunduh data, Reader memiliki mekanisme serupa. Koneksi terputus jika tidak ada aktivitas jaringan dalam periode yang lama. Untuk mencegah hal ini, jalankan proses Reader secara terus-menerus tanpa menyisipkan panggilan ke antarmuka sistem lain.