Saltar para o conteúdo principal

Tez

Framework de execução de tarefas distribuídas

Tez icon

O Apache Tez é um framework de execução de tarefas distribuídas construído sobre o YARN (Yet Another Resource Negotiator) do Hadoop. Ele foi criado para substituir o antigo MapReduce, oferecendo um modelo de execução mais flexível, eficiente e rápido para aplicações de processamento em larga escala

O que faz o Apache Tez

  • Permite a execução de DAGs (Directed Acyclic Graphs), onde cada nó representa uma tarefa (map, reduce, transformações intermediárias) e cada aresta define o fluxo de dados.

  • Fornece uma camada de orquestração eficiente, reduzindo o número de leituras/escritas no HDFS e otimizando o uso de recursos no cluster.

  • É a base de execução padrão do Apache Hive, acelerando consultas SQL complexas.

  • Substitui processos pesados e rígidos por pipelines de dados mais curtos e otimizados.

Principais Características do Apache Tez

  • Execução baseada em DAGs: maior flexibilidade em relação ao modelo fixo Map → Shuffle → Reduce.

  • Baixa latência: reduz acessos desnecessários ao disco e ao HDFS.

  • Reutilização de containers YARN: diminui overhead no agendamento e na inicialização de tarefas.

  • Suporte nativo a múltiplos padrões de comunicação (1-para-1, broadcast, scatter-gather).

  • Integração com ferramentas de alto nível como Hive, Pig e aplicações customizadas em Java.

  • Monitoramento detalhado via WebUI e logs

  • Suporte a falhas herdado do YARN.

MapReduce vs. Apache Tez

O MapReduce acessa o disco/HDFS várias vezes ao longo do fluxo de dados (Mapper → Shuffle & Sort → Reducer). Ele lê e escreve dados (ou dados modificados) em cada uma dessas etapas, resultando em 5–6 acessos ao disco para um único job de MapReduce.

Já o Tez lê os dados do disco, executa todas as etapas, mantém resultados intermediários em memória, aplica vetorização (processa lotes de linhas em vez de uma por vez) e então produz a saída.

Enquanto o MapReduce realiza múltiplas leituras/gravações no HDFS, o Tez evita acessos desnecessários ao HDFS.

Figura 1 - Comparação entre MapReduce e Apache Tez
Figura 1 - Comparação entre MapReduce e Apache Tez

Arquitetura do Apache Tez

A arquitetura do Tez se apoia em três pilares:

  • YARN Resource Manager

    Responsável por gerenciar os recursos do cluster (CPU, memória).

    Aloca containers para as aplicações Tez.

  • Tez Application Master (AM)

    Instância dedicada por aplicação DAG.

    Coordena a execução das tarefas e gerencia o pipeline.

    Mantém informações sobre progresso, falhas e dependências.

  • DAG e Tasks

    Cada aplicação submetida ao Tez é descrita como um DAG.

    Tarefas são distribuídas em vertices (operações lógicas) e edges (conexões de dados).

    Execução é dinâmica: containers podem ser reaproveitados entre tarefas.

Figura 2 - Arquitetura do Apache Tez
Figura 2 - Arquitetura do Apache Tez

Recursos do Apache Tez

  • APIs programáticas para criação de DAGs customizados.

  • Extensibilidade: desenvolvedores podem definir estratégias próprias de particionamento, ordenação e comunicação.

  • Integração com motores SQL (Hive e Pig).

  • Tez UI: interface para visualização de DAGs em execução, tempos de cada etapa e gargalos.

  • Configuração avançada para otimização (memória, paralelismo, shuffle, reuso de containers).

Boas práticas

  • Ajustar paralelismo de acordo com o volume de dados para evitar tanto subutilização quanto sobrecarga.

  • Habilitar reuso de containers para workloads repetitivos (reduz overhead de inicialização).

  • Monitorar gargalos no shuffle: tuning de memória e compressão faz grande diferença.

  • Usar compressão intermediária para reduzir tráfego de rede.

  • Alinhar com Hive/Pig configs: muitas otimizações de Tez dependem da camada superior.

Quando usar o Apache Tez

  • Em consultas SQL complexas no Hive (substitui MapReduce).

  • Quando é necessário pipeline de dados com múltiplas etapas em DAGs dinâmicos.

  • Para aplicações customizadas em Java que demandam execução paralela otimizada sobre YARN.

  • Em cenários de Big Data interativo, onde a latência de segundos importa.

Quando não usar o Apache Tez

  • Em jobs simples de batch onde o overhead de configurar DAGs não compensa.

  • Em clusters pequenos, sem YARN, ou onde MapReduce já é suficiente.

  • Quando há exigência por streaming em tempo real (caso de uso típico de Kafka Streams ou Flink).

Detalhes do Projeto Tez

Java é a linguagem principal usada para implementar o Tez e suas APIs.

APIs para DAGs são escritas em Java, mas normalmente o Tez é consumido indiretamente por usuários através do Hive ou Pig (SQL ou scripts declarativos).

Fontes: