Udostępnij za pośrednictwem


Query Apache Hive through the JDBC driver in HDInsight (Wysyłanie zapytań do usługi Apache Hive za pośrednictwem sterownika JDBC w usłudze HDInsight)

Dowiedz się, jak używać sterownika JDBC z poziomu aplikacji Java. Aby przesłać zapytania apache Hive do usługi Apache Hadoop w usłudze Azure HDInsight. Informacje przedstawione w tym dokumencie pokazują, jak programowo nawiązać połączenie i z SQuirreL SQL klienta.

Aby uzyskać więcej informacji na temat interfejsu Hive JDBC, zobacz HiveJDBCInterface.

Wymagania wstępne

Parametry połączenia sterownika JDBC

Połączenia JDBC z klastrem usługi HDInsight na platformie Azure są wykonywane za pośrednictwem portu 443. Ruch jest zabezpieczony przy użyciu protokołu TLS/SSL. Brama publiczna, za którą znajdują się klastry, przekierowuje ruch do portu, na który rzeczywiście nasłuchuje serwer HiveServer2. Poniższy parametry połączenia przedstawia format używany w usłudze HDInsight:

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

Element CLUSTERNAME należy zastąpić nazwą klastra usługi HDInsight.

Nazwa hosta w parametry połączenia

Nazwa hosta "CLUSTERNAME.azurehdinsight.net" w parametry połączenia jest taka sama jak adres URL klastra. Możesz uzyskać go za pośrednictwem witryny Azure Portal.

Port w parametry połączenia

Port 443 można używać tylko do nawiązywania połączenia z klastrem z niektórych miejsc spoza sieci wirtualnej platformy Azure. HDInsight to usługa zarządzana, co oznacza, że wszystkie połączenia z klastrem są zarządzane za pośrednictwem bezpiecznej bramy. Nie można nawiązać połączenia z serwerem HiveServer 2 bezpośrednio na portach 10001 lub 10000. Te porty nie są widoczne na zewnątrz.

Uwierzytelnianie

Podczas nawiązywania połączenia użyj nazwy administratora klastra usługi HDInsight i hasła do uwierzytelniania. W przypadku klientów JDBC, takich jak SQuirreL SQL, wprowadź nazwę administratora i hasło w ustawieniach klienta.

W aplikacji Java należy użyć nazwy i hasła podczas nawiązywania połączenia. Na przykład następujący kod Java otwiera nowe połączenie:

DriverManager.getConnection(connectionString,clusterAdmin,clusterPassword);

Połączenie za pomocą klienta SQL SQuirreL

