Apache Beeline istemcisini Apache Hive ile kullanma
Bu makalede, SSH bağlantısı üzerinden Apache Hive sorguları oluşturmak ve yürütmek için komut satırı Apache Beeline istemcisinin nasıl kullanılacağı açıklanır.
Arka Plan
Beeline, HDInsight kümenizin baş düğümlerine dahil edilen bir Hive istemcisidir. Bu makalede, hive sorgusu ve HiveQL dosyası kullanarak örnekler aracılığıyla bu aracın nasıl kullanılacağı açıklanmaktadır.
HDInsight kümenizde yüklü Olan Beeline istemcisine bağlanmak veya Beeline'ı yerel olarak yüklemek için Apache Beeline'a bağlanmak veya yüklemek için kılavuzumuzu izleyin.
Beeline, HDInsight kümenizde barındırılan HiveServer2 hizmetine bağlanmak için JDBC kullanır. HdInsight'ta Hive'a İnternet üzerinden uzaktan erişmek için de Beeline kullanabilirsiniz. Aşağıdaki örnekler, Beeline'dan HDInsight'a bağlanmak için kullanılan en yaygın bağlantı dizelerini sağlar.
Örnekler için önkoşullar
Azure HDInsight üzerinde bir Hadoop kümesi. Bir kümeye ihtiyacınız varsa HDInsight kümesi oluşturmak için kılavuzumuzu izleyin.
Kümenizin birincil depolama alanı için URI şemasına dikkat edin. Örneğin Azure Depolama,
wasb://
abfs://
Azure Data Lake Storage 2. Nesil veyaadl://
Azure Data Lake Storage 1. Nesil için. Azure Depolama için güvenli aktarım etkinleştirildiyse, URI olurwasbs://
. Daha fazla bilgi için bkz. güvenli aktarım.Bir SSH istemcisi. Daha fazla bilgi için bkz. SSH kullanarak HDInsight'a (Apache Hadoop) bağlanma. Bu belgedeki adımların çoğu, beeline'ı bir SSH oturumundan kümeye kullandığınızı varsayar. Yerel bir Beeline istemcisi de kullanabilirsiniz, ancak bu adımlar bu makalede ele alınmamıştır.
Hive sorgusu çalıştırma
Bu örnek, SSH bağlantısından Beeline istemcisini kullanmayı temel alır.
Aşağıdaki kodla kümeye bir SSH bağlantısı açın.
sshuser
değerini, kümenizin SSH kullanıcısı ile,CLUSTERNAME
değerini kümenizin adıyla değiştirin. İstendiğinde, SSH kullanıcı hesabının parolasını girin.ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
Aşağıdaki komutu girerek açık SSH oturumunuzdan Beeline istemcinizle HiveServer2'ye bağlanın:
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
Not
Beeline kullanarak HiveServer2'ye bağlanma bölümündeki "Kerberos kullanarak HDInsight Kurumsal Güvenlik Paketi (ESP) kümesine" bölümüne bakın veya Kurumsal Güvenlik Paketi (ESP) özellikli bir küme kullanıyorsanız yerel kümenizden bağlanmak için Beeline'ı yerel olarak yükleyin
Beeline komutları bir
!
karakterle başlar, örneğin!help
yardım görüntüler.!
Ancak bazı komutlar için atlanabilir. Örneğin,help
aynı zamanda çalışır.!sql
HiveQL deyimlerini yürütmek için kullanılan vardır. Ancak HiveQL o kadar yaygın olarak kullanılır ki, önceki!sql
öğesini atlayabilirsiniz. Aşağıdaki iki deyim eşdeğerdir:!sql show tables; show tables;
Yeni kümede yalnızca bir tablo listelenir: hivesampletable.
hivesampletable şemasını görüntülemek için aşağıdaki komutu kullanın:
describe hivesampletable;
Bu komut aşağıdaki bilgileri döndürür:
+-----------------------+------------+----------+--+ | 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 | | +-----------------------+------------+----------+--+
Bu bilgiler tablodaki sütunları açıklar.
HDInsight kümesiyle sağlanan örnek verileri kullanarak log4jLogs adlı bir tablo oluşturmak için aşağıdaki deyimleri girin: (URI şemanıza göre gerektiği gibi düzeltin.)
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;
Bu deyimler aşağıdaki eylemleri gerçekleştirir:
Deyim Açıklama DROP TABLE Tablo varsa silinir. DıŞ TABLO OLUŞTURMA Hive'da bir dış tablo oluşturur. Dış tablolar tablo tanımını yalnızca Hive'da depolar. Veriler özgün konumda bırakılır. SATıR BIÇIMI Verilerin nasıl biçimlendirildiğini. Bu durumda, her günlükteki alanlar bir boşlukla ayrılır. TEXTFILE KONUMU OLARAK DEPOLANıR Verilerin nerede ve hangi dosya biçiminde depolandığı. SELECT t4 sütununun [ERROR] değerini içerdiği tüm satırların sayısını seçer. Bu değeri içeren üç satır olduğundan bu sorgu 3 değerini döndürür. INPUT__FILE__NAME LIKE '%.log' Hive, şemayı dizindeki tüm dosyalara uygulamayı dener. Bu durumda, dizin şemayla eşleşmeyen dosyalar içerir. Sonuçlarda çöp verilerini önlemek için bu deyim Hive'a yalnızca .log ile biten dosyalardan veri döndürmesi gerektiğini bildirir. Not
Temel alınan verilerin bir dış kaynak tarafından güncelleştirilmesini beklediğiniz durumlarda dış tablolar kullanılmalıdır. Örneğin, otomatik veri yükleme işlemi veya MapReduce işlemi.
Dış tablo bırakılıyorsa veriler silinmez , yalnızca tablo tanımı silinir.
Bu komutun çıkışı aşağıdaki metne benzer:
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)
Beeline'dan çık:
!exit
HiveQL dosyası çalıştırma
Bu örnek, önceki örnekten bir devamdır. Bir dosya oluşturmak için aşağıdaki adımları kullanın ve beeline kullanarak çalıştırın.
query.hql adlı bir dosya oluşturmak için aşağıdaki komutu kullanın:
nano query.hql
Dosyanın içeriği olarak aşağıdaki metni kullanın. Bu sorgu errorLogs adlı yeni bir 'iç' tablo oluşturur:
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';
Bu deyimler aşağıdaki eylemleri gerçekleştirir:
Deyim Açıklama YOKSA TABLO OLUŞTUR Tablo henüz yoksa oluşturulur. EXTERNAL anahtar sözcüğü kullanılmadığından bu deyim bir iç tablo oluşturur. İç tablolar Hive veri ambarında depolanır ve tamamen Hive tarafından yönetilir. ORC OLARAK DEPOLANIYOR Verileri İyileştirilmiş Satır Sütunu (ORC) biçiminde depolar. ORC biçimi, Hive verilerini depolamak için yüksek oranda iyileştirilmiş ve verimli bir biçimdir. INSERT OVERWRITE ... SEÇİN log4jLogs tablosundan [ERROR] içeren satırları seçer ve ardından verileri errorLogs tablosuna ekler. Not
Dış tablolardan farklı olarak, iç tablo bırakılıyorsa temel alınan veriler de silinir.
Dosyayı kaydetmek için Ctrl+X tuşunu kullanın, ardından Y yazın ve son olarak Enter tuşuna basın.
Beeline kullanarak dosyayı çalıştırmak için aşağıdakileri kullanın:
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http' -i query.hql
Not
-i
parametresi Beeline'ı başlatır ve dosyasındakiquery.hql
deyimleri çalıştırır. Sorgu tamamlandıktan sonra isteminejdbc:hive2://headnodehost:10001/>
ulaşırsınız. Sorgu tamamlandıktan sonra Beeline'dan çıkan parametresini kullanarak-f
da bir dosya çalıştırabilirsiniz.errorLogs tablosunun oluşturulduğunu doğrulamak için, errorLogs içindeki tüm satırları döndürmek için aşağıdaki deyimi kullanın:
SELECT * from errorLogs;
T4 sütununda [ERROR] içeren üç veri satırı döndürülmelidir:
+---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+ | 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)
Sonraki adımlar
HDInsight'ta Hive hakkında daha fazla genel bilgi için bkz. HDInsight'ta Apache Hadoop ile Apache Hive kullanma
HiveQL dil başvurularını dil kılavuzunda bulabilirsiniz
HDInsight'ta Hadoop ile çalışmanın diğer yolları hakkında daha fazla bilgi için bkz. HDInsight üzerinde Apache Hadoop ile MapReduce kullanma