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. Foi criado para substituir o MapReduce clássico, 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), em que cada nó representa uma tarefa (map, reduce, transformações intermédias) 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 face ao modelo fixo Map → Shuffle → Reduce.
  • Baixa latência: reduz acessos desnecessários ao disco e ao HDFS.
  • Reutilização de containers YARN: diminui o overhead de agendamento e 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 personalizadas em Java.
  • Monitorização detalhada via WebUI e logs.
  • Tolerância a falhas herdada do YARN.

MapReduce vs. Apache Tez

O MapReduce acede ao disco/HDFS várias vezes ao longo do fluxo de dados (Mapper → Shuffle & Sort → Reducer). Lê e escreve dados (ou dados modificados) em cada etapa, 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 intermédios em memória, aplica vetorização (processa lotes de linhas em vez de uma a uma) 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 assenta em três pilares:

  • YARN Resource Manager

    Responsável por gerir 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 gere o pipeline.

    Mantém informação sobre progresso, falhas e dependências.

  • DAG e Tasks

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

    As tarefas são distribuídas em vértices (operações lógicas) e arestas (ligações de dados).

    A execução é dinâmica: os 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 personalizados.
  • Extensibilidade: os programadores 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 visualizar DAGs em execução, tempos de cada etapa e gargalos.
  • Configuração avançada para otimização (memória, paralelismo, shuffle, reutilização de containers).

Boas práticas

  • Ajustar o paralelismo ao volume de dados para evitar subutilização ou sobrecarga.
  • Ativar a reutilização de containers para workloads repetitivos (reduz overhead de inicialização).
  • Monitorizar gargalos no shuffle: tuning de memória e compressão faz grande diferença.
  • Usar compressão intermédia para reduzir tráfego de rede.
  • Alinhar com configurações de Hive/Pig: muitas otimizações do Tez dependem da camada superior.

Quando usar o Apache Tez

  • Em consultas SQL complexas no Hive (substitui MapReduce).
  • Quando é necessário um pipeline de dados com múltiplas etapas em DAGs dinâmicos.
  • Para aplicações personalizadas em Java que exigem execução paralela otimizada sobre YARN.
  • Em cenários de Big Data interativo, onde a latência de segundos é importante.

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 de streaming em tempo real (caso típico de Kafka Streams ou Flink).

Detalhes do Projeto Tez

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

As APIs para DAGs são escritas em Java, mas o Tez é normalmente consumido indiretamente pelos utilizadores através do Hive ou Pig (SQL ou scripts declarativos).

Fontes: //Tez - Overview