Použití klienta Apache Beeline s Apache Hivem

Tento článek popisuje, jak pomocí klienta Apache Beeline z příkazového řádku vytvářet a spouštět dotazy Apache Hive přes připojení SSH.

Pozadí

Beeline je klient Hive, který je součástí hlavních uzlů clusteru HDInsight. Tento článek popisuje, jak tento nástroj používat prostřednictvím příkladů s využitím dotazu Hive a souboru HiveQL.

Pokud se chcete připojit ke klientovi Beeline nainstalovanému v clusteru HDInsight nebo nainstalovat Beeline místně, postupujte podle našeho průvodce a připojte se pomocí nebo nainstalujte Apache Beeline.

Beeline používá JDBC pro připojení k HiveServer2, službě hostované ve vašem clusteru HDInsight. Beeline můžete použít také pro vzdálený přístup k Hivu ve službě HDInsight přes internet. Následující příklady obsahují nejběžnější připojovací řetězce používané pro připojení ke službě HDInsight z Beeline.

Požadavky na příklady

  • Cluster Hadoop ve službě Azure HDInsight. Pokud potřebujete cluster, postupujte podle našeho průvodce a vytvořte cluster HDInsight.

  • Všimněte si schématu identifikátorů URI pro primární úložiště vašeho clusteru. Například wasb:// pro Azure Storage, abfs:// pro Azure Data Lake Storage Gen2 nebo adl:// pro Azure Data Lake Storage Gen1. Pokud je pro Azure Storage povolený zabezpečený přenos, identifikátor URI je wasbs://. Další informace najdete v tématu Zabezpečený přenos.

  • Klient SSH. Další informace najdete v tématu Připojení ke službě HDInsight (Apache Hadoop) pomocí SSH. Většina kroků v tomto dokumentu předpokládá, že používáte Beeline z relace SSH ke clusteru. Můžete také použít místního klienta Beeline, ale tyto kroky nejsou v tomto článku popsané.

Spuštění dotazu Hive

