Todos los productos
Search
Centro de documentos

E-MapReduce:FAQ

Última actualización: Sep 19, 2026

Este tema responde a las preguntas frecuentes sobre EMR Serverless StarRocks.

¿Cómo accedo a OSS entre cuentas?

De forma predeterminada, EMR Serverless StarRocks proporciona acceso sin contraseña a los bucket de OSS dentro de la misma cuenta. Para acceder a recursos de OSS en otra cuenta, debe deshabilitar este comportamiento predeterminado, configurar el par de AccessKey de la cuenta de destino y aplicar la nueva configuración.

  1. Deshabilite el acceso sin contraseña: en la pestaña Parameter Configuration, borre los valores de los siguientes elementos de configuración en los archivos especificados.

    • core-site.xml

      fs.oss.credentials.provider =
    • jindosdk.cfg

      fs.oss.provider.format =
      fs.oss.provider.endpoint =
  2. Agregue el par de AccessKey de la cuenta de destino: en la pestaña Parameter Configuration, haga clic en Add Configuration Item y agregue las siguientes configuraciones a los archivos especificados.

    • core-site.xml

      fs.oss.accessKeyId = AccessKey ID of the target account
      fs.oss.accessKeySecret = AccessKey Secret of the target account
    • jindosdk.cfg

      fs.oss.accessKeyId = AccessKey ID of the target account
      fs.oss.accessKeySecret = AccessKey Secret of the target account
  3. Aplique la configuración: en la pestaña Parameter Configuration, haga clic en Submit Parameters.

Uso de controladores UDF y JDBC connector

Antes de usar los controladores UDF y JDBC, debe obtener los archivos JAR necesarios desde una fuente externa.

  1. Cargue los archivos JAR en OSS. Para obtener más información, consulte Upload files.

    Al cargar los archivos, establezca el object ACL en Public Read/Write para otorgar permisos públicos de lectura y escritura a los archivos JAR.

  2. Obtenga la URL de cada archivo JAR.

    En la consola de OSS, busque el enlace de cada archivo JAR que se haya cargado correctamente. Utilice la URL HTTP del endpoint interno, la cual debe tener uno de los siguientes formatos:

    • Para un controlador JDBC: http://<YourBucketName>.oss-cn-xxxx-internal.aliyuncs.com/mysql-connector-java-*.jar.

    • Para una UDF: http://<YourBucketName>.oss-cn-xxxx-internal.aliyuncs.com/<YourPath>/<jar_package_name>.

  3. Utilice los archivos JAR. Para obtener más información, consulte Java UDF y JDBC Catalog.

¿Cómo restablezco la contraseña de la instancia?

Importante
  • Restablecer la contraseña de la instancia interrumpe las conexiones entre el cliente y el servidor. Para minimizar el impacto en producción, ejecute esta operación fuera del horario de mayor demanda.

  • Solo los usuarios con el permiso AliyunEMRStarRocksFullAccess pueden restablecer la contraseña.

  1. Vaya a la página de detalles de la instancia.

    1. Inicie sesión en la consola de E-MapReduce.

    2. En el panel de navegación izquierdo, elija EMR Serverless > StarRocks.

    3. Haga clic en el nombre de la instancia de destino.

  2. En la página Instance Details, dentro de la sección Basic Information, haga clic en Reset Password.

  3. En el cuadro de diálogo que aparece, introduzca y confirme la nueva contraseña. Después, haga clic en OK.

Error al escribir datos en tablas Paimon

  • Síntoma: cuando usa StarRocks para escribir datos en una tabla Paimon, es posible que reciba el siguiente mensaje de error:

    (5025, 'Backend node not found. Check if any backend node is down.')
  • Causa: una comprobación de permisos en las tablas Paimon puede impedir que StarRocks identifique correctamente los nodos BE durante las operaciones de escritura.

  • Solución:

    • Actualice la versión (recomendado): si la versión de su instancia es anterior a alguna de las siguientes, ejecute una minor version update para aplicar la corrección.

      • StarRocks 3.2: 3.2.11-1.89 o posterior

      • StarRocks 3.3: 3.3.8-1.88 o posterior

    • Solución alternativa: en la pestaña Parameter Configuration de la instancia de StarRocks, agregue el siguiente elemento de configuración al archivo core-site.xml.

      dlf.permission.clientCheck=false

