O Kyuubi em um cluster E-MapReduce (EMR) executa o Spark 3.x no YARN. Cada mecanismo Spark 3.x corresponde a uma aplicação Spark no YARN. Não há suporte para Flink, Trino e Spark 2.x.
Pré-requisitos
Antes de começar, verifique se:
O YARN e o Spark 3.x estão instalados no cluster EMR
Todos os usuários estão autenticados via Lightweight Directory Access Protocol (LDAP) ou Kerberos
Níveis de compartilhamento
O nível de compartilhamento define quantos usuários utilizam um único mecanismo Kyuubi. Defina kyuubi.engine.share.level na aba kyuubi-defaults.conf da página de serviço do Kyuubi no console EMR.
|
Nível de compartilhamento |
Escopo do mecanismo |
Grau de isolamento |
Compartilhamento |
Caso de uso |
|
CONNECTION |
Um mecanismo por sessão |
Alto |
Baixo |
ETL em larga escala, consultas ad hoc |
|
USER |
Um mecanismo por usuário |
Médio |
Médio |
— |
|
GROUP |
Um mecanismo por grupo de recursos |
Baixo |
Alto |
— |
|
SERVER |
Um mecanismo por cluster |
Mais alto (cluster de alta segurança) / Mais baixo (cluster padrão) |
Clusters de alta segurança: somente administradores |
Administradores |
Envie jobs para mecanismos Kyuubi
O servidor Kyuubi inicia e interrompe os mecanismos automaticamente. Quando um novo usuário se conecta via kyuubi-beeline pela primeira vez, o servidor lança um novo mecanismo Spark 3.x, sem necessidade de início manual.
Os exemplos a seguir usam o nível de compartilhamento USER. Todos os usuários passaram pela autenticação LDAP ou Kerberos.
Envie um job como novo usuário
Quando o user1 se conecta pela primeira vez, o servidor Kyuubi inicia automaticamente um novo mecanismo Spark 3.x:
kyuubi-beeline -n user1 \
-u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000" \
-f query1.sql
Configure recursos do executor Spark
Há dois métodos para configurar os recursos dos mecanismos Spark 3.x.
Método 1: Defina recursos na URL JDBC
Passe os parâmetros do Spark diretamente na URL de conexão:
# Set user config via JDBC connection URL
kyuubi-beeline -n user2 \
-u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000?spark.dynamicAllocation.enabled=false;spark.executor.cores=2;spark.executor.memory=4g;spark.executor.instances=4" \
-f query1.sql
Método 2: Defina padrões por usuário no kyuubi-defaults.conf
Adicione entradas específicas de usuário no formato ___username___.spark.param=value na aba kyuubi-defaults.conf:
# Set user default config in kyuubi-defaults.conf
# ___user2___.spark.dynamicAllocation.enabled=false
# ___user2___.spark.executor.memory=5g
# ___user2___.spark.executor.cores=2
# ___user2___.spark.executor.instances=10
kyuubi-beeline -n user2 \
-u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000" \
-f query1.sql
Reutilize um mecanismo em execução
Após a conclusão de um job, o mecanismo Spark 3.x permanece ativo por um período antes de encerrar. O envio de outro job dentro dessa janela reutiliza o mecanismo existente em vez de lançar uma nova aplicação YARN, o que reduz o tempo de inicialização do job.
O parâmetro kyuubi.session.engine.idle.timeout controla o tempo limite de ociosidade (padrão: PT30M, 30 minutos). Para alterar o tempo limite, atualize esse parâmetro na aba kyuubi-defaults.conf.
Envie jobs para diferentes mecanismos do mesmo usuário
Para executar cargas de trabalho em mecanismos separados para diferentes linhas de negócio, use kyuubi.engine.share.level.subdomain na URL JDBC:
kyuubi-beeline -n user4 \
-u "jdbc:hive2://master-1-1:10009/biz1?kyuubi.engine.share.level.subdomain=biz1" \
-f query1.sql
kyuubi-beeline -n user4 \
-u "jdbc:hive2://master-1-1:10009/biz2?kyuubi.engine.share.level.subdomain=biz2" \
-f query2.sql
kyuubi-beeline -n user4 \
-u "jdbc:hive2://master-1-1:10009/biz3?kyuubi.engine.share.level.subdomain=biz3" \
-f query3.sql
Cada subdomínio mapeia para um mecanismo Spark distinto; assim, biz1, biz2 e biz3 são executados de forma isolada.
Compartilhe um mecanismo entre várias sessões
Várias sessões do mesmo usuário compartilham um único mecanismo Spark 3.x. Por exemplo, se o user1 enviar dois jobs de terminais separados simultaneamente, ambos os jobs serão executados no mesmo mecanismo:
# Terminal 1
kyuubi-beeline -n user1 \
-u "jdbc:hive2://master-1-1:10009/biz1" \
-f query1.sql
# Terminal 2
kyuubi-beeline -n user1 \
-u "jdbc:hive2://master-1-1:10009/biz2" \
-f query2.sql
Os recursos do executor são alocados conforme as regras de agendamento padrão do Spark.