O Kyuubi oferece vários níveis de compartilhamento de engine que determinam como os engines do Spark são alocados entre sessões, usuários e grupos.
Engines suportados
A instalação do Kyuubi em um cluster do E-MapReduce também instala o YARN e o Spark 3 como dependências. O Kyuubi no E-MapReduce suporta apenas o Spark 3 no YARN. Flink, Trino e Spark 2 não são suportados. Cada engine do Spark corresponde a uma aplicação do Spark no YARN. Para mais informações, consulte Examples.
Níveis de compartilhamento
Para defina o nível de compartilhamento de um engine, configure o parâmetro kyuubi.engine.share.level na aba kyuubi-defaults.conf da página de configuração do service Kyuubi.
|
Nível de compartilhamento |
Descrição |
Casos de uso |
Grau de isolamento |
Compartilhamento |
|
CONNECTION |
Um engine é iniciado por sessão. |
|
Alto |
Baixo |
|
USER |
Um engine por usuário. |
Médio |
Médio |
|
|
GROUP |
Um engine por grupo de recursos. |
Baixo |
Alto |
|
|
SERVER |
Um engine por cluster. |
Administradores |
Mais alto para clusters de alta segurança e mais baixo para clusters padrão. |
Clusters de alta segurança estão disponíveis apenas para administradores. |
Exemplos
Os exemplos a seguir utilizam o nível de compartilhamento USER (parâmetro kyuubi.engine.share.level definido como USER) e pressupõem que todos os usuários sejam autenticados via Lightweight Directory Access Protocol (LDAP) ou Kerberos.
-
Execute um engine sob demanda
Quando um novo usuário,
user1, envia um job usando a ferramenta kyuubi-beeline, o servidor Kyuubi inicia um novo engine do Spark para processá-lo.kyuubi-beeline -n user1 \ -u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000" \ -f query1.sqlCaso outro usuário,
user2, precise especifique recursos para o engine do Spark, ele pode usar um dos seguintes métodos:-
Método 1: Defina os recursos, como executores da aplicação Spark, na URL JDBC.
# 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: Configure os recursos do engine do Spark no arquivo de configuração kyuubi-defaults.conf.
# Set User default config in kyuubi-defatuls.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
-
-
Envie jobs para um engine específico
Após a conclusão de um job, o engine do Spark iniciado pelo Kyuubi permanece ativo por um período configurável. Novos jobs podem reutilizar esse engine ocioso, melhorando o desempenho ao evitar a necessidade de iniciar uma nova aplicação YARN. Se nenhum job for enviado dentro desse período, o engine é encerrado automaticamente. O parâmetro kyuubi.session.engine.idle.timeout define o tempo limite de ociosidade, cujo valor padrão é
PT30M(30 minutos). É possível configurar esse parâmetro na aba kyuubi-defaults.conf.O Kyuubi permite crie subdomínios dentro do mesmo nível de compartilhamento. Por exemplo, se um usuário,
user4, precisar de recursos de engine diferentes para cenários de negócios distintos, ele pode defina o parâmetro kyuubi.engine.share.level.subdomain na URL JDBC para envie jobs a engines diferentes.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 -
Um único engine suporta múltiplas sessões do Spark
Várias sessões do Spark podem usar um único engine do Spark simultaneamente. Por exemplo, se um usuário,
user1, enviar dois jobs de dois terminais diferentes ao mesmo tempo, ambos os jobs serão executados no mesmo engine do Spark. O Spark aloca recursos de executor para os jobs com base em seu mecanismo interno padrão de agendamento.# Console 1 kyuubi-beeline -n user1 \ -u "jdbc:hive2://master-1-1:10009/biz1" \ -f query1.sql # Console 2 kyuubi-beeline -n user1 \ -u "jdbc:hive2://master-1-1:10009/biz2" \ -f query2.sql