¿Qué hacer si recibe el error not a RAM user al crear una tabla externa en StarRocks?

  • Síntoma: al crear una tabla externa en StarRocks, es posible que reciba el siguiente mensaje de error:

    current user is not a RAM user
  • Causa: este error se produce por permisos insuficientes o por una versión de instancia obsoleta.

  • Solución:

    1. Compruebe los permisos del usuario de RAM: asegúrese de que el usuario de Resource Access Management (RAM) tenga los permisos obligatorios para StarRocks. Para obtener más información, consulte Grant permissions to a RAM user.

    2. Si los permisos son correctos, compruebe y actualice la versión del kernel en la página Instance Details de StarRocks.

      Si la versión de su instancia es anterior a alguna de las siguientes, ejecute una minor version update para aplicar la corrección.

      • StarRocks 3.2: 3.2.11-1.89 o posterior

      • StarRocks 3.3: 3.3.8-1.88 o posterior

Error con puntos y comas en SQL Editor

  • Síntoma: cuando ejecuta una instrucción SQL que contiene un punto y coma (;) en SQL Editor, se produce un error. El mensaje de error incluye the most similar input is {a legal identifier}.

    El código de error es 1064 y los detalles también incluyen Unexpected input '<EOF>', lo que indica un error de sintaxis en la línea 3, columna 11.

  • Este error ocurre porque SQL Editor utiliza el punto y coma (;) como terminador de instrucciones de forma predeterminada. Si su instrucción SQL contiene un punto y coma (;), se genera un error de análisis sintáctico.

  • Solución:

    1. Establezca un delimitador personalizado.

      Antes de ejecutar una instrucción SQL que contenga un punto y coma, establezca un delimitador personalizado para evitar errores de análisis sintáctico. Por ejemplo, cambie el delimitador a $$.

      delimiter $$
    2. Ejecute la instrucción SQL que contiene el punto y coma. A continuación se muestra un ejemplo:

      INSERT INTO sr_test VALUES 
      (1, 'asdsd,asdsads'), 
      (2, 'sadsad;asdsads');
    3. Restaure el delimitador predeterminado.

      Una vez ejecutada la instrucción SQL, restaure el delimitador predeterminado (;) para que las operaciones SQL posteriores se ejecuten según lo esperado.

      delimiter ;
    4. Compruebe el resultado.

      Ejecute una consulta para comprobar que los datos se hayan insertado correctamente.

      delimiter ;
      SELECT * FROM sr_test;
      Output
        test_id    test_desc
      0       1    asdsd,asdsads
      1       2    sadsad;asdsads

Fallo al importar datos o acceder a tablas externas

  • Síntoma: cuando usa EMR Serverless StarRocks para importar datos o acceder a una tabla externa, la importación o la conexión puede fallar si el destino es una dirección IP pública.

  • Causa: una instancia de EMR Serverless StarRocks se ejecuta de forma predeterminada en un entorno de Virtual Private Cloud (VPC), el cual podría no tener acceso directo a Internet. Por lo tanto, las solicitudes a recursos públicos, como las importaciones de datos o las consultas a tablas externas, fallan a menos que se configure el acceso a Internet.

  • Solución: despliegue una puerta de enlace NAT de Internet en la VPC y habilite la función SNAT. Esto permite que la instancia de EMR Serverless StarRocks acceda a recursos públicos a través de la puerta de enlace. Para obtener más información, consulte Use the SNAT feature of an Internet NAT gateway to access the Internet.

Evitar el cierre de conexiones por el tiempo de espera de inactividad de SLB/CLB

  • Síntoma: cuando utiliza SLB con una instancia de StarRocks, SLB cierra forzosamente la conexión del cliente si una consulta SQL se ejecuta durante más de 900 segundos. Esto impide que la consulta devuelva un resultado. Para obtener más información sobre cómo habilitar SLB, consulte Manage gateways.

  • Causa: SLB cierra cualquier conexión TCP que permanezca inactiva durante más de 900 segundos. Esto puede ocurrir durante una consulta SQL de larga duración e interrumpir la conexión antes de que StarRocks devuelva un resultado.

  • Solución: configure los parámetros TCP Keepalive del lado del cliente para evitar que SLB cierre las conexiones inactivas.

    • Configuración global de parámetros del kernel (nivel de sistema)

      Modifique los parámetros del kernel del sistema operativo para habilitar y configurar los ajustes adecuados de TCP Keepalive en todas las conexiones TCP. Esto ayuda a supervisar el estado de las conexiones de red. En la siguiente tabla se describen los parámetros que se deben configurar.

      Parámetro

      Descripción

      Valor recomendado

      • Linux: net.ipv4.tcp_keepalive_time

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

      Periodo de inactividad, en segundos, tras el cual se envía la primera prueba de Keepalive.

      600 segundos

      • Linux: net.ipv4.tcp_keepalive_intvl

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

      Intervalo, en segundos, entre retransmisiones de pruebas de Keepalive.

      60 segundos

      • Linux: net.ipv4.tcp_keepalive_probes

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

      Número de pruebas fallidas consecutivas tras las cuales se descarta la conexión.

      5

      Linux

      • Aplicar la configuración temporalmente

        # Set global Keepalive parameters (root permissions required)
        sudo sysctl -w net.ipv4.tcp_keepalive_time=600   # Corresponds to keepidle (600 seconds)
        sudo sysctl -w net.ipv4.tcp_keepalive_intvl=60   # Corresponds to keepintvl (60 seconds)
        sudo sysctl -w net.ipv4.tcp_keepalive_probes=5   # Corresponds to keepcount (5)
      • Aplicar la configuración de forma permanente

        Agregue el siguiente contenido a /etc/sysctl.conf y ejecute sysctl -p para aplicar la configuración.

        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

      • Aplicar la configuración temporalmente

        # Set global Keepalive parameters (root permissions required)
        sudo sysctl -w net.inet.tcp.keepidle=600
        sudo sysctl -w net.inet.tcp.keepintvl=60
        sudo sysctl -w net.inet.tcp.keepcnt=5
      • Aplicar la configuración de forma permanente

        Agregue el siguiente contenido a /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
    • Configuración a nivel de aplicación

      Puede utilizar las API específicas de cada lenguaje para establecer los parámetros de TCP Keepalive en una sola conexión.

      Java

      La biblioteca estándar de Java tiene compatibilidad limitada con TCP Keepalive. No obstante, puede implementarlo mediante reflexión u opciones de socket de bajo nivel.

      Nota

      El siguiente código requiere que el sistema admita opciones como tcp_keepidle en Linux o FreeBSD. Además, algunos métodos, como la reflexión, podrían no funcionar debido a diferencias entre versiones de JVM. Se recomienda probar la compatibilidad antes de usarlo en un entorno de producción.

      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. Enable Keepalive
                  socket.setKeepAlive(true);
                  // 2. Set Keepalive parameters (requires low-level socket options)
                  SocketChannel channel = socket.getChannel();
                  if (channel != null) {
                      // Set Keepidle (idle time)
                      channel.setOption(StandardSocketOptions.SO_KEEPALIVE, true); // Keepalive must be enabled first
                      setSocketOptionInt(socket, "tcp_keepidle", 600); // Requires system support
                      // Set Keepintvl (retransmission interval)
                      setSocketOptionInt(socket, "tcp_keepintvl", 60);
                      // Set Keepcount (number of failures)
                      setSocketOptionInt(socket, "tcp_keepcnt", 5); // Note: The parameter name may vary by system
                  }
                  // Connect to the server
                  socket.connect(new InetSocketAddress("example.com", 80));
                  // ... Other operations ...
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
          // Use reflection to set system-specific socket options (such as on 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("Failed to set socket option " + optionName, e);
              }
          }
      }

      Python

      El módulo socket de Python admite la configuración directa de los parámetros de TCP Keepalive.

      Nota

      Los distintos sistemas operativos pueden usar nombres de parámetros diferentes. Por ejemplo, macOS podría requerir TCP_KEEPALIVE en lugar de TCP_KEEPIDLE. Algunos parámetros podrían necesitar permisos de root para configurarse.

      import socket
      def create_keepalive_socket():
          sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
          # 1. Enable Keepalive
          sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
          # 2. Set Keepalive parameters (Linux/FreeBSD)
          # Keepidle: 600 seconds
          sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 600)
          # Keepintvl: 60 seconds
          sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 60)
          # Keepcount: 5
          sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 5)
          return sock
      # Example
      sock = create_keepalive_socket()
      sock.connect(("example.com", 80))
      # ... Other operations ...
      sock.close()

      Golang

      El paquete net de Golang ofrece una configuración básica de Keepalive. Sin embargo, debe usar el paquete de bajo nivel syscall para establecer los parámetros detallados.

      Nota

      Los distintos sistemas operativos pueden usar nombres de parámetros diferentes. Algunos parámetros podrían necesitar permisos de root para configurarse.

      package main
      import (
          "fmt"
          "net"
          "syscall"
      )
      func main() {
          // Create a TCP connection
          conn, err := net.Dial("tcp", "example.com:80")
          if err != nil {
              panic(err)
          }
          defer conn.Close()
          // Get the underlying file descriptor
          file, err := conn.(*net.TCPConn).File()
          if err != nil {
              panic(err)
          }
          defer file.Close()
          fd := int(file.Fd())
      
          // Enable Keepalive
          err = syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 1)
          if err != nil {
              panic(fmt.Errorf("set SO_KEEPALIVE: %v", err))
          }
          // Set Keepidle (idle time)
          err = syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPIDLE, 600)
          if err != nil {
              panic(fmt.Errorf("set TCP_KEEPIDLE: %v", err))
          }
          // Set Keepintvl (retransmission interval)
          err = syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL, 60)
          if err != nil {
              panic(fmt.Errorf("set TCP_KEEPINTVL: %v", err))
          }
          // Set Keepcount (number of failures)
          err = syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPCNT, 5)
          if err != nil {
              panic(fmt.Errorf("set TCP_KEEPCNT: %v", err))
          }
          // ... Other operations ...
      }

Se reporta el error "Unexpected exception: Table '' is not a OLAP table" al respaldar datos de StarRocks

  • Síntoma: se reporta el siguiente mensaje de error cuando usa StarRocks para crear una copia de seguridad de instantánea de datos.

    Unexpected exception: Table '<table_name>' is not a OLAP table
  • Análisis de la causa:

    • La instancia utiliza el modo de separación de almacenamiento y cómputo.

      Las instancias de StarRocks que usan la separación de almacenamiento y cómputo no admiten la copia de seguridad ni la restauración de datos. Solo las instancias con almacenamiento y cómputo integrados son compatibles con esta función.

    • El tipo de motor de la tabla no es compatible.

      La función de copia de seguridad de StarRocks solo admite tablas que utilizan el motor OLAP. Si el tipo de motor de una tabla no es OLAP, se reporta este error.

  • Solución:

    • Compruebe el tipo de instancia.

      En la página Instance List de StarRocks, compruebe el campo Instance Type. Si el tipo de instancia es Storage-Compute Separation, no se admiten la copia de seguridad ni la restauración de datos. Se recomienda usar una instancia con almacenamiento y cómputo integrados para habilitar estas funciones. Para obtener más información, consulte Backup and restoration。

    • Compruebe el tipo de motor de la tabla.

      Revise la definición DDL de la tabla de destino para confirmar si se estableció ENGINE=OLAP.

      SHOW CREATE TABLE <table_name>;

      Si el motor de la tabla no es OLAP, vuelva a crear la tabla según sus requisitos de negocio y asegúrese de especificar ENGINE=OLAP.

