Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2023-05-19 GMT+08:00

Spark2x multi-locatário

Conhecimento de fundo

No modo de instância multi-ativa do JDBCServer, o JDBCServer implementa o modo Yarn-client, mas apenas uma fila de recursos Yarn está disponível. Para resolver o problema de limitação de recursos, o modo multi-locatário é introduzido.

No modo multi-locatário, os JDBCServers são vinculados aos locatários. Cada locatário corresponde a um ou mais JDBCServers, e um JDBCServer fornece serviços para apenas um locatário. Locatários diferentes podem ser configurados com filas de Yarn diferentes para implementar o isolamento de recursos. Além disso, o JDBCServer pode ser iniciado dinamicamente conforme necessário para evitar o desperdício de recursos.

Implementação

Figura 1 mostra a solução HA do modo multi-locatário.

Figura 1 Modo multi-locatário do Spark JDBCServer
  1. Quando um ProxyServer é iniciado, ele se registra no ZooKeeper escrevendo as informações do nó em um diretório especificado. As informações do nó incluem o IP da instância, o número da porta, a versão e o número de série (as informações de diferentes nós são separadas por vírgulas).

    No modo multi-locatário, a instância do JDBCServer na página MRS indica ProxyServer, o agente do JDBCServer.

    Um exemplo é fornecido como segue:
    serverUri=192.168.169.84:22550
    ;version=8.1.0.1;sequence=0000001244,serverUri=192.168.195.232:22550
    ;version=8.1.0.1;sequence=0000001242,serverUri=192.168.81.37:22550
    ;version=8.1.0.1;sequence=0000001243, 
  2. Para se conectar a ProxyServer, o cliente deve especificar um namespace, que é o diretório da instância do ProxyServer onde você deseja acessar no ZooKeeper. Quando o cliente se conecta a ProxyServer, uma instância em Namespace é selecionada aleatoriamente para conexão. Para obter detalhes sobre o URL, consulte Conexão de URL.
  3. Depois que o cliente se conecta com sucesso ao ProxyServer, o ProxyServer primeiro verifica se o JDBCServer de um locatário existe. Se sim, o Beeline conecta ao JDBCServer. Se não, um novo JDBCServer será iniciado no modo Yarn-cluster. Após a inicialização do JDBCServer, o ProxyServer obtém o endereço IP do JDBCServer e estabelece a conexão entre o Beeline e o JDBCServer.
  4. O cliente envia instruções SQL para ProxyServer que, em seguida, encaminha instruções para o JDBCServer conectado. JDBCServer retorna os resultados para ProxyServer que, em seguida, retorna os resultados para o cliente.

No modo HA multi-locatário, todas as instâncias do ProxyServer são independentes e equivalentes. Se uma instância for interrompida durante a atualização, outras instâncias poderão aceitar a solicitação de conexão do cliente.

Conexão de URL

Modo multi-locatário

No modo multi-locatário, o cliente lê o conteúdo do nó do ZooKeeper e se conecta ao ProxyServer. As cadeias de conexão são as seguintes:

  • Modo de segurança:
    • Se a autenticação Kinit estiver ativada, o URL de cliente será o seguinte:
      jdbc:hive2://<zkNode1_IP>:<zkNode1_Port>,<zkNode2_IP>:<zkNode2_Port>,<zkNode3_IP>:<zkNode3_Port>/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=sparkthriftserver2x;saslQop=auth-conf;auth=KERBEROS;principal=spark2x/hadoop.<System domain name>@<System domain name>;
      • <zkNode_IP>:<zkNode_Port> indica o URL do ZooKeeper. Use vírgulas (,) para separar vários URLs,

        Por exemplo, 192.168.81.37:2181,192.168.195.232:2181,192.168.169.84:2181.

      • sparkthriftserver2x indica o diretório do ZooKeeper, onde uma instância aleatória do JDBCServer está conectada ao cliente.

      Por exemplo, quando utiliza o cliente de Beeline para conexão no modo de segurança, execute o seguinte comando:

      sh CLIENT_HOME/spark/bin/beeline -u "jdbc:hive2://<zkNode1_IP>:<zkNode1_Port>,<zkNode2_IP>:<zkNode2_Port>,<zkNode3_IP>:<zkNode3_Port>/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=sparkthriftserver2x;saslQop=auth-conf;auth=KERBEROS;principal=spark2x/hadoop.<System domain name>@<System domain name>;"

    • Se a autenticação Keytab estiver ativada, o URL será o seguinte:
      jdbc:hive2://<zkNode1_IP>:<zkNode1_Port>,<zkNode2_IP>:<zkNode2_Port>,<zkNode3_IP>:<zkNode3_Port>/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=sparkthriftserver2x;saslQop=auth-conf;auth=KERBEROS;principal=spark2x/hadoop.<System domain name>@<System domain name>;user.principal=<principal_name>;user.keytab=<path_to_keytab>

      <principal_name> indica o principal do usuário Kerberos, por exemplo, test@<System domain name>. <path_to_keytab> indica o caminho do arquivo Keytab correspondente a <principal_name>, por exemplo, /opt/auth/test/user.keytab.

  • Modo comum:
    jdbc:hive2://<zkNode1_IP>:<zkNode1_Port>,<zkNode2_IP>:<zkNode2_Port>,<zkNode3_IP>:<zkNode3_Port>/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=sparkthriftserver2x;

    Por exemplo, quando utiliza o cliente de Beeline para conexão em modo comum, execute o seguinte comando:

    sh CLIENT_HOME/spark/bin/beeline -u "jdbc:hive2://<zkNode1_IP>:<zkNode1_Port>,<zkNode2_IP>:<zkNode2_Port>,<zkNode3_IP>:<zkNode3_Port>/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=sparkthriftserver2x;"

Modo não multi-locatário

No modo não multi-locatário, um cliente se conecta a um nó do JDBCServer especificado. Comparado com o modo de instância multi-ativa, a cadeia de conexão neste modo não multi-locatário não contém os parâmetros serviceDiscoveryMode e zooKeeperNamespace sobre ZooKeeper.

Por exemplo, quando você usa o cliente de Beeline para conectar o JDBCServer no modo de instância não multi-locatário, execute o seguinte comando:

sh CLIENT_HOME/spark/bin/beeline -u "jdbc:hive2://<server_IP>:<server_Port>/;user.principal=spark/hadoop.<System domain name>@<System domain name>;saslQop=auth-conf;auth=KERBEROS;principal=spark/hadoop.<System domain name>@<System domain name>;"

  • <server_IP>:<server_Port> indica o URL do nó do JDBCServer especificado.
  • CLIENT_HOME indica o caminho do cliente.

Exceto o método de conexão, outras operações da API do JDBCServer no modo multi-locatário e no modo não multi-locatário são as mesmas. Spark JDBCServer é outra implementação do HiveServer2 no Hive. Para detalhes sobre como usar o Spark JDBCServer, acesse o site oficial do Hive em https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients.

Especificar um locatário

Geralmente, o cliente enviado por um usuário se conecta ao JDBCServer padrão do locatário ao qual o usuário pertence. Se quiser conectar o cliente ao JDBCServer de um locatário especificado, adicione o parâmetro --hiveconf mapreduce.job.queuename.

O comando para conectar o Beeline é o seguinte (aaa indica o nome do locatário):

beeline --hiveconf mapreduce.job.queuename=aaa -u 'jdbc:hive2://192.168.39.30:2181,192.168.40.210:2181,192.168.215.97:2181;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=sparkthriftserver2x;saslQop=auth-conf;auth=KERBEROS;principal=spark2x/hadoop.<System domain name>@<System domain name>;'