Topik ini menjawab pertanyaan umum mengenai EMR Serverless StarRocks.
Cara mengakses OSS lintas akun
Saat mengimpor data atau melakukan operasi data lake di Serverless StarRocks, Anda mungkin perlu mengakses sumber daya OSS yang dimiliki oleh akun Alibaba Cloud lain. Secara default, Serverless StarRocks dikonfigurasi untuk akses tanpa kata sandi ke bucket OSS dalam akun saat ini. Untuk mengakses sumber daya OSS di akun lain, Anda harus menonaktifkan pengaturan default tersebut, mengonfigurasi secara manual pasangan AccessKey untuk akun tujuan, lalu mengirimkan parameter untuk menerapkan konfigurasi baru.
Untuk menonaktifkan akses tanpa kata sandi, pada tab Parameter Configuration, hapus nilai item konfigurasi berikut dalam file yang ditentukan.
core-site.xml
fs.oss.credentials.provider =jindosdk.cfg
fs.oss.provider.format = fs.oss.provider.endpoint =
Tambahkan pasangan AccessKey untuk akun tujuan. Pada tab Parameter Configuration, klik Add Configuration Item untuk menambahkan konfigurasi berikut ke file yang ditentukan.
core-site.xml
fs.oss.accessKeyId = AccessKey ID of the destination account fs.oss.accessKeySecret = AccessKey secret of the destination accountjindosdk.cfg
fs.oss.accessKeyId = AccessKey ID of the destination account fs.oss.accessKeySecret = AccessKey secret of the destination account
Untuk menerapkan konfigurasi, pada tab Parameter Configuration, klik Submit Parameters.
Cara menggunakan driver konektor UDF dan JDBC
Sebelum menggunakan User-Defined Function (UDF) dan driver Java Database Connectivity (JDBC), Anda harus memperoleh file JAR yang diperlukan.
Unggah file JAR ke OSS. Untuk informasi selengkapnya, lihat Upload files.
Saat mengunggah file JAR, atur File ACL menjadi Public Read/Write untuk memberikan izin baca dan tulis publik.
Dapatkan URL untuk setiap file JAR.
Di konsol OSS, temukan URL untuk setiap file JAR yang telah Anda unggah. Gunakan URL HTTP dari titik akhir internal. URL tersebut menggunakan salah satu format berikut:
Untuk driver JDBC:
http://<YourBucketName>.oss-cn-xxxx-internal.aliyuncs.com/mysql-connector-java-*.jar.Untuk UDF:
http://<YourBucketName>.oss-cn-xxxx-internal.aliyuncs.com/<YourPath>/<jar_package_name>.
Gunakan file JAR tersebut. Untuk informasi selengkapnya, lihat Java UDF dan JDBC Catalog.
Cara mengatur ulang kata sandi instans
Mengatur ulang kata sandi instans akan memutus koneksi antara klien dan server. Kami menyarankan agar Anda melakukan operasi ini pada lingkungan produksi selama jam non-sibuk untuk meminimalkan gangguan.
Hanya pengguna dengan izin AliyunEMRStarRocksFullAccess yang dapat mengatur ulang kata sandi.
Buka halaman detail instans.
Masuk ke Konsol E-MapReduce.
Di panel navigasi kiri, pilih .
Klik nama instans target.
Pada bagian Basic Information di halaman Instance Details, klik Reset Password.
Pada kotak dialog yang muncul, masukkan kata sandi baru, konfirmasi, lalu klik OK.
Mengapa terjadi kesalahan saat menulis data ke tabel Paimon?
Gejala: Saat menggunakan StarRocks untuk menulis data ke tabel Paimon, Anda mungkin menerima pesan kesalahan berikut.
(5025, 'Backend node not found. Check if any backend node is down.')Penyebab: Mekanisme pemeriksaan izin tabel Paimon mencegah StarRocks mengidentifikasi node backend secara benar selama operasi penulisan.
Solusi:
Peningkatan versi (Direkomendasikan)Jika versi instans Anda lebih lama dari salah satu versi berikut, lakukan peningkatan versi minor untuk menerapkan perbaikan.
StarRocks 3.2: 3.2.11-1.89 atau lebih baru
StarRocks 3.3: 3.3.8-1.88 atau lebih baru
Penanganan sementaraPada tab Parameter Configuration instans StarRocks, tambahkan item konfigurasi berikut ke file
core-site.xml.dlf.permission.clientCheck=false
Cara menangani kesalahan not a RAM user saat membuat tabel eksternal di StarRocks
Gejala: Saat mencoba membuat tabel eksternal di StarRocks, Anda mungkin menerima pesan kesalahan berikut.
current user is not a RAM userPenyebab: Kesalahan ini dapat disebabkan oleh izin yang tidak mencukupi atau versi instans yang sudah usang.
Solusi:
Periksa izin pengguna RAM. Pastikan pengguna Resource Access Management (RAM) memiliki izin yang diperlukan untuk mengoperasikan StarRocks. Untuk informasi selengkapnya, lihat Grant permissions to a RAM user.
Jika izin sudah benar, buka halaman Instance Details untuk instans StarRocks guna memeriksa dan meningkatkan versi kernel.
Jika versi instans Anda lebih lama dari salah satu versi berikut, lakukan peningkatan versi minor untuk menerapkan perbaikan.
StarRocks 3.2: 3.2.11-1.89 atau lebih baru
StarRocks 3.3: 3.3.8-1.88 atau lebih baru
Mengapa terjadi kesalahan saat menjalankan pernyataan SQL yang berisi tanda titik koma di SQL Editor?
Gejala: Saat menjalankan pernyataan SQL yang berisi tanda titik koma (
;) di SQL Editor, kesalahan dilaporkan. Pesan kesalahan berisithe most similar input is {a legal identifier}.
Penyebab: SQL Editor menggunakan tanda titik koma (
;) sebagai pemisah pernyataan secara default. Oleh karena itu, jika pernyataan SQL Anda berisi tanda titik koma (;), terjadi kesalahan penguraian sintaks.Solusi:
Tetapkan pemisah kustom.
Sebelum menjalankan pernyataan SQL yang berisi tanda titik koma, tetapkan pemisah kustom untuk mencegah kesalahan penguraian sintaks. Misalnya, Anda dapat mengubah pemisah menjadi
$$.delimiter $$Jalankan pernyataan SQL yang berisi tanda titik koma. Contoh berikut menunjukkan cara melakukannya.
INSERT INTO sr_test VALUES (1, 'asdsd,asdsads'), (2, 'sadsad;asdsads');Kembalikan pemisah default.
Setelah pernyataan SQL dieksekusi, kembalikan pemisah default (
;) agar operasi SQL berikutnya dapat berjalan sebagaimana mestinya.delimiter ;Verifikasi hasilnya.
Jalankan pernyataan kueri untuk memverifikasi bahwa data telah dimasukkan dengan benar.

