Optimización del rendimiento de Hive (ocho)

8. Optimización del rendimiento

8.1 transacción de Hive

1. Transacción (Transacción) se refiere a un conjunto de operaciones unificadas, que se ejecutan o no se ejecutan

Características ACID:

  • Atomicidad: Atomicidad
  • Consistencia: consistencia
  • Aislamiento: aislamiento
  • Durabilidad: Durabilidad

2. Características y limitaciones de las transacciones de Hive

  • La versión V0.14 comenzó a admitir transacciones a nivel de fila.
    • Soporte INSERT, DELETE, UPDATE (Fusionar es compatible desde v2.2.0)
    • El formato de archivo solo es compatible con ORC
  • Limitaciones
    • La mesa debe estar agrupada
    • Necesita consumir tiempo, recursos y espacio adicionales
    • No admite actualizaciones de columna de inicio, confirmación, reversión, depósito o partición
    • La cerradura puede ser una cerradura compartida o una cerradura exclusiva (serie en lugar de concurrente)
    • No está permitido leer y escribir tablas ACID desde una conexión no ACID
    • Menos usado

3. Apertura y configuración de la transacción de Hive

  • Establecida a través de la línea de comando de Hive, la sesión actual es válida
  • Establecido por archivo de configuración, globalmente efectivo
  • Establecer mediante herramientas de interfaz de usuario (como Ambari)
-- 通过命令行方式开启事务
set hive.support.concurrency = true;
set hive.enforce.bucketing = true;
set hive.exec.dynamic.partition.mode = nonstrict;
set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
set hive.compactor.initiator.on = true;
set hive.compactor.worker.threads = 1; 
-- 通过配置文件hive-site.xml
<property> 
<name>hive.support.concurrency</name> 
<value>true</value>
 </property>
 <property> 
<name>hive.txn.manager</name> <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>

Inserte la descripción de la imagen aquí

8.2 PLSQL de Hive

  • Hive PLSQL: procedimiento almacenado de Hive (después de v2.0)
    • Soporta SparkSQL e Impala
    • Compatible con los estándares Oracle, DB2, MySQL, TSQL
    • Haga que sea simple y eficiente la migración de procesos existentes a Hive
    • Hacer UDF de escritura sin conocimientos de Java
    • Su rendimiento es ligeramente más lento que Java UDF
    • Función más nueva
  • Ejecute ./hplsql en el directorio bin de Hive2
./hplsql -f plsql_demo.pl
RETURNS STRING 
BEGIN RETURN 'Hello, ' || text || '!'; 
END;
Print hello(' word') 

CREATE PROCEDURE getCount()
BEGIN DECLARE cnt INT = 0;	
SELECT COUNT(*) INTO cnt FROM employee;
PRINT 'Users cnt: ' || cnt;
END;
call getCount();

8.3 Herramienta de ajuste del rendimiento de Hive

1. EXPLIQUE
Inserte la descripción de la imagen aquí

2.ANALIZAR

  • ANALIZAR: datos de la tabla de análisis, utilizados como referencia para la selección del plan de ejecución
    • Recopile estadísticas de tabla, como número de filas, valor máximo, etc.
    • Utilice esta información para acelerar la consulta
  • gramática
ANALYZE TABLE employee COMPUTE STATISTICS; 

ANALYZE TABLE employee_partitioned 
PARTITION(year=2014, month=12) COMPUTE STATISTICS;

ANALYZE TABLE employee_id COMPUTE STATISTICS 
FOR COLUMNS employee_id;

8.4 Diseño optimizado de Hive

  • Utilice tabla de partición, mesa de cubo
  • Usar índice
  • Utilice el formato de archivo adecuado, como orc, avro, parquet
  • Utilice un formato de compresión adecuado, como snappy
  • Considere la localización de datos: agregue algunas copias
  • Evite los archivos pequeños
  • Utilice el motor Tez en lugar de MapReduce
  • Usar Hive LLAP (leer caché en memoria)
  • Considere desactivar la simultaneidad cuando no sea necesario

8.5 Optimización del trabajo

1. Ejecutar en modo local

Hive admite la conversión automática de trabajos para que se ejecuten en modo local.
Cuando los datos a procesar son pequeños, el tiempo de inicio del modo totalmente distribuido es más largo que el tiempo de procesamiento del trabajo

-- 通过以下设置开启本地模式
SET hive.exec.mode.local.auto=true; --default false 
SET hive.exec.mode.local.auto.inputbytes.max=50000000; 
SET hive.exec.mode.local.auto.input.files.max=5; --default 4

  • El trabajo debe cumplir las siguientes condiciones para ejecutarse en modo nativo
    El tamaño de entrada total del trabajo es menor que hive.exec.mode.local.auto. Inputbytes.max
    el número total de tareas de mapa menor que hive.exec.mode.local.auto. Input.files.max
    requerido El número total de tareas de Reducir es 1 o 0

2. Reutilización de JVM (Reutilización de JVM)

  • Reducir el consumo de inicio de JVM mediante la reutilización de JVM
    • De forma predeterminada, cada mapa o reducción inicia una nueva JVM
    • Cuando el tiempo de ejecución de Map o Reduce es muy corto, el proceso de inicio de JVM consume mucha sobrecarga
    • Reutilice JVM compartiendo JVM y ejecute MapReduce Job en modo serial
    • Aplicable para mapear o reducir tareas en el mismo trabajo
    • Para tareas de diferentes trabajos, ejecute siempre en una JVM separada
-- 通过以下设置开启JVM重用
set mapred.job.reuse.jvm.num.tasks = 5;  -- 默认值为1

3. Ejecución paralela

  • La ejecución en paralelo puede mejorar la utilización del clúster
    • Las consultas de Hive generalmente se convierten en muchas etapas ejecutadas en el orden predeterminado
    • Estas etapas no siempre son interdependientes
    • Se pueden ejecutar en paralelo para ahorrar tiempo total de ejecución del trabajo.
    • Si la utilización del clúster ya es alta, la ejecución en paralelo no ayudará mucho
-- 通过以下设置开启并行执行
SET hive.exec.parallel=true;  -- default false 
SET hive.exec.parallel.thread.number=16;  -- default 8,定义并行运行的最大数量

8.6 Optimización de consultas

  • Iniciar automáticamente la unión del lado del mapa
  • Evitar la desviación de datos
set hive.optimize.skewjoin=true;	
  • Habilitar CBO (Optimizador basado en costos)

    set hive.cbo.enable=true; 
    set hive.compute.query.using.stats=true; 
    set hive.stats.fetch.column.stats=true; 
    set hive.stats.fetch.partition.stats=true;	
    

    Iniciar vectorización (vectorización)

    set hive.vectorized.execution.enabled = true; 
    set hive.vectorized.execution.reduce.enabled = true;
    
    

    Utilice convenciones de codificación correctas como CTE, tablas temporales, funciones de ventana, etc.

8.7 Algoritmo de compresión

  • Reducir la cantidad de datos transferidos mejorará en gran medida el rendimiento de MapReduce
  • Usar la compresión de datos es una buena manera de reducir la cantidad de datos
  • Comparación de los métodos de compresión más utilizados
Método de compresión Divisible Tamaño comprimido Velocidad de compresión y descompresión
gzip No en en
lzo si Grande rápido
rápido No Grande rápido
bzip2 si pequeña lento

Supongo que te gusta

Origin blog.csdn.net/zmzdmx/article/details/108742998
Recomendado
Clasificación