SQuirreL SQL to klient JDBC, który może służyć do zdalnego uruchamiania zapytań Hive z klastrem usługi HDInsight. W poniższych krokach założono, że zainstalowano już język SQuirreL SQL.

  1. Utwórz katalog zawierający określone pliki do skopiowania z klastra.

  2. W poniższym skrypcie zastąp sshuser ciąg nazwą konta użytkownika SSH dla klastra. Zastąp ciąg CLUSTERNAME nazwą klastra usługi HDInsight. W wierszu polecenia zmień katalog roboczy na utworzony w poprzednim kroku, a następnie wprowadź następujące polecenie, aby skopiować pliki z klastra usługi 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. Uruchom aplikację SQL SQuirreL. Z lewej strony okna wybierz pozycję Sterowniki.

    Drivers tab on the left of the window.

  4. W ikonach w górnej części okna dialogowego Sterowniki wybierz ikonę + , aby utworzyć sterownik.

    SQuirreL SQL application drivers icon.

  5. W oknie dialogowym Dodano sterownik dodaj następujące informacje:

    Właściwości Wartość
    Nazwisko Hive
    Przykładowy adres URL jdbc:hive2://localhost:443/default;transportMode=http;ssl=true;httpPath=/hive2
    Dodatkowa ścieżka klasy Użyj przycisku Dodaj, aby dodać wszystkie pobrane wcześniej pliki jar.
    Nazwa klasy org.apache.hive.jdbc.HiveDriver

    add driver dialog with parameters.

    Wybierz przycisk OK , aby zapisać te ustawienia.

  6. Po lewej stronie okna SQuirreL SQL wybierz pozycję Aliasy. Następnie wybierz ikonę, + aby utworzyć alias połączenia.

    `SQuirreL SQL add new alias dialog`.

  7. Użyj następujących wartości w oknie dialogowym Dodawanie aliasu:

    Właściwości Wartość
    Nazwisko Hive w usłudze HDInsight
    Sterownik Użyj listy rozwijanej, aby wybrać sterownik Programu Hive .
    URL jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2. Zastąp CLUSTERNAME nazwą klastra usługi HDInsight:
    Nazwa użytkownika Nazwa konta logowania klastra dla klastra usługi HDInsight. Wartość domyślna to administrator.
    Hasło Hasło do konta logowania klastra.

    add alias dialog with parameters.

    Ważne

    Użyj przycisku Testuj, aby sprawdzić, czy połączenie działa. Gdy Połączenie do: zostanie wyświetlone okno dialogowe Hive w usłudze HDInsight, wybierz Połączenie, aby wykonać test. Jeśli test zakończy się pomyślnie, zostanie wyświetlone okno dialogowe pomyślnego Połączenie ion. Jeśli wystąpi błąd, zobacz Rozwiązywanie problemów.

    Aby zapisać alias połączenia, użyj przycisku OK w dolnej części okna dialogowego Dodawanie aliasu .

  8. Z listy rozwijanej Połączenie w górnej części obszaru SQuirreL SQL wybierz pozycję Hive w usłudze HDInsight. Po wyświetleniu monitu wybierz pozycję Połączenie.

    connection dialog with parameters.

  9. Po nawiązaniu połączenia wprowadź następujące zapytanie w oknie dialogowym zapytania SQL, a następnie wybierz ikonę Uruchom (uruchomiona osoba). Obszar wyników powinien zawierać wyniki zapytania.

    select * from hivesampletable limit 10;
    

    sql query dialog, including results.

Połączenie z przykładowej aplikacji Java

Przykład użycia klienta Java do wykonywania zapytań dotyczących programu Hive w usłudze HDInsight jest dostępny pod adresem https://github.com/Azure-Samples/hdinsight-java-hive-jdbc. Postępuj zgodnie z instrukcjami w repozytorium, aby skompilować i uruchomić przykład.

Rozwiązywanie problemów

Wystąpił nieoczekiwany błąd podczas próby otwarcia połączenia SQL

Objawy: Podczas nawiązywania połączenia z klastrem usługi HDInsight w wersji 3.3 lub nowszej może wystąpić błąd, który wystąpił nieoczekiwany błąd. Ślad stosu dla tego błędu rozpoczyna się od następujących wierszy:

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)

Przyczyna: ten błąd jest spowodowany przez starszą wersję commons-codec.jar pliku dołączonego do biblioteki SQuirreL.

Rozwiązanie: Aby naprawić ten błąd, wykonaj następujące czynności:

  1. Zamknij program SQuirreL, a następnie przejdź do katalogu, w którym zainstalowano bibliotekę SQuirreL w systemie, na przykład C:\Program Files\squirrel-sql-4.0.0\lib. W katalogu SquirreL w katalogu lib zastąp istniejącą commons-codec.jar elementem pobranym z klastra usługi HDInsight.

  2. Uruchom ponownie aplikację SQuirreL. Błąd nie powinien już występować podczas nawiązywania połączenia z usługą Hive w usłudze HDInsight.

Połączenie rozłączone przez usługę HDInsight

Objawy: usługa HDInsight nieoczekiwanie rozłącza połączenie podczas próby pobrania ogromnej ilości danych (np. kilku GB) za pośrednictwem JDBC/ODBC.

Przyczyna: Ograniczenie węzłów bramy powoduje ten błąd. Podczas pobierania danych z JDBC/ODBC wszystkie dane muszą przechodzić przez węzeł bramy. Brama nie jest jednak przeznaczona do pobierania ogromnej ilości danych, więc brama może zamknąć połączenie, jeśli nie może obsłużyć ruchu.

Rozwiązanie: Unikaj używania sterownika JDBC/ODBC do pobierania ogromnych ilości danych. Zamiast tego skopiuj dane bezpośrednio z magazynu obiektów blob.

Następne kroki

Teraz, gdy wiesz już, jak używać JDBC do pracy z usługą Hive, skorzystaj z poniższych linków, aby zapoznać się z innymi sposobami pracy z usługą Azure HDInsight.