Använda Apache Beeline-klienten med Apache Hive
Den här artikeln beskriver hur du använder kommandoradens Apache Beeline-klient för att skapa och köra Apache Hive-frågor över en SSH-anslutning.
Bakgrund
Beeline är en Hive-klient som ingår på huvudnoderna i HDInsight-klustret. Den här artikeln beskriver hur du använder det här verktyget via exempel med hjälp av en Hive-fråga och en HiveQL-fil.
Om du vill ansluta till Beeline-klienten som är installerad i HDInsight-klustret eller installera Beeline lokalt följer du vår guide för att ansluta till eller installera Apache Beeline.
Beeline använder JDBC för att ansluta till HiveServer2, en tjänst som finns i HDInsight-klustret. Du kan också använda Beeline för att få fjärråtkomst till Hive på HDInsight via Internet. Följande exempel innehåller de vanligaste anslutningssträngarna som används för att ansluta till HDInsight från Beeline.
Förutsättningar för exempel
Ett Hadoop-kluster i Azure HDInsight. Om du behöver ett kluster följer du vår guide för att skapa ett HDInsight-kluster.
Observera URI-schemat för klustrets primära lagring. Till exempel
wasb://
för Azure Storage,abfs://
för Azure Data Lake Storage Gen2 elleradl://
för Azure Data Lake Storage Gen1. Om säker överföring är aktiverad för Azure Storage ärwasbs://
URI:n . Mer information finns i säker överföring.En SSH-klient. Mer information finns i Ansluta till HDInsight (Apache Hadoop) med hjälp av SSH. De flesta av stegen i det här dokumentet förutsätter att du använder Beeline från en SSH-session till klustret. Du kan också använda en lokal Beeline-klient, men de stegen beskrivs inte i den här artikeln.
Köra en Hive-fråga
Det här exemplet baseras på användning av Beeline-klienten från en SSH-anslutning.
Öppna en SSH-anslutning till klustret med koden nedan. Ersätt
sshuser
med SSH-användare för klustret och ersättCLUSTERNAME
med namnet på klustret. När du uppmanas till det anger du lösenordet för SSH-användarkontot.ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
Anslut till HiveServer2 med beeline-klienten från den öppna SSH-sessionen genom att ange följande kommando:
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
Anteckning
Se "Till HDInsight Enterprise Security Package-kluster (ESP) med Kerberos"-delen i Ansluta till HiveServer2 med Beeline eller installera Beeline lokalt för att ansluta från ditt lokala kluster om du använder ett ESP-aktiverat kluster (Enterprise Security Package)
Beeline-kommandon börjar med ett
!
tecken, till exempel!help
visar hjälp.!
Men kan utelämnas för vissa kommandon. Till exempelhelp
fungerar också.!sql
Det finns , som används för att köra HiveQL-instruktioner. HiveQL används dock så ofta att du kan utelämna föregående!sql
. Följande två uttryck är likvärdiga:!sql show tables; show tables;
I ett nytt kluster visas bara en tabell: hivesampletable.
Använd följande kommando för att visa schemat för hivesampletable:
describe hivesampletable;
Det här kommandot returnerar följande information:
+-----------------------+------------+----------+--+ | 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 | | +-----------------------+------------+----------+--+
Den här informationen beskriver kolumnerna i tabellen.
Ange följande instruktioner för att skapa en tabell med namnet log4jLogs med hjälp av exempeldata som tillhandahålls med HDInsight-klustret: (Ändra efter behov baserat på ditt URI-schema.)
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;
Dessa instruktioner utför följande åtgärder:
Uttryck Beskrivning DROP TABLE Om tabellen finns tas den bort. SKAPA EXTERN TABELL Skapar en extern tabell i Hive. Externa tabeller lagrar endast tabelldefinitionen i Hive. Data finns kvar på den ursprungliga platsen. RADFORMAT Hur data formateras. I det här fallet avgränsas fälten i varje logg med ett blanksteg. LAGRAS SOM TEXTFILPLATS Var data lagras och i vilket filformat. SELECT Väljer ett antal av alla rader där kolumn t4 innehåller värdet [ERROR]. Den här frågan returnerar värdet 3 eftersom det finns tre rader som innehåller det här värdet. INPUT__FILE__NAME SOM %.log Hive försöker tillämpa schemat på alla filer i katalogen. I det här fallet innehåller katalogen filer som inte matchar schemat. För att förhindra skräpdata i resultatet säger den här instruktionen till Hive att den endast ska returnera data från filer som slutar i .log. Anteckning
Externa tabeller bör användas när du förväntar dig att underliggande data ska uppdateras av en extern källa. Till exempel en automatiserad datauppladdningsprocess eller en MapReduce-åtgärd.
Om du tar bort en extern tabell tas inte data bort, utan bara tabelldefinitionen.
Utdata för det här kommandot liknar följande text:
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)
Avsluta beeline:
!exit
Köra en HiveQL-fil
Det här exemplet är en fortsättning från föregående exempel. Använd följande steg för att skapa en fil och kör den sedan med Beeline.
Använd följande kommando för att skapa en fil med namnet query.hql:
nano query.hql
Använd följande text som innehållet i filen. Den här frågan skapar en ny intern tabell med namnet 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';
Dessa instruktioner utför följande åtgärder:
Uttryck Beskrivning SKAPA TABELL OM DEN INTE FINNS Om tabellen inte redan finns skapas den. Eftersom nyckelordet EXTERNAL inte används skapar den här instruktionen en intern tabell. Interna tabeller lagras i Hive-informationslagret och hanteras helt av Hive. LAGRAS SOM ORC Lagrar data i ORC-format (Optimized Row Columnar). ORC-format är ett mycket optimerat och effektivt format för lagring av Hive-data. INFOGA SKRIV ÖVER ... VÄLJ Markerar rader från tabellen log4jLogs som innehåller [ERROR] och infogar sedan data i tabellen errorLogs . Anteckning
Till skillnad från externa tabeller tas även underliggande data bort om en intern tabell tas bort.
Om du vill spara filen använder du Ctrl+X, anger Y och slutligen Retur.
Använd följande för att köra filen med Beeline:
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http' -i query.hql
Anteckning
Parametern
-i
startar Beeline och kör -uttryckenquery.hql
i filen. När frågan är klar kommer du till promptenjdbc:hive2://headnodehost:10001/>
. Du kan också köra en fil med hjälp av parametern-f
som avslutar Beeline när frågan har slutförts.Kontrollera att tabellen errorLogs skapades med följande instruktion för att returnera alla rader från errorLogs:
SELECT * from errorLogs;
Tre rader med data ska returneras, som alla innehåller [ERROR] i kolumn 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)
Nästa steg
Mer allmän information om Hive i HDInsight finns i Använda Apache Hive med Apache Hadoop i HDInsight
Du hittar referensen för HiveQL-språket i språkhandboken
Mer information om andra sätt att arbeta med Hadoop i HDInsight finns i Använda MapReduce med Apache Hadoop i HDInsight