Tento příklad je založený na použití klienta Beeline z připojení SSH.

  1. Pomocí následujícího kódu otevřete připojení SSH ke clusteru. Místo sshuser použijte jméno uživatele SSH pro váš cluster a místo CLUSTERNAME zadejte název clusteru. Po zobrazení výzvy zadejte heslo k uživatelskému účtu SSH.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Připojte se k HiveServer2 pomocí klienta Beeline z otevřené relace SSH zadáním následujícího příkazu:

    beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
    

    Poznámka

    Pokud používáte cluster s podporou Balíčku zabezpečení podniku (ESP), přečtěte si část Připojení k HiveServer2 pomocí Beeline nebo místní instalace Beeline pro připojení z místního prostředí, pokud používáte cluster s podporou Balíčku zabezpečení podniku (ESP).

  3. Příkazy Beeline začínají znakem, například !help zobrazí nápovědu!. ! U některých příkazů je však možné vynechat. help Například funguje také.

    K dispozici je !sql, který se používá ke spouštění příkazů HiveQL. HiveQL se ale používá tak často, že můžete vynechat předchozí !sql. Následující dva příkazy jsou ekvivalentní:

    !sql show tables;
    show tables;
    

    V novém clusteru je uvedená pouze jedna tabulka: hivesampletable.

  4. Pomocí následujícího příkazu zobrazte schéma pro hivesampletable:

    describe hivesampletable;
    

    Tento příkaz vrátí následující informace:

    +-----------------------+------------+----------+--+
    |       col_name        | data_type  | comment  |
    +-----------------------+------------+----------+--+
    | clientid              | string     |          |
    | querytime             | string     |          |
    | market                | string     |          |
    | deviceplatform        | string     |          |
    | devicemake            | string     |          |
    | devicemodel           | string     |          |
    | state                 | string     |          |
    | country               | string     |          |
    | querydwelltime        | double     |          |
    | sessionid             | bigint     |          |
    | sessionpagevieworder  | bigint     |          |
    +-----------------------+------------+----------+--+
    

    Tyto informace popisují sloupce v tabulce.

  5. Zadáním následujících příkazů vytvořte tabulku s názvem log4jLogs pomocí ukázkových dat dodaných s clusterem HDInsight: (Podle potřeby upravte na základě schématu identifikátorů URI.)

    DROP TABLE log4jLogs;
    CREATE EXTERNAL TABLE log4jLogs (
        t1 string,
        t2 string,
        t3 string,
        t4 string,
        t5 string,
        t6 string,
        t7 string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
    STORED AS TEXTFILE LOCATION 'wasbs:///example/data/';
    SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs
        WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log'
        GROUP BY t4;
    

    Tyto příkazy provádějí následující akce:

    Příkaz Popis
    DROP TABLE Pokud tabulka existuje, odstraní se.
    VYTVOŘENÍ EXTERNÍ TABULKY Vytvoří externí tabulku v Hivu. Externí tabulky ukládají pouze definici tabulky v Hivu. Data zůstanou v původním umístění.
    FORMÁT ŘÁDKU Jak se data formátují. V tomto případě jsou pole v každém protokolu oddělena mezerou.
    ULOŽENO JAKO UMÍSTĚNÍ TEXTOVÉHO SOUBORU Kde jsou data uložená a v jakém formátu souboru.
    SELECT Vybere počet všech řádků, ve kterých sloupec t4 obsahuje hodnotu [ERROR]. Tento dotaz vrátí hodnotu 3 , protože existují tři řádky, které tuto hodnotu obsahují.
    INPUT__FILE__NAME LIKE %.log Hive se pokusí použít schéma na všechny soubory v adresáři. V tomto případě adresář obsahuje soubory, které neodpovídají schématu. Aby se zabránilo uvolnění paměti ve výsledcích, tento příkaz říká Hivu, že by měl vracet pouze data ze souborů končících na .log.

    Poznámka

    Externí tabulky by se měly používat, pokud očekáváte, že podkladová data budou aktualizována externím zdrojem. Například automatizovaný proces nahrávání dat nebo operace MapReduce.

    Přetažením externí tabulky se neodstraní data, ale pouze definice tabulky.

    Výstup tohoto příkazu se podobá následujícímu textu:

    INFO  : Tez session hasn't been created yet. Opening session
    INFO  :
    
    INFO  : Status: Running (Executing on YARN cluster with App id application_1443698635933_0001)
    
    INFO  : Map 1: -/-      Reducer 2: 0/1
    INFO  : Map 1: 0/1      Reducer 2: 0/1
    INFO  : Map 1: 0/1      Reducer 2: 0/1
    INFO  : Map 1: 0/1      Reducer 2: 0/1
    INFO  : Map 1: 0/1      Reducer 2: 0/1
    INFO  : Map 1: 0(+1)/1  Reducer 2: 0/1
    INFO  : Map 1: 0(+1)/1  Reducer 2: 0/1
    INFO  : Map 1: 1/1      Reducer 2: 0/1
    INFO  : Map 1: 1/1      Reducer 2: 0(+1)/1
    INFO  : Map 1: 1/1      Reducer 2: 1/1
    +----------+--------+--+
    |   sev    | count  |
    +----------+--------+--+
    | [ERROR]  | 3      |
    +----------+--------+--+
    1 row selected (47.351 seconds)
    
  6. Ukončete Beeline:

    !exit
    

Spuštění souboru HiveQL

Tento příklad je pokračováním předchozího příkladu. Pomocí následujícího postupu vytvořte soubor a pak ho spusťte pomocí Beeline.

  1. Pomocí následujícího příkazu vytvořte soubor s názvem query.hql:

    nano query.hql
    
  2. Jako obsah souboru použijte následující text. Tento dotaz vytvoří novou interní tabulku s názvem errorLogs:

    CREATE TABLE IF NOT EXISTS errorLogs (t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) STORED AS ORC;
    INSERT OVERWRITE TABLE errorLogs SELECT t1, t2, t3, t4, t5, t6, t7 FROM log4jLogs WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log';
    

    Tyto příkazy provádějí následující akce:

    Příkaz Popis
    VYTVOŘIT TABULKU, POKUD NEEXISTUJE Pokud tabulka ještě neexistuje, vytvoří se. Vzhledem k tomu, že se nepoužívá klíčové slovo EXTERNAL , vytvoří tento příkaz interní tabulku. Interní tabulky jsou uložené v datovém skladu Hive a zcela je spravuje Hive.
    ULOŽENO JAKO ORC Ukládá data ve formátu ORC (Optimized Row Columnar). Formát ORC je vysoce optimalizovaný a efektivní formát pro ukládání dat Hive.
    INSERT OVERWRITE ... VYBERTE Vybere z tabulky log4jLogs řádky , které obsahují [ERROR] a pak vloží data do tabulky errorLogs .

    Poznámka

    Na rozdíl od externích tabulek se odstraněním interní tabulky odstraní i podkladová data.

  3. Pokud chcete soubor uložit, stiskněte Ctrl+X, pak zadejte Y a nakonec Enter.

  4. Pomocí následujícího příkazu spusťte soubor pomocí Beeline:

    beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http' -i query.hql
    

    Poznámka

    Parametr -i spustí Beeline a spustí příkazy v query.hql souboru . Po dokončení dotazu se zobrazí jdbc:hive2://headnodehost:10001/> výzva. Soubor můžete také spustit pomocí parametru -f , který po dokončení dotazu ukončí Beeline.

  5. Pokud chcete ověřit vytvoření tabulky errorLogs , použijte následující příkaz, který vrátí všechny řádky z errorLogs:

    SELECT * from errorLogs;
    

    Měly by se vrátit tři řádky dat, které všechny obsahují [ERROR] ve sloupci t4:

    +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+
    | errorlogs.t1  | errorlogs.t2  | errorlogs.t3  | errorlogs.t4  | errorlogs.t5  | errorlogs.t6  | errorlogs.t7  |
    +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+
    | 2012-02-03    | 18:35:34      | SampleClass0  | [ERROR]       | incorrect     | id            |               |
    | 2012-02-03    | 18:55:54      | SampleClass1  | [ERROR]       | incorrect     | id            |               |
    | 2012-02-03    | 19:25:27      | SampleClass4  | [ERROR]       | incorrect     | id            |               |
    +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+
    3 rows selected (0.813 seconds)
    

Další kroky