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.

Recomendaciones al leer juegos de datos de Object Storage
  • 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.
Recomendaciones generales
Nota

Defina las siguientes configuraciones en la interfaz de usuario de Ambari.
  1. Acceda a Apache Ambari.
  2. En la barra de herramientas lateral, en Servicios, seleccione Trino.
  3. 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 -Xmx en un valor inferior al 80% de la memoria física disponible. Se recomienda dejar al menos entre el 10 y el 20% de la memoria física para otros procesos, dependiendo de la cantidad de memoria que requieran.

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 -Xmx en 75 a 80 % de 12 GB (por ejemplo, 7,2 ti 8,4 GB).

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 memory.heap-headroom-per-node.

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