Sdílet prostřednictvím


Dotazování Apache Hivu prostřednictvím ovladače JDBC v HDInsightu

Naučte se používat ovladač JDBC z aplikace Java. Odeslání dotazů Apache Hive do Apache Hadoopu ve službě Azure HDInsight Informace v tomto dokumentu ukazují, jak se připojit programově a z SQuirreL SQL klienta.

Další informace o rozhraní Hive JDBC naleznete v tématu HiveJDBCInterface.

Požadavky

Připojovací řetězec JDBC

Připojení JDBC ke clusteru HDInsight v Azure se provádí přes port 443. Provoz je zabezpečený pomocí protokolu TLS/SSL. Veřejná brána, za kterou clustery sedí, přesměruje provoz na port, na který HiveServer2 skutečně naslouchá. Následující připojovací řetězec ukazuje formát, který se má použít pro HDInsight:

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

Parametr CLUSTERNAME nahraďte názvem vašeho clusteru HDInsight.

Název hostitele v připojovací řetězec

Název hostitele CLUSTERNAME.azurehdinsight.net v připojovací řetězec je stejný jako adresa URL clusteru. Můžete ho získat prostřednictvím webu Azure Portal.

Port v připojovací řetězec

K připojení ke clusteru z některých míst mimo virtuální síť Azure můžete použít pouze port 443 . HDInsight je spravovaná služba, což znamená, že všechna připojení ke clusteru se spravují přes zabezpečenou bránu. K HiveServeru 2 se nemůžete připojit přímo na portech 10001 nebo 10000. Tyto porty nejsou vystavené vnějšímu prostředí.

Ověřování

Při navazování připojení použijte k ověření název a heslo správce clusteru HDInsight. V klientech JDBC, jako je SQuirreL SQL, zadejte název správce a heslo v nastavení klienta.

V aplikaci v Javě musíte při navazování připojení použít název a heslo. Například následující kód Java otevře nové připojení:

DriverManager.getConnection(connectionString,clusterAdmin,clusterPassword);

Připojení pomocí klienta SQL SQuirreL

SQuirreL SQL je klient JDBC, který lze použít ke vzdálenému spouštění dotazů Hive s vaším clusterem HDInsight. Následující kroky předpokládají, že jste již nainstalovali SQuirreL SQL.

  1. Vytvořte adresář, který bude obsahovat určité soubory, které se mají zkopírovat z clusteru.

  2. V následujícím skriptu nahraďte sshuser názvem uživatelského účtu SSH pro cluster. Nahraďte CLUSTERNAME názvem clusteru HDInsight. Z příkazového řádku změňte pracovní adresář na pracovní adresář vytvořený v předchozím kroku a pak zadejte následující příkaz, který zkopíruje soubory z clusteru 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. Spusťte aplikaci SQuirreL SQL. Nalevo od okna vyberte Ovladače.

    Karta Ovladače nalevo od okna

  4. V horní části dialogového okna Ovladače vyberte + ikonu a vytvořte ovladač.

    Ikona ovladačů aplikace SQuirreL SQL

  5. V dialogovém okně Přidaný ovladač přidejte následující informace:

    Vlastnost Hodnota
    Name Hive
    Příklad adresy URL jdbc:hive2://localhost:443/default;transportMode=http;ssl=true;httpPath=/hive2
    Další cesta třídy Pomocí tlačítka Přidat přidejte všechny soubory JAR stažené dříve.
    Název třídy org.apache.hive.jdbc.HiveDriver

    dialogové okno přidat ovladač s parametry.

    Chcete-li tato nastavení uložit, vyberte OK .

  6. Nalevo od okna SQuirreL SQL vyberte Aliasy. Pak výběrem + ikony vytvořte alias připojení.

    'SQuirreL SQL add new alias dialog'.

  7. V dialogovém okně Přidat alias použijte následující hodnoty:

    Vlastnost Hodnota
    Name Hive ve službě HDInsight
    Ovladač Pomocí rozevíracího seznamu vyberte ovladač Hive .
    Adresa URL jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2. Nahraďte CLUSTERNAME názvem clusteru HDInsight.
    Uživatelské jméno Název přihlašovacího účtu clusteru pro váš cluster HDInsight. Výchozí hodnota je správce.
    Heslo Heslo pro přihlašovací účet clusteru.

    Dialogové okno pro přidání aliasu s parametry

    Důležité

    Pomocí tlačítka Test ověřte, že připojení funguje. Když se připojíte: Zobrazí se dialogové okno Hive ve službě HDInsight , vyberte Připojit a proveďte test. Pokud test proběhne úspěšně, zobrazí se dialogové okno Úspěšné připojení. Pokud dojde k chybě, přečtěte si téma Řešení potíží.

    Pokud chcete alias připojení uložit, použijte tlačítko OK v dolní části dialogového okna Přidat alias .

  8. V rozevíracím seznamu Připojit k horní části SQuirreL SQL vyberte Hive ve službě HDInsight. Po zobrazení výzvy vyberte Připojit.

    dialogové okno připojení s parametry.

  9. Po připojení zadejte do dialogového okna dotazu SQL následující dotaz a pak vyberte ikonu Spustit (spuštěná osoba). V oblasti výsledků by se měly zobrazit výsledky dotazu.

    select * from hivesampletable limit 10;
    

    dialogové okno dotazu SQL, včetně výsledků

Připojení z ukázkové aplikace v Javě

Příklad použití klienta Java k dotazování Hivu ve službě HDInsight je k dispozici na adrese https://github.com/Azure-Samples/hdinsight-java-hive-jdbc. Podle pokynů v úložišti sestavte a spusťte ukázku.

Řešení problému

Při pokusu o otevření připojení SQL došlo k neočekávané chybě

Příznaky: Při připojování ke clusteru HDInsight verze 3.3 nebo vyšší může dojít k chybě, ke které došlo k neočekávané chybě. Trasování zásobníku pro tuto chybu začíná následujícími řádky:

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)

Příčina: Příčinou této chyby je starší verze commons-codec.jar souboru, který je součástí SQuirreL.

Řešení: Pokud chcete tuto chybu opravit, postupujte následovně:

  1. Ukončete SQuirreL a pak přejděte do adresáře, kde je V systému nainstalován SQuirreL, možná C:\Program Files\squirrel-sql-4.0.0\lib. V adresáři SquirreL v rámci lib adresáře nahraďte existující commons-codec.jar názvem staženým z clusteru HDInsight.

  2. Restartujte SQuirreL. K chybě by už nemělo dojít při připojování k Hivu ve službě HDInsight.

Zrušené připojení službou HDInsight

Příznaky: HDInsight neočekávaně odpojí připojení při pokusu o stažení obrovského množství dat (řekněme několik GB) prostřednictvím JDBC/ODBC.

Příčina: Toto omezení na uzlech brány způsobí tuto chybu. Když získáte data z JDBC/ODBC, musí všechna data projít uzlem brány. Brána ale není navržená ke stažení velkého množství dat, takže brána může připojení zavřít, pokud nedokáže zpracovat provoz.

Řešení: Vyhněte se použití ovladače JDBC/ODBC ke stažení obrovského množství dat. Místo toho zkopírujte data přímo z úložiště objektů blob.

Další kroky

Teď, když jste se naučili používat JDBC pro práci s Hivem, můžete pomocí následujících odkazů prozkoumat další způsoby práce se službou Azure HDInsight.