Uso de Apache Trino
Apache Trino le permite ejecutar consultas ad hoc y ETL en varios sistemas de archivos de big data. Por defecto, Trino se instala en el primer nodo maestro del cluster y tiene instalados los conectores system
, tpch
y hive
.
Para ejecutar la operación CRUD en el metastore de Hive, debe agregar la política HDFS con la ruta de recurso /tmp,/warehouse
y el permiso R/W/E
para el usuario de Trino.
Ajuste del Rendimiento
Trino es un motor de consultas SQL distribuido que está diseñado para manejar grandes volúmenes de datos en muchos orígenes de datos, incluido el almacenamiento de objetos en entornos en la nube. Sin embargo, el rendimiento de Trino puede verse afectado por varios factores, como el tamaño y la complejidad de los datos, el ancho de banda de red disponible, la configuración del cluster y los patrones de consulta. Por lo tanto, es importante realizar el ajuste del rendimiento para optimizar el rendimiento y la escalabilidad de Trino para casos de uso específicos del cliente.
fs.oci.io.read.ahead.blocksize = 6291456
: este parámetro define el tamaño de bloque (en bytes) utilizado para el almacenamiento en buffer de lectura anticipada en lecturas de almacenamiento de objetos. Por defecto, el tamaño de bloque se define en 262144 (256 KB), pero si se define en un valor mayor, como 6291456 (6 MB), puede ayudar a mejorar el rendimiento de lectura de archivos grandes, especialmente de lecturas secuenciales.fs.oci.io.read.ahead = true
: este parámetro controla el mecanismo de almacenamiento en buffer de lectura anticipada para las lecturas de almacenamiento de objetos en Trino. Cuando el almacenamiento en buffer de lectura anticipada está activado, Trino lee de forma proactiva datos adicionales más allá de la solicitud de lectura actual, en previsión de futuras solicitudes de lectura. Esto puede ayudar a reducir el impacto de la latencia de red y mejorar el rendimiento de las cargas de trabajo de lectura intensiva.fs.oci.caching.object.parquet = true
: este parámetro permite el almacenamiento en caché de objetos Parquet en el sistema de archivos local para mejorar el rendimiento de las consultas al trabajar con archivos Parquet. Cuando se define en true, el cliente de almacenamiento de OCI almacena en caché objetos Parquet en el sistema de archivos local para lecturas posteriores.fs.oci.caching.filesystem.enabled=true
: este parámetro permite el almacenamiento en caché de datos de OCI Object Storage en la caché de HDFS. Esto puede mejorar el rendimiento reduciendo la cantidad de datos que se deben recuperar del almacenamiento de objetos y almacenando en caché los datos a los que se accede con frecuencia.
Defina las siguientes configuraciones en la interfaz de usuario de Ambari.
- Acceda a Apache Ambari.
- En la barra de herramientas lateral, en Servicios, seleccione Trino.
- Seleccione Configs y, a continuación, actualice o agregue las propiedades de configuración.
Parámetro | Descripción | Dónde s]Set | Valor Recomendado |
---|---|---|---|
Heap (-Xmx) |
Este parámetro especifica la cantidad máxima de memoria de pila que puede utilizar el trabajador de Trino. Se recomienda definir este parámetro en el 80% de la memoria física disponible en la máquina. | jvm.config |
Se recomienda definir este parámetro en el 75-80% de la memoria física disponible en la máquina. Nota: Si se están ejecutando otros procesos en el mismo nodo en el que se está ejecutando el trabajador de Trino, deje cierta cantidad de memoria física para esos procesos. En estos casos, defina el valor del parámetro Por ejemplo, si otros procesos del mismo nodo requieren 4 GB de memoria y la memoria física total disponible en el nodo es de 16 GB, defina el parámetro |
query.max-memory-per-node |
Memoria de un solo nodo de trabajador. | config.properties |
Defina este parámetro en un valor que sea menor o igual que la diferencia entre la memoria JVM y el valor de Memoria Efectiva = Total JVM Heap - Heap Headroom Por ejemplo, si hay un escenario de usuario simultáneo, defina el parámetro como Memoria efectiva/Consultas simultáneas. |
query.max-memory |
Memoria de todos los nodos de un cluster. | config.properties |
Defina este parámetro en un valor que se calcule según la siguiente fórmula: Valor de query.max-memory-per-node × Número de nodos de trabajador. |
query.max-total-memory |
Cantidad total de memoria consumida por un cluster, que no debe ser menor que el valor de query.max-memory . |
config.properties |
Si la simultaneidad no es alta, defina este parámetro en el mismo valor que el parámetro query.max-memory . Si la simultaneidad es alta, el valor del parámetro query.max-total-memory no puede superar la capacidad máxima de memoria del cluster, que es igual al 70% de la memoria JVM multiplicada por el número de nodos de trabajador. Disminuya proporcionalmente los valores de query.max-memory y query.max-memory-per-node según sus requisitos. Puede reducir el valor de query.max-memory a la mitad de query.max-total-memory . En este caso, debe definir el parámetro query.max-memory-per-node en el valor de query.max-memory dividido por el número de nodos de trabajador. |
memory.heap-headroom-per-node |
Memoria de pila de JVM reservada. | config.properties |
La memoria efectiva debe ser el 15% de la memoria JVM. |
task.concurrency
|
Simultaneidad local por defecto para operadores paralelos, como uniones y agregaciones. Ajuste este valor hacia arriba o hacia abajo en función de la simultaneidad de consultas y la utilización de recursos de trabajador. Los valores más bajos son mejores para los clusters que ejecutan muchas consultas de forma simultánea, porque el cluster ya lo utilizan todas las consultas en ejecución, por lo que agregar más simultaneidad provoca ralentizaciones debido al cambio de contexto y otra sobrecarga. Los valores más altos son mejores para los clusters que solo ejecutan una o varias consultas a la vez. | config.properties |
80% de la CPU disponible en un nodo/máquina virtual |