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 neboadl://
pro Azure Data Lake Storage Gen1. Pokud je pro Azure Storage povolený zabezpečený přenos, identifikátor URI jewasbs://
. 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.
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ístoCLUSTERNAME
zadejte název clusteru. Po zobrazení výzvy zadejte heslo k uživatelskému účtu SSH.ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
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).
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.
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.
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)
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.
Pomocí následujícího příkazu vytvořte soubor s názvem query.hql:
nano query.hql
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.
Pokud chcete soubor uložit, stiskněte Ctrl+X, pak zadejte Y a nakonec Enter.
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 vquery.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.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
Další obecné informace o Hivu ve službě HDInsight najdete v tématu Použití Apache Hivu s Apache Hadoopem ve službě HDInsight.
Referenční informace k jazyku HiveQL najdete v jazykové příručce.
Další informace o dalších způsobech práce s Hadoopem ve službě HDInsight najdete v tématu Použití MapReduce s Apache Hadoopem ve službě HDInsight.