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.
-
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 =
-
-
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
-
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.
-
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.
-
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>.
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?
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.
-
Vaya a la página de detalles de la instancia.
Inicie sesión en la consola de E-MapReduce.
En el panel de navegación izquierdo, elija EMR Serverless > StarRocks.
Haga clic en el nombre de la instancia de destino.
En la página Instance Details, dentro de la sección Basic Information, haga clic en Reset Password.
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:
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.
-
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 incluyethe 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:
-
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 $$ -
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'); -
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 ; -
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.confy ejecutesysctl -ppara 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.
NotaEl siguiente código requiere que el sistema admita opciones como
tcp_keepidleen 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
socketde Python admite la configuración directa de los parámetros de TCP Keepalive.NotaLos distintos sistemas operativos pueden usar nombres de parámetros diferentes. Por ejemplo, macOS podría requerir
TCP_KEEPALIVEen lugar deTCP_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
netde Golang ofrece una configuración básica de Keepalive. Sin embargo, debe usar el paquete de bajo nivelsyscallpara establecer los parámetros detallados.NotaLos 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_limitdel nodo BE, la cual puede obtener al ejecutarSHOW FRONTENDSoSHOW BACKENDS, y evalúe su capacidad de memoria disponible.
-
Soluciones
-
Solución 1: Habilitar índices persistentes (recomendado)
Clúster shared-nothing: establezca
enable_persistent_indexentrue.Clúster shared-data: establezca
persistent_index_typeencloud_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ámetrorpc_connect_timeout_msdel nodo BE se modificó manualmente.Para los trabajos de carga que usan
INSERT INTO, compruebe si el parámetroquery_timeoutestá configurado, por ejemplo,query_timeout = 15. StarRocks establece el umbral de tiempo de espera de RPC en la mitad del valor dequery_timeouty convierte el resultado a milisegundos. Por lo tanto, siquery_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_msdel 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=7500mssuele 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
NULLen una columna definida comoNOT 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
NULLpara 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
accessKeyIdyaccessKeySecretconfigurados puedan acceder al bucket de OSS de destino.Si
accessKeyIdyaccessKeySecretestá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 BACKENDSpara 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\GRevise los campos
TotalCapacityyAvailCapacity. 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.7y 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 esRAM.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
AliyunEMRStarRocksFullAccessal 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
AliyunEMRStarRocksFullAccesspara 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_BYensql_modedesencadena 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:
Conéctese a la instancia de StarRocks mediante el SQL Editor en StarRocks Manager o un cliente MySQL.
-
Ejecute el siguiente comando para vaciar
sql_modey quitar la reglaONLY_FULL_GROUP_BY.SET GLOBAL sql_mode=''; -
Compruebe que
sql_modeesté vacío.SELECT @@GLOBAL.sql_mode;
La configuración
SET GLOBAL sql_modesurte efecto de inmediato, sin necesidad de reiniciar el servicio. DeshabilitarONLY_FULL_GROUP_BYpodrí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.