La carga de datos en una tabla Primary Key falla con el error msg: Cancelled, msg: Primary-key index exceeds the limit

  • Problema:

    La carga de datos en una tabla Primary Key falla con el error msg: msg: Cancelled, msg: Primary-key index exceeds the limit. tablet_id: 2506733, consumption: 33176971421, limit: 32116807950. Memory stats of top five tablets: 3656508(4465M) 3656496(4464M) 3656544(4464M) 3656520(4462M) 3656532(4461M): be: backend-0.backend.xxx.svc.cluster.local.xxx

  • Enfoque de solución de problemas:

    • Analice el uso actual de memoria del nodo BE para determinar si existe un cuello de botella de recursos.

    • Determine si el clúster utiliza una arquitectura shared-nothing o shared-data, y compruebe los elementos de configuración correspondientes.

  • Pasos detallados para la solución de problemas:

    • Analizar el uso de memoria

      • El error ocurre porque la memoria consumida por el índice de clave primaria supera el límite de memoria del nodo BE.

      • Compruebe la configuración mem_limit del nodo BE, la cual puede obtener al ejecutar SHOW FRONTENDS o SHOW BACKENDS, y evalúe su capacidad de memoria disponible.

    • Soluciones

      • Solución 1: Habilitar índices persistentes (recomendado)

        • Clúster shared-nothing: establezca enable_persistent_index en true.

        • Clúster shared-data: establezca persistent_index_type en cloud_native.

      • Solución 2: Diseñar particiones adecuadamente

        • Particione la tabla Primary Key con base en dimensiones apropiadas, como tiempo o región, para evitar escrituras en toda la tabla.

        • Una vez particionada la tabla, cada escritura afecta únicamente a un subconjunto de las particiones. El índice de clave primaria solo necesita cargar datos de las particiones afectadas, lo que reduce la presión de memoria en cada escritura.

El trabajo de carga falla con el error "[E1008]Reached timeout=xxx ms"

  • Problema:

    • Cuando un trabajo de Flink carga datos en StarRocks, se produce el siguiente error: Message: [E1008] Reached timeout=7500ms @x.x.x.x:8060.

    • Cuando los datos se cargan mediante INSERT INTO, se produce el siguiente error: java.sql.SQLException: [E1008] Reached timeout=7500ms @10.106.7.182:8060.

  • Solución de problemas:

    • Si el valor de tiempo de espera en el error no es 30000 ms, que es el valor predeterminado de rpc_connect_timeout_ms, compruebe si el parámetro rpc_connect_timeout_ms del nodo BE se modificó manualmente.

    • Para los trabajos de carga que usan INSERT INTO, compruebe si el parámetro query_timeout está configurado, por ejemplo, query_timeout = 15. StarRocks establece el umbral de tiempo de espera de RPC en la mitad del valor de query_timeout y convierte el resultado a milisegundos. Por lo tanto, si query_timeout=15, el tiempo de espera correspondiente es de 7500 ms.

  • Pasos detallados para la solución de problemas:

    • Si confirma que el parámetro rpc_connect_timeout_ms del nodo BE se modificó: restáurelo a su valor predeterminado de 30000 ms para evitar errores falsos de tiempo de espera causados por un límite de conexión demasiado corto.

    • El error Reached timeout=7500ms suele indicar una alta carga de hilos brpc en el nodo BE. Esto retrasa el procesamiento de las solicitudes RPC y, eventualmente, activa un tiempo de espera agotado.

    • Ejecute SHOW TABLET FROM <destination_database>.<destination_table> ORDER BY RowCount DESC; para analizar la distribución de datos de la tabla de destino y determinar si los datos están distribuidos adecuadamente entre los tablets. Por ejemplo, si la cantidad de datos en un solo tablet supera significativamente el rango recomendado de 1 GB a 10 GB, algunos nodos BE podrían sobrecargarse, lo que degrada el rendimiento de escritura.

    • Soluciones:

      • Solución 1 (recomendada): optimice la estrategia de segmentación (bucketing) de la tabla. Seleccione un campo adecuado de alta cardinalidad como clave de segmentación en DISTRIBUTED BY HASH(...) para distribuir los datos uniformemente entre los tablets.

      • Solución 2 (mitigación temporal): si el uso de CPU y E/S en los nodos BE no ha alcanzado sus límites, ajuste los siguientes parámetros según corresponda:

        • Aumente brpc_num_threads. El valor predeterminado es el número de núcleos de CPU del nodo BE. Puede intentar establecer el parámetro en dos o cuatro veces su valor predeterminado. No exceda cuatro veces el valor predeterminado, ya que hacerlo podría aumentar la contención de hilos.

        • Aumente flush_thread_num_per_store. El valor predeterminado es 2. Puede establecer el parámetro en 4 para incrementar la concurrencia cuando los datos se vacían a los discos.

El trabajo de carga falla con el error "Error:NULL value in non-nullable column 'xxx'"

  • Problema: cuando carga datos en una tabla de StarRocks, se produce el siguiente error: Error: NULL value in non-nullable column 'xxx'.

  • Causa: se escribe un valor NULL en una columna definida como NOT NULL. Esto viola la restricción del esquema de la tabla y provoca que el trabajo de carga falle.

  • Soluciones:

    • Solución 1: Corregir los datos de origen

      Antes de escribir los datos en StarRocks, filtre o reemplace los valores NULL para asegurar que los datos cumplan con las restricciones de la tabla de destino.

    • Solución 2: Modificar el esquema de la tabla

      Si la lógica de negocio permite que el campo contenga valores NULL, modifique el esquema de la tabla y elimine la restricción NOT NULL.

Se produce el error "because of too many versions, current/limit: 1009/1000" al importar datos con Flink Connector

  • Problema:

    Cuando escribe datos continuamente en una tabla de StarRocks mediante Flink Connector, se produce el siguiente error: because of too many versions, current/limit: 1009/1000.

  • Causa: en el modelo Primary Key de StarRocks o en el modelo Unique Key que utiliza Merge-on-Write, cada importación de datos genera una nueva versión. Para evitar la saturación de metadatos y garantizar el rendimiento de las consultas, el sistema permite que cada partición retenga hasta 1000 versiones de forma predeterminada.

  • Solución:

    • Comprobar el Compaction Score de las particiones

      Ejecute la siguiente instrucción SQL para comprobar la carga de compactación de cada partición en la tabla de destino:

      SELECT 
          TABLE_NAME,
          PARTITION_NAME,
          AvgCS AS avg_compaction_score,
          MaxCS AS max_compaction_score
      FROM information_schema.partitions_meta 
      WHERE TABLE_NAME = 'your_table_name';

      Si el valor MaxCS —el Compaction Score máximo— de la partición afectada es significativamente mayor que 100, la partición contiene una gran cantidad de versiones pequeñas en espera de fusión. Esto indica que la compactación no se completó a tiempo.

    • Activar la compactación manualmente

      Ejecute la siguiente instrucción: ALTER TABLE your_db.your_table COMPACT PARTITION your_partition_name;

    • Optimizar los parámetros del sink de Flink

      Aumente los valores de los siguientes parámetros del sink de Flink: sink.buffer-flush.max-bytes, sink.buffer-flush.max-rows, sink.buffer-flush.interval-ms. Esto reduce la frecuencia de importación de datos y evita la generación excesiva de versiones pequeñas.

Error Failed to get status for file xxx al consultar datos mediante un External Catalog

  • Problema:

    Cuando consulta una tabla en un lago de datos externo, como Paimon o Iceberg, se produce el siguiente error: (1064, 'Failed to get status for file: oss://data-lakehouse-oss-normal/dataware.db/dwd_annotation2_user/metadata/00097-10647858-814a-499e-b300-51c570ee7ee0.metadata.json') La API de OSS devuelve el siguiente error:

    <Error>
      <Code>AccessDenied</Code>
      <Message>You have no right to access this object because of bucket acl.</Message>
      <RequestId>68EC744EB6CD8C3539FAB32A</RequestId>
      <HostId>data-lakehouse-oss-normal.oss-cn-shenzhen-internal.aliyuncs.com</HostId>
      <EC>0003-00000001</EC>
      <RecommendDoc>https://api.alibabacloud.com/troubleshoot?q=0003-00000001</RecommendDoc>
    </Error>
  • Causa: StarRocks depende del acceso a un servicio de object storage, como Alibaba Cloud OSS, cuando consulta tablas en un lago de datos externo, como Hive, Iceberg o Hudi, mediante un External Catalog. Los permisos o configuraciones incorrectos pueden impedir que StarRocks lea los metadatos o los archivos de datos.

  • Solución:

    • Primero, compruebe que el AccessKey sea válido. Confirme que los valores accessKeyId y accessKeySecret configurados puedan acceder al bucket de OSS de destino.

    • Si accessKeyId y accessKeySecret están configurados correctamente, compruebe si se accede al bucket de OSS entre cuentas de Alibaba Cloud. Para el acceso entre cuentas a un bucket de OSS, modifique las configuraciones correspondientes. Para obtener más información, consulte How do I access OSS across accounts? .

How do I view the disk space occupied by persistent indexes on CN and BE nodes?

Después de habilitar los índices persistentes al establecer enable_persistent_index = true o persistent_index_type = 'cloud_native', los índices de clave primaria se almacenan en disco. Puede consultar la tabla information_schema.be_tablets para obtener su uso de disco.

-- Query the index size of each table and sort the results, by index size in descending order.
SELECT 
    tables_config.TABLE_NAME,
    t1.TABLE_ID,
    t1.index_sum_mb
FROM (
    -- Calculate the total index size of each table in MB.
    SELECT 
        TABLE_ID,
        SUM(INDEX_DISK)/1024/1024 AS index_sum_mb
    FROM information_schema.be_tablets 
    GROUP BY TABLE_ID
) t1 
JOIN tables_config ON tables_config.TABLE_ID = t1.TABLE_ID 
ORDER BY index_sum_mb DESC
-- Optional: Add a LIMIT clause to limit the number of returned rows when the result set is excessively large.
-- LIMIT 100
;

How do I view ongoing write transactions and the tablets associated with different transaction batches?

Rastree los trabajos de carga en curso o recién finalizados para identificar los tablets en los que se escriben los datos.

SELECT 
    txn_table.*,
    tc.table_name
FROM (
    SELECT 
        bt.TABLET_ID,
        bt.COMMIT_TIME,
        bt.PUBLISH_TIME,
        bt.TABLE_ID
    FROM information_schema.be_txns bt
    JOIN information_schema.be_tablets btt 
        ON bt.TABLET_ID = btt.TABLET_ID
) AS txn_table
JOIN information_schema.tables_config tc 
    ON txn_table.TABLE_ID = tc.TABLE_ID;

¿Cómo analizo un aumento repentino en la carga de CPU o memoria durante un periodo específico?

Utilice los registros de auditoría para identificar las consultas que consumen grandes cantidades de recursos.

SELECT 
    queryId,
    timestamp,
    ROUND(memCostBytes / 1024 / 1024 / 1024, 2) AS memCostGB,
    cpuCostNs
FROM _starrocks_audit_db_.starrocks_audit_tbl
WHERE timestamp BETWEEN '2025-xx-xx hh:mm:ss' AND '2025-xx-xx hh:mm:ss'
ORDER BY cpuCostNs DESC, memCostGB DESC
LIMIT 20;

¿Cómo analizo un aumento repentino en la carga de E/S durante un periodo específico?

Los picos de E/S suelen deberse a escaneos a gran escala, como exploraciones completas de tablas o consultas que no pueden aprovechar el recorte de particiones ni los índices.

SELECT 
    queryId,
    timestamp,
    ROUND(scanBytes / 1024 / 1024 / 1024, 2) AS scanTotalGB
FROM _starrocks_audit_db_.starrocks_audit_tbl
WHERE timestamp BETWEEN '2025-xx-xx hh:mm:ss' AND '2025-xx-xx hh:mm:ss'
ORDER BY scanTotalGB DESC
LIMIT 20;

Error de almacenamiento insuficiente al reducir nodos BE en un clúster StarRocks totalmente administrado

  • Problema:

    Al reducir nodos BE desde la consola de un clúster StarRocks totalmente administrado, aparece a continuación el siguiente error: invalid status: [insufficient storage].

  • Causa: No se cumplen los requisitos de validación de almacenamiento para la operación de reducción. El sistema solo permite esta operación si la capacidad total de almacenamiento después de la reducción cumple con el siguiente requisito:

    Used storage < Total capacity after scale-in × 0.7

    Los valores se calculan de la siguiente manera:

    • Total capacity after scale-in = Capacidad combinada de los nodos restantes después de eliminar los nodos especificados.

    • Used storage = Suma de (capacidad total − capacidad disponible) en todos los nodos.

    • Ejecute SHOW BACKENDS para obtener totalCapacity y availCapacity.

  • Solución:

    • Compruebe la capacidad actual del clúster.

      Ejecute la siguiente instrucción SQL para obtener la capacidad total y disponible de cada nodo BE:

      SHOW BACKENDS\G

      Revise los campos TotalCapacity y AvailCapacity. Determine si el almacenamiento utilizado supera el 70 % de la capacidad total después de la reducción.

    • Expanda los discos y vuelva a intentarlo.

      Si la capacidad del disco es insuficiente, expanda los discos de los nodos BE en la consola de EMR. Asegúrese de que se cumpla Used storage < Total capacity after scale-in × 0.7 y luego vuelva a intentar la operación de reducción.

Se reporta RAM.Permission.NotAllow al iniciar sesión en StarRocks Manager

  • Problema:

    Al iniciar sesión en StarRocks Manager con un usuario de RAM, aparece el mensaje "You are not authorized to perform the operation". El código de error es RAM.Permission.NotAllow.

  • Causa: El usuario de RAM no tiene los permisos obligatorios para operar en EMR Serverless StarRocks, por lo que no puede acceder a StarRocks Manager. Para más información, consulte Authorize a RAM user.

  • Solución:

    • Método 1: Otorgar una política del sistema.

      Inicie sesión en la consola de RAM y otorgue la política del sistema AliyunEMRStarRocksFullAccess al usuario de RAM. Con esto, el usuario tendrá permisos completos para operar en EMR Serverless StarRocks.

    • Método 2: Otorgar permisos detallados.

      Si prefiere no otorgar permisos completos, utilice el RequestId del mensaje de error para identificar los permisos faltantes y asígnelos al usuario de RAM en la consola de RAM. Por ejemplo, si falta el permiso emr-serverless-starrocks:ListInstances, cree una política personalizada que otorgue únicamente ese permiso.

    En la página Policies de la consola de RAM, busque AliyunEMRStarRocksFullAccess para consultar todos los permisos que incluye la política del sistema.

¿Cómo resuelvo el error "must be an aggregate expression or appear in GROUP BY clause" en StarRocks?

  • Síntoma: Al ejecutar una consulta SQL que contiene una cláusula GROUP BY en StarRocks, se produce el siguiente error si la lista SELECT incluye una columna no agregada que no forma parte de dicha cláusula.

    Getting analyzing error: ... must be an aggregate expression or appear in GROUP BY clause
  • Causa: La regla ONLY_FULL_GROUP_BY en sql_mode desencadena este error. Cuando esta regla está habilitada, cada columna no agregada de la lista SELECT debe aparecer también en la cláusula GROUP BY.

  • Solución:

    1. Conéctese a la instancia de StarRocks mediante el SQL Editor en StarRocks Manager o un cliente MySQL.

    2. Ejecute el siguiente comando para vaciar sql_mode y quitar la regla ONLY_FULL_GROUP_BY.

      SET GLOBAL sql_mode='';
    3. Compruebe que sql_mode esté vacío.

      SELECT @@GLOBAL.sql_mode;

    La configuración SET GLOBAL sql_mode surte efecto de inmediato, sin necesidad de reiniciar el servicio. Deshabilitar ONLY_FULL_GROUP_BY podría generar valores imprecisos en las columnas no agregadas de las consultas GROUP BY. Pruebe este cambio en un entorno de pruebas antes de aplicarlo en producción. Esta operación modifica la configuración global.