Tez
Framework de execução de tarefas distribuídas

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.

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.

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