Mengapa Serverless StarRocks gagal mengimpor data atau mengakses tabel eksternal?
Gejala: Saat menggunakan Serverless StarRocks untuk mengimpor data atau mengakses tabel eksternal, impor atau koneksi dapat gagal jika tujuannya adalah alamat Internet.
Penyebab: Instans Serverless StarRocks berjalan di virtual private cloud (VPC) secara default. Secara default, VPC tidak memiliki akses langsung ke Internet. Oleh karena itu, permintaan untuk mengakses sumber daya Internet, seperti mengimpor data atau mengkueri tabel eksternal, gagal jika akses Internet belum dikonfigurasi.
Solusi: Anda dapat men-deploy Internet NAT gateway di VPC dan mengaktifkan fitur SNAT. Hal ini memungkinkan instans Serverless StarRocks mengakses sumber daya Internet melalui gerbang tersebut. Untuk informasi selengkapnya, lihat Use the SNAT feature of an Internet NAT gateway to access the Internet.
Cara mencegah CLB/SLB di instans StarRocks menutup koneksi klien karena waktu idle habis
Gejala: Di instans StarRocks dengan lebih dari satu node FE, Anda dapat mengaktifkan Server Load Balancer (SLB) untuk tujuan penyeimbangan beban. Untuk informasi selengkapnya, lihat Manage gateways. Setelah mengaktifkan SLB untuk instans StarRocks, jika kueri SQL berjalan lebih dari 900 detik, SLB akan memaksa menutup koneksi klien. Tindakan ini mencegah hasil kueri dikembalikan.
Penyebab: Koneksi TCP SLB memiliki waktu timeout idle maksimum 900 detik. Jika tidak ada data yang ditransmisikan melalui koneksi selama 900 detik—misalnya, saat kueri SQL berjalan lama sedang dieksekusi—SLB secara aktif menutup koneksi. Akibatnya, koneksi terputus saat klien sedang menunggu tanggapan dari StarRocks.
Solusi: Atur parameter TCP Keepalive pada klien untuk mempertahankan koneksi antara klien dan SLB. Hal ini mencegah koneksi ditutup karena waktu idle habis.
Pengaturan parameter kernel global (tingkat sistem)
Anda dapat memodifikasi parameter kernel sistem operasi untuk mengaktifkan dan mengonfigurasi parameter TCP Keepalive untuk semua koneksi TCP. Hal ini membantu memantau status koneksi jaringan.
Parameter
Deskripsi
Nilai yang direkomendasikan
Linux:
net.ipv4.tcp_keepalive_timeFreeBSD/macOS:
net.inet.tcp.keepidle
Periode ketidakaktifan setelah mana probe Keepalive pertama dikirim. Satuan: detik.
600 detik
Linux:
net.ipv4.tcp_keepalive_intvlFreeBSD/macOS:
net.inet.tcp.keepintvl
Interval antara pengiriman ulang probe Keepalive. Satuan: detik.
60 detik
Linux:
net.ipv4.tcp_keepalive_probesFreeBSD/macOS:
net.inet.tcp.keepcnt
Jumlah probe gagal berturut-turut setelah mana koneksi diputus.
5
Linux
Terapkan pengaturan sementara
# Setel parameter Keepalive global (memerlukan izin root) sudo sysctl -w net.ipv4.tcp_keepalive_time=600 # Sesuai dengan keepidle (600 detik) sudo sysctl -w net.ipv4.tcp_keepalive_intvl=60 # Sesuai dengan keepintvl (60 detik) sudo sysctl -w net.ipv4.tcp_keepalive_probes=5 # Sesuai dengan keepcount (5)Terapkan pengaturan permanen
Tambahkan konten berikut ke
/etc/sysctl.confdan jalankansysctl -puntuk menerapkan pengaturan.echo "net.ipv4.tcp_keepalive_time = 600" >> /etc/sysctl.conf echo "net.ipv4.tcp_keepalive_intvl = 60" >> /etc/sysctl.conf echo "net.ipv4.tcp_keepalive_probes = 5" >> /etc/sysctl.conf
FreeBSD/macOS
Terapkan pengaturan sementara
# Setel parameter Keepalive global (memerlukan izin root) sudo sysctl -w net.inet.tcp.keepidle=600 sudo sysctl -w net.inet.tcp.keepintvl=60 sudo sysctl -w net.inet.tcp.keepcnt=5Terapkan pengaturan permanen
Tambahkan konten berikut ke
/etc/sysctl.conf.echo "net.inet.tcp.keepidle = 600" >> /etc/sysctl.conf echo "net.inet.tcp.keepintvl = 60" >> /etc/sysctl.conf echo "net.inet.tcp.keepcnt = 5" >> /etc/sysctl.conf
Pengaturan tingkat aplikasi
Anda dapat menggunakan API khusus bahasa pemrograman untuk mengatur parameter TCP Keepalive untuk koneksi tunggal.
Java
Pustaka standar Java memiliki dukungan terbatas untuk TCP Keepalive. Namun, Anda dapat mengimplementasikannya menggunakan refleksi atau opsi soket tingkat rendah.
CatatanKode berikut memerlukan dukungan sistem untuk opsi seperti `tcp_keepidle` di Linux atau FreeBSD. Selain itu, beberapa metode, seperti refleksi, mungkin tidak berfungsi karena perbedaan versi JVM. Kami menyarankan Anda menguji kompatibilitas sebelum menggunakannya.
import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketOption; import java.nio.channels.SocketChannel; public class TcpKeepaliveExample { public static void main(String[ ] args) { try (Socket socket = new Socket()) { // 1. Aktifkan Keepalive socket.setKeepAlive(true); // 2. Atur parameter Keepalive (memerlukan opsi soket tingkat rendah) SocketChannel channel = socket.getChannel(); if (channel != null) { // Atur Keepidle (waktu idle) channel.setOption(StandardSocketOptions.SO_KEEPALIVE, true); // Keepalive harus diaktifkan terlebih dahulu setSocketOptionInt(socket, "tcp_keepidle", 600); // Memerlukan dukungan sistem // Atur Keepintvl (interval pengiriman ulang) setSocketOptionInt(socket, "tcp_keepintvl", 60); // Atur Keepcount (jumlah kegagalan) setSocketOptionInt(socket, "tcp_keepcnt", 5); // Catatan: Nama parameter dapat berbeda tergantung sistem } // Terhubung ke server socket.connect(new InetSocketAddress("example.com", 80)); // ... Operasi lainnya ... } catch (IOException e) { e.printStackTrace(); } } // Gunakan refleksi untuk mengatur opsi soket spesifik sistem (seperti di Linux/FreeBSD) private static void setSocketOptionInt(Socket socket, String optionName, int value) { try { Class<?> clazz = Class.forName("java.net.Socket$SocketOptions"); Object options = clazz.getDeclaredMethod("options").invoke(socket); Class<?> optionsClass = options.getClass(); optionsClass.getDeclaredMethod("setOption", String.class, int.class) .invoke(options, optionName, value); } catch (Exception e) { throw new RuntimeException("Gagal mengatur opsi soket " + optionName, e); } } }Python
Modul
socketPython mendukung konfigurasi langsung parameter TCP Keepalive.CatatanSistem operasi yang berbeda mungkin menggunakan nama parameter yang berbeda. Misalnya, macOS mungkin memerlukan
TCP_KEEPALIVEalih-alihTCP_KEEPIDLE. Beberapa parameter mungkin memerlukan izin root untuk diatur.import socket def create_keepalive_socket(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 1. Aktifkan Keepalive sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) # 2. Atur parameter Keepalive (Linux/FreeBSD) # Keepidle: 600 detik sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 600) # Keepintvl: 60 detik sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 60) # Keepcount: 5 sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 5) return sock # Contoh sock = create_keepalive_socket() sock.connect(("example.com", 80)) # ... Operasi lainnya ... sock.close()Golang
Paket
netGolang menyediakan konfigurasi Keepalive dasar. Namun, Anda harus menggunakan paket tingkat rendahsyscalluntuk mengatur parameter terperinci.CatatanSistem operasi yang berbeda mungkin menggunakan nama parameter yang berbeda. Beberapa parameter mungkin memerlukan izin root untuk diatur.
package main import ( "fmt" "net" "syscall" ) func main() { // Buat koneksi TCP conn, err := net.Dial("tcp", "example.com:80") if err != nil { panic(err) } defer conn.Close() // Dapatkan deskriptor file tingkat dasar fd := conn.(*net.TCPConn).SyscallConn() // Atur parameter Keepalive fd.Control(func(fdPtr *net.FileDesc) { fd := fdPtr.File // Aktifkan Keepalive err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, syscall.TCP_KEEPALIVE, 1) if err != nil { panic(err) } // Atur Keepidle (waktu idle) err = syscall.SetsockoptInt(int(fd), syscall.SOL_TCP, syscall.TCP_KEEPIDLE, 600) if err != nil { panic(err) } // Atur Keepintvl (interval pengiriman ulang) err = syscall.SetsockoptInt(int(fd), syscall.SOL_TCP, syscall.TCP_KEEPINTVL, 60) if err != nil { panic(err) } // Atur Keepcount (jumlah kegagalan) err = syscall.SetsockoptInt(int(fd), syscall.SOL_TCP, syscall.TCP_KEEPCNT, 5) if err != nil { panic(err) } }) // ... Operasi lainnya ... }