Az Apache Beeline-ügyfél használata az Apache Hive-nal
Ez a cikk azt ismerteti, hogyan hozhat létre és hajthat végre Apache Hive-lekérdezéseket SSH-kapcsolaton keresztül a parancssori Apache Beeline-ügyfél használatával.
Háttér
A Beeline egy Hive-ügyfél, amely a HDInsight-fürt átjárócsomópontjain található. Ez a cikk bemutatja, hogyan használhatja ezt az eszközt példákon keresztül Egy Hive-lekérdezés és egy HiveQL-fájl használatával.
Ha csatlakozni szeretne a HDInsight-fürtön telepített Beeline-ügyfélhez, vagy helyileg szeretné telepíteni a Beeline-t, kövesse az útmutatónkat az Apache Beeline-hoz való csatlakozáshoz vagy telepítéséhez.
A Beeline JDBC használatával csatlakozik a HDInsight-fürtön üzemeltetett HiveServer2 szolgáltatáshoz. A Beeline használatával távolról is elérheti a Hive on HDInsightot az interneten keresztül. Az alábbi példák a HDInsighthoz a Beeline-ból való csatlakozáshoz használt leggyakoribb kapcsolati sztringeket ismertetik.
Példák előfeltételei
Hadoop-fürt az Azure HDInsightban. Ha fürtre van szüksége, kövesse az útmutatónkat egy HDInsight-fürt létrehozásához.
Figyelje meg a fürt elsődleges tárolójának URI-sémáját. Például
wasb://
az Azure Storage,abfs://
a Azure Data Lake Storage Gen2 vagyadl://
Azure Data Lake Storage Gen1 esetében. Ha a biztonságos átvitel engedélyezve van az Azure Storage-ban, az URI a következőwasbs://
: . További információ: Biztonságos átvitel.Egy SSH-ügyfél. További információért lásd: Csatlakozás a HDInsighthoz (Apache Hadoop) SSH-val. A dokumentum legtöbb lépése feltételezi, hogy a Beeline-t egy SSH-munkamenetből a fürtbe használja. Használhat helyi Beeline-ügyfelet is, de a jelen cikkben nem foglalkozunk ezekkel a lépésekkel.
Hive-lekérdezések futtatása
Ez a példa a Beeline-ügyfél SSH-kapcsolatból való használatával kapcsolatos.
Nyisson meg egy SSH-kapcsolatot a fürttel az alábbi kóddal. Cserélje le az
sshuser
elemet a fürt SSH-felhasználójára, illetve aCLUSTERNAME
elemet a fürt nevére. Amikor a rendszer kéri, adja meg az SSH-felhasználói fiók jelszavát.ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
Csatlakozzon a HiveServer2-höz a Beeline-ügyféllel a megnyitott SSH-munkamenetből a következő paranccsal:
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
Megjegyzés
Tekintse meg a Csatlakozás a HiveServer2-hez a Beeline használatával című cikk "A HDInsight Enterprise Security Package-fürthöz (ESP-fürt Kerberos használatával) című szakaszát , vagy telepítse a Beeline-t helyileg a helyi csatlakozáshoz , ha enterprise security package (ESP) kompatibilis fürtöt használ
A Beeline-parancsok karakterrel
!
kezdődnek, például!help
megjeleníti a súgót.!
Egyes parancsok esetében azonban kihagyható a paraméter. Például működikhelp
is.Van
!sql
, amely HiveQL-utasítások végrehajtására szolgál. A HiveQL-t azonban olyan gyakran használják, hogy kihagyhatja az előzőt!sql
. A következő két utasítás egyenértékű:!sql show tables; show tables;
Egy új fürtön csak egy tábla van felsorolva: hivesampletable.
A következő paranccsal jelenítse meg a hivesampletable sémáját:
describe hivesampletable;
Ez a parancs a következő információkat adja vissza:
+-----------------------+------------+----------+--+ | 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 | | +-----------------------+------------+----------+--+
Ez az információ a tábla oszlopait ismerteti.
Adja meg a következő utasításokat a log4jLogs nevű tábla létrehozásához a HDInsight-fürthöz biztosított mintaadatok használatával: (Szükség szerint módosítsa az URI-séma alapján.)
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;
Ezek az utasítások a következő műveleteket hajtják végre:
Utasítás Leírás DROP TABLE Ha a tábla létezik, az törlődik. KÜLSŐ TÁBLA LÉTREHOZÁSA Létrehoz egy külső táblát a Hive-ban. A külső táblák csak a Hive-ban tárolják a tábladefiníciót. Az adatok az eredeti helyen maradnak. SORFORMÁTUM Az adatok formázásának menete. Ebben az esetben az egyes naplók mezőit szóköz választja el egymástól. SZÖVEGFÁJL HELYEKÉNT TÁROLVA Az adatok tárolási helye és fájlformátuma. SELECT Kiválasztja az összes olyan sor számát, ahol a t4 oszlop tartalmazza a [HIBA] értéket. Ez a lekérdezés 3 értéket ad vissza, mivel három sor tartalmazza ezt az értéket. INPUT__FILE__NAME LIKE '%.log' A Hive megpróbálja alkalmazni a sémát a könyvtár összes fájljára. Ebben az esetben a könyvtár olyan fájlokat tartalmaz, amelyek nem felelnek meg a sémának. Az eredményekben szereplő szemétadatok elkerülése érdekében ez az utasítás arra utasítja a Hive-t, hogy csak .log végződésű fájlokból adjon vissza adatokat. Megjegyzés
A külső táblákat akkor kell használni, ha arra számít, hogy a mögöttes adatokat külső forrás frissíti. Például egy automatizált adatfeltöltési folyamat vagy egy MapReduce-művelet.
A külső táblák elvetése nem törli az adatokat, csak a tábladefiníciót.
A parancs kimenete a következő szöveghez hasonló:
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)
Kilépés a Beeline-ból:
!exit
HiveQL-fájl futtatása
Ez a példa az előző példa folytatása. Az alábbi lépésekkel hozzon létre egy fájlt, majd futtassa azt a Beeline használatával.
Az alábbi paranccsal hozzon létre egy query.hql nevű fájlt:
nano query.hql
A fájl tartalmaként használja az alábbi szöveget. Ez a lekérdezés létrehoz egy új , errorLogs nevű belső táblát:
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';
Ezek az utasítások a következő műveleteket hajtják végre:
Utasítás Leírás TÁBLA LÉTREHOZÁSA, HA NEM LÉTEZIK Ha a tábla még nem létezik, akkor létrejön. Mivel az EXTERNAL kulcsszó nincs használatban, ez az utasítás létrehoz egy belső táblát. A belső táblák tárolása a Hive-adattárházban történik, és a Hive teljes mértékben kezeli. ORC-KÉNT TÁROLVA Az adatokat optimalizált soroszlopos (ORC) formátumban tárolja. Az ORC formátum egy rendkívül optimalizált és hatékony formátum Hive-adatok tárolására. FELÜLÍRÁS BESZÚRÁSA ... VÁLASSZA KI Kijelöli a log4jLogs táblából az [ERROR] elemet tartalmazó sorokat, majd beszúrja az adatokat az errorLogs táblába. Megjegyzés
A külső tábláktól eltérően a belső táblák elvetése a mögöttes adatokat is törli.
A fájl mentéséhez használja a CtrlXbillentyűkombinációt+, majd írja be az Y, végül az Enter billentyűt.
Futtassa a fájlt a Beeline használatával az alábbi paranccsal:
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http' -i query.hql
Megjegyzés
A
-i
paraméter elindítja a Beeline-t, és a fájlban futtatja azquery.hql
utasításokat. Miután a lekérdezés befejeződött, megérkezik ajdbc:hive2://headnodehost:10001/>
kérdésre. A paraméterrel-f
is futtathat fájlt, amely a lekérdezés befejezése után kilép a Beeline-ból.Az errorLogs tábla létrehozásának ellenőrzéséhez használja a következő utasítást az errorLogs összes sorának visszaadásához:
SELECT * from errorLogs;
Három sornyi adatot kell visszaadni, amelyek mindegyike [ERROR] értéket tartalmaz a t4 oszlopban:
+---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+ | 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)
Következő lépések
További általános információk a HIVE-ről a HDInsightban: Use Apache Hive with Apache Hadoop on HDInsight (Az Apache Hive használata a HDInsighton futó Apache Hadooppal)
A HiveQL nyelvi referenciáját a nyelvi kézikönyvben találja
A HDInsighton futó Hadooptal való együttműködés egyéb módjairól további információt a MapReduce használata a HDInsighton futó Apache Hadooppal című témakörben talál.