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

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

Další informace o rozhraní Hive JDBC najdete 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í TLS/SSL. Veřejná brána, za kterou clustery stojí, 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.

Nebo můžete získat připojení prostřednictvím uživatelského rozhraní Ambari > Hive > Configs > Advanced.

Získání připojovacího řetězce JDBC prostřednictvím Ambari

Název hostitele v připojovacím řetězci

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

Port v připojovacím řetězci

Port 443 můžete použít pouze pro připojení ke clusteru z některých míst mimo virtuální síť Azure. 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 zvenku vystavené.

Authentication

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

Z aplikace 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í s klientem SQuirreL SQL

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

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

  2. V následujícím skriptu sshuser nahraďte 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 adresář vytvořený v předchozím kroku a zadáním následujícího příkazu zkopírujte 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/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. V levé části okna vyberte Ovladače.

    Karta Ovladače v levé části okna

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

    Ikona SQL aplikace SQuirreL

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

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

    Dialogové okno pro přidání ovladače s parametry

    Vyberte OK a uložte tato nastavení.

  6. Na levé straně okna SQuirreL SQL vyberte Aliases (Aliasy). Potom výběrem + ikony vytvořte alias připojení.

    SQuirreL SQL dialogové okno pro přidání nového aliasu

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

    Vlastnost Hodnota
    Název Hive ve službě HDInsight
    Ovladač Pomocí rozevíracího seznamu vyberte ovladač Hive.
    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 admin.
    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ž Připojení na: Dialogové okno Hive ve službě HDInsight, Připojení a proveďte test. Pokud je test úspěšný, zobrazí se dialogové okno Připojení bylo úspěšné. Pokud dojde k chybě, podívejte se na ř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 Připojení do horní části seznamu SQuirreL SQL Hive ve službě HDInsight. Po zobrazení výzvy vyberte Připojení.

    Dialogové okno připojení s parametry

  9. Po připojení zadejte do dialogového okna SQL dotazu 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 příkladu 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 . Postupujte podle pokynů v úložišti a sestavte a spusťte ukázku.

Řešení potíží

Při pokusu o otevření připojení SQL chyba

Příznaky: Při připojování ke clusteru HDInsight verze 3.3 nebo vyšší se může zobrazit chyba, že 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 souboru commons-codec.jar, který je součástí SQuirreL.

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

  1. Ukončete SQuirreL a přejděte do adresáře, kde je ve vašem systému nainstalovaný SQuirreL, například C:\Program Files\squirrel-sql-4.0.0\lib . V adresáři SquirreL v adresáři nahraďte existující soubor commons-codec.jar souborem staženým lib z clusteru HDInsight.

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

Připojení odpojené službou HDInsight

Příznaky: Při pokusu o stažení velkého množství dat (řekněme několika DATABÁZÍ) prostřednictvím JDBC nebo ODBC se při stahování připojení službou HDInsight neočekávaně odpojí.

Příčina: Příčinou této chyby je omezení uzlů brány. Při získávání dat z JDBC/ODBC musí všechna data projít přes uzel brány. Brána ale není určená ke stažení velkého množství dat, takže brána může připojení zavřít, pokud nezvládá provoz.

Řešení: Vyhněte se použití ovladače JDBC/ODBC ke stahování velkého množství dat. 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 s Azure HDInsight.