Consultar o Apache Hive por meio do driver JDBC no HDInsight

Saiba como usar o driver JDBC de um aplicativo Java. Para enviar consultas do Apache Hive para o Apache Hadoop no Azure HDInsight. As informações contidas neste documento demonstram como se conectar programaticamente e a partir do cliente SQuirreL SQL.

Para obter mais informações sobre a Interface JDBC do Hive, consulte HiveJDBCInterface.

Pré-requisitos

Cadeia de conexão JDBC

As conexões JDBC a um cluster do Azure HDInsight são feitas pela porta 443. O tráfego é protegido usando TLS/SSL. O gateway público atrás dos quais ficam os clusters redireciona o tráfego para a porta que o HiveServer2 de fato está escutando. A cadeia de conexão a seguir mostra o formato a ser usado para o HDInsight:

    jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2

Substitua CLUSTERNAME pelo nome do cluster HDInsight.

Nome do host na cadeia de conexão

O nome do host 'CLUSTERNAME.azurehdinsight.net' na cadeia de conexão é o mesmo que a URL do cluster. Você pode obtê-lo por meio do portal do Azure.

Porta na cadeia de conexão

Você só pode usar a porta 443 para se conectar ao cluster de alguns locais fora da rede virtual do Azure. O HDInsight é um serviço gerenciado, o que significa que todas as conexões com o cluster são gerenciadas por meio de um Gateway seguro. Você não pode se conectar ao HiveServer 2 diretamente nas portas 10001 ou 10000. Essas portas não são expostas ao exterior.

Autenticação

Ao estabelecer a conexão, use o nome e a senha do administrador do cluster HDInsight para se autenticar. Em clientes JDBC, como o SQuirreL SQL, insira o nome e a senha do administrador nas configurações do cliente.

De um aplicativo Java, use o nome e a senha ao estabelecer uma conexão. Por exemplo, o código Java a seguir abre uma nova conexão:

DriverManager.getConnection(connectionString,clusterAdmin,clusterPassword);

Conectar-se ao cliente do SQuirreL SQL

O SQuirreL SQL é um cliente JDBC que pode ser usado para executar remotamente as consultas do Hive com o cluster HDInsight. As etapas a seguir pressupõem que você já tenha instalado o SQuirreL SQL.

  1. Crie um diretório para conter certos arquivos a serem copiados do cluster.

  2. No script a seguir, substitua sshuser pelo nome da conta de usuário SSH para o cluster. Substitua CLUSTERNAME pelo nome do cluster do HDInsight. Em uma linha de comando, altere seu diretório de trabalho para aquele criado na etapa anterior e digite o comando a seguir para copiar os arquivos de um cluster HDInsight:

    scp sshuser@CLUSTERNAME-ssh.azurehdinsight.net:/usr/hdp/current/hadoop-client/{hadoop-auth.jar,hadoop-common.jar,lib/log4j-*.jar,lib/slf4j-*.jar,lib/curator-*.jar} . -> scp sshuser@CLUSTERNAME-ssh.azurehdinsight.net:/usr/hdp/current/hadoop-client/{hadoop-auth.jar,hadoop-common.jar,lib/reload4j-*.jar,lib/slf4j-*.jar,lib/curator-*.jar} .
    
    scp sshuser@CLUSTERNAME-ssh.azurehdinsight.net:/usr/hdp/current/hive-client/lib/{commons-codec*.jar,commons-logging-*.jar,hive-*-*.jar,httpclient-*.jar,httpcore-*.jar,libfb*.jar,libthrift-*.jar} .
    
  3. Inicie o aplicativo SQuirreL SQL. Na parte esquerda da janela, selecione Drivers.

    Drivers tab on the left of the window.

  4. Nos ícones na parte superior do diálogo Drivers, selecione o ícone + para criar um driver.

    SQuirreL SQL application drivers icon.

  5. Na caixa de diálogo Driver adicionado, adicione as seguintes informações:

    Propriedade Valor
    Nome Hive
    Exemplo de URL jdbc:hive2://localhost:443/default;transportMode=http;ssl=true;httpPath=/hive2
    Caminho da Classe Extra Use o botão Adicionar para adicionar todos os arquivos jar baixados anteriormente.
    Nome da Classe org.apache.hive.jdbc.HiveDriver

    add driver dialog with parameters.

    Selecione OK para salvar as configurações.

  6. À esquerda da janela do SQuirreL SQL, selecione Aliases. Em seguida, selecione o ícone + para criar um alias de conexão.

    `SQuirreL SQL add new alias dialog`.

  7. Use os valores a seguir para o diálogo Adicionar Alias:

    Propriedade Valor
    Nome Hive no HDInsight
    Driver Use o menu suspenso para selecionar o driver do Hive.
    URL jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2. Substitua CLUSTERNAME pelo nome do seu cluster HDInsight.
    Nome do Usuário O nome da conta de logon do cluster para o cluster HDInsight. O padrão é admin.
    Senha A senha da conta de logon do cluster.

    add alias dialog with parameters.

    Importante

    Use o botão Testar para verificar se a conexão funciona. Quando o diálogo Conectar a: Hive no HDInsight for exibido, selecione Conectar para executar o teste. Se o teste tiver êxito, você verá um diálogo Conexão bem-sucedida. Se ocorrer um erro, consulte Solução de problemas.

    Use o botão Ok na parte inferior do diálogo Adicionar Alias para salvar o alias de conexão.

  8. Na lista suspensa Conectar a, na parte superior do SQuirreL SQL, selecione Hive no HDInsight. Quando solicitado, selecione Conectar.

    connection dialog with parameters.

  9. Uma vez conectado, insira a consulta a seguir no diálogo Consulta SQL e selecione o ícone Executar (uma pessoa correndo). A área de resultados deve mostrar os resultados da consulta.

    select * from hivesampletable limit 10;
    

    sql query dialog, including results.

Conectar-se de um aplicativo Java de exemplo

Um exemplo de uso de um cliente Java para consultar o Hive no HDInsight está disponível em https://github.com/Azure-Samples/hdinsight-java-hive-jdbc. Siga as instruções no repositório para compilar e executar o exemplo.

Solução de problemas

Ocorreu um erro inesperado ao tentar abrir uma conexão SQL

Sintomas: ao se conectar a um cluster HDInsight versão 3.3 ou superior, você poderá receber uma mensagem indicando que ocorreu um erro inesperado. O rastreamento de pilha para esse erro começa com as seguintes linhas:

java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.<init>(I)V
at java.util.concurrent.FutureTas...(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:206)

Causa: este erro é causado por um arquivo commons-codec.jar de versão mais antiga incluído com o SQuirreL.

Resolução: para corrigir esse erro, use as etapas a seguir:

  1. Saia do SQuirreL e vá para o diretório em que o SQuirreL está instalado em seu sistema, talvez seja C:\Program Files\squirrel-sql-4.0.0\lib. No diretório do SquirreL, sob o diretório lib , substitua o commons-codec.jar existente pelo baixado por meio do cluster HDInsight.

  2. Reinicie o SQuirreL. O erro não deverá ocorrer mais nas próximas conexões ao Hive no HDInsight.

Conexão desconectada pelo HDInsight

Sintomas: o HDInsight desconecta inesperadamente a conexão ao tentar fazer download de uma grande quantidade de dados (digamos, vários GBs) por meio de JDBC/ODBC.

Causa: a limitação de nós do Gateway causa esse erro. Ao obter dados do JDBC/ODBC, todos os dados precisam passar pelo nó do Gateway. No entanto, um gateway não foi projetado para baixar uma grande quantidade de dados, portanto, o Gateway poderá fechar a conexão se não puder lidar com o tráfego.

Resolução: evite usar o driver JDBC/ODBC para baixar enormes quantidades de dados. Em vez disso, copie os dados diretamente do armazenamento de blob.

Próximas etapas

Agora que você aprendeu a usar o JDBC para trabalhar com Hive, use os links abaixo para explorar outras maneiras de trabalhar com o Azure HDInsight.