Wiki Qualidade, CI/CD e custo
Otimização de custo de pipelines
Custo é máquina × tempo. Ler menos dado, usar o compute certo e não deixar nada ligado à toa resolve a maior parte da conta.
No Databricks, a conta é o preço da máquina na nuvem mais as DBUs (*Databricks Units*) consumidas por hora, que variam com o tipo de compute. Simplificando: custo ≈ número de máquinas × horas ligadas × preço por hora. Toda otimização mexe em um desses três.
Ler menos
- Filtro que pula arquivo: partição ou clustering pela coluna mais filtrada, e o filtro escrito de um jeito que o otimizador consiga empurrar (sem função em volta da coluna).
- Colunas:
selectsó do que vai ser usado; Parquet/Delta são colunares. - Incremental em vez de completo: processar só o que chegou desde a última carga (Auto Loader, Change Data Feed,
MERGE), não a tabela inteira toda noite. - Arquivo do tamanho certo:
OPTIMIZEcontra arquivos pequenos.
Rodar no compute certo
- Job em job compute ou serverless, nunca no cluster interativo de alguém.
- Auto termination curto nos interativos.
- Spot nos workers de jobs que toleram reinício.
- Tamanho medido, não chutado: dobrar os workers só ajuda até o trabalho deixar de ser paralelo.
Por que "mais máquina" nem sempre é mais caro, nem mais rápido
Se o trabalho é bem paralelo, o dobro de máquinas termina na metade do tempo e custa o mesmo. A parte que não paraleliza (driver, inicialização, uma partição enviesada) não encolhe, e a partir dela cada máquina a mais é custo puro.
def estimar(workers, horas_paralelas=8.0, horas_fixas=0.25, preco_hora_no=1.0):
tempo = horas_fixas + horas_paralelas / workers
custo = (workers + 1) * tempo * preco_hora_no # +1: o driver
return round(tempo, 2), round(custo, 2)
for w in (2, 4, 8, 16, 32):
print(w, estimar(w))Saída (conferida)
2 (4.25, 12.75) 4 (2.25, 11.25) 8 (1.25, 11.25) 16 (0.75, 12.75) 32 (0.5, 16.5)
É um modelo de brinquedo, com preço fictício de 1 unidade por máquina-hora, e mostra a forma da curva: o tempo cai cada vez menos, e o custo, depois de um ponto, sobe. O simulador da página inicial deixa mexer nesses números.
- Tagueie clusters e jobs (equipe, projeto): sem saber quem gasta, não há como reduzir.
- As tabelas de sistema do Databricks (
system.billing.usage) mostram o consumo por job, com SQL.
Fontes
Conhecimento compartilhado pela Genesis Innovation.