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);

Nawiązywanie połączenia za pomocą klienta SQuirreL SQL

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.

    Karta Sterowniki po lewej stronie okna.

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

    Ikona sterowników aplikacji SQL SQuirreL.

  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

    dodawanie okna dialogowego sterownika z parametrami.

    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.

  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.

    dodaj okno dialogowe aliasu z parametrami.

    Ważne

    Użyj przycisku Testuj, aby sprawdzić, czy połączenie działa. Po wyświetleniu okna dialogowego Połącz z: Hive w usłudze HDInsight wybierz pozycję Połącz , aby wykonać test. Jeśli test zakończy się pomyślnie, zostanie wyświetlone okno dialogowe Połączenie powiodło się. 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łącz z w górnej części pozycji SQuirreL SQL wybierz pozycję Hive w usłudze HDInsight. Po wyświetleniu monitu wybierz pozycję Połącz.

    okno dialogowe połączenia z parametrami.

  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;
    

    Okno dialogowe zapytania sql, w tym wyniki.

Nawiązywanie połączenia 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. Po pobraniu danych z JDBC/ODBC wszystkie dane muszą przejść 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.