全部产品
Search
文档中心

E-MapReduce:FAQ

更新时间:Nov 10, 2025

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.

  1. 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 =
  2. 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 account
    • jindosdk.cfg

      fs.oss.accessKeyId = AccessKey ID of the destination account
      fs.oss.accessKeySecret = AccessKey secret of the destination account
  3. 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.

  1. 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.

  2. 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>.

  3. Gunakan file JAR tersebut. Untuk informasi selengkapnya, lihat Java UDF dan JDBC Catalog.

Cara mengatur ulang kata sandi instans

Penting
  • 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.

  1. Buka halaman detail instans.

    1. Masuk ke Konsol E-MapReduce.

    2. Di panel navigasi kiri, pilih EMR Serverless > StarRocks.

    3. Klik nama instans target.

  2. Pada bagian Basic Information di halaman Instance Details, klik Reset Password.

  3. 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 user
  • Penyebab: Kesalahan ini dapat disebabkan oleh izin yang tidak mencukupi atau versi instans yang sudah usang.

  • Solusi:

    1. 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.

    2. 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 berisi the most similar input is {a legal identifier}.

    image

  • 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:

    1. 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 $$
    2. Jalankan pernyataan SQL yang berisi tanda titik koma. Contoh berikut menunjukkan cara melakukannya.

      INSERT INTO sr_test VALUES 
      (1, 'asdsd,asdsads'), 
      (2, 'sadsad;asdsads');
    3. Kembalikan pemisah default.

      Setelah pernyataan SQL dieksekusi, kembalikan pemisah default (;) agar operasi SQL berikutnya dapat berjalan sebagaimana mestinya.

      delimiter ;
    4. Verifikasi hasilnya.

      Jalankan pernyataan kueri untuk memverifikasi bahwa data telah dimasukkan dengan benar.

      image

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_time

      • FreeBSD/macOS: net.inet.tcp.keepidle

      Periode ketidakaktifan setelah mana probe Keepalive pertama dikirim. Satuan: detik.

      600 detik

      • Linux: net.ipv4.tcp_keepalive_intvl

      • FreeBSD/macOS: net.inet.tcp.keepintvl

      Interval antara pengiriman ulang probe Keepalive. Satuan: detik.

      60 detik

      • Linux: net.ipv4.tcp_keepalive_probes

      • FreeBSD/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.conf dan jalankan sysctl -p untuk 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=5
      • Terapkan 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.

      Catatan

      Kode 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 socket Python mendukung konfigurasi langsung parameter TCP Keepalive.

      Catatan

      Sistem operasi yang berbeda mungkin menggunakan nama parameter yang berbeda. Misalnya, macOS mungkin memerlukan TCP_KEEPALIVE alih-alih TCP_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 net Golang menyediakan konfigurasi Keepalive dasar. Namun, Anda harus menggunakan paket tingkat rendah syscall untuk mengatur parameter terperinci.

      Catatan

      Sistem 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 ...
      }