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
- Cluster Hadoop do HDInsight. Para criar um, confira Introdução ao Azure HDInsight. Verifique se o serviço HiveServer2 está em execução.
- O JDK (Java Developer Kit) versão 11 ou superior.
- SQuirreL SQL. O SQuirreL é um aplicativo cliente JDBC.
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.
Crie um diretório para conter certos arquivos a serem copiados do cluster.
No script a seguir, substitua
sshuser
pelo nome da conta de usuário SSH para o cluster. SubstituaCLUSTERNAME
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} .
Inicie o aplicativo SQuirreL SQL. Na parte esquerda da janela, selecione Drivers.
Nos ícones na parte superior do diálogo Drivers, selecione o ícone + para criar um driver.
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 Selecione OK para salvar as configurações.
À esquerda da janela do SQuirreL SQL, selecione Aliases. Em seguida, selecione o ícone + para criar um alias de conexão.
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. 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.
Na lista suspensa Conectar a, na parte superior do SQuirreL SQL, selecione Hive no HDInsight. Quando solicitado, selecione Conectar.
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;
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:
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óriolib
, substitua o commons-codec.jar existente pelo baixado por meio do cluster HDInsight.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.
- Visualizar dados do Apache Hive com o Microsoft Power BI no Azure HDInsight.
- Visualizar dados da consulta interativa do Hive com o Power BI no Azure HDInsight.
- Conectar o Excel ao HDInsight com o Driver ODBC do Microsoft Hive.
- Conecte o Excel ao Apache Hadoop usando o Power Query.
- Usar o Apache Hive com o HDInsight
- Usar o Apache Pig com o HDInsight
- Usar trabalhos do MapReduce com o HDInsight