Hive入門

介紹

Hive 是一個(gè)基于 Hadoop 的數(shù)據(jù)倉庫工具,它可以將結(jié)構(gòu)化數(shù)據(jù)文件映射成一張表,然后通過類似 SQL 的查詢語句來執(zhí)行查詢。這些查詢語句在Hive中被稱作HQL,這些 HQL 會(huì)被翻譯成 MapReduce 作業(yè)來執(zhí)行。

Hive 把表和字段轉(zhuǎn)換成 HDFS 中的文件夾和文件,并將這些元數(shù)據(jù)保持在關(guān)系型數(shù)據(jù)庫中,如 derby 或 mysql。

Hive 查詢的數(shù)據(jù)存儲(chǔ)在HDFS上,運(yùn)行在Yarn上。

Hive 適合做離線數(shù)據(jù)分析,如:批量處理和延時(shí)要求不高場(chǎng)景。

安裝

安裝 Hadoop

由于 Hive 是基于 Hadoop 的,所以需要先準(zhǔn)備一個(gè) Hadoop 環(huán)境。Hadoop 的安裝參考我前面的文章。

安裝 Hive

首先從下面地址下載最新版本的 Hive,這里我們使用 2.3.2 版。

下載并解壓安裝包

$ wget -c https://dist.apache.org/repos/dist/release/hive/hive-2.3.2/apache-hive-2.3.2-bin.tar.gz
$ tar zxvf apache-hive-2.3.2-bin.tar.gz
$ cd apache-hive-2.3.2-bin

設(shè)置環(huán)境變量

$ export JAVA_HOME=/opt/jdk8
$ export HADOOP_HOME=/apps/hadoop-3.0.0
$ export HIVE_HOME=/apps/apache-hive-2.3.2-bin

初始化 Derby 數(shù)據(jù)庫,Hive 默認(rèn)使用 Derby 數(shù)據(jù)庫來保存元數(shù)據(jù)。生產(chǎn)環(huán)境建議使用 Mysql。

$ bin/schematool -dbType derby -initSchema

運(yùn)行 Hive

啟動(dòng) Shell

通常我們使用 Hive 都是使用命令行工具來執(zhí)行一些數(shù)據(jù)的更新和查詢,下面命令就會(huì)啟動(dòng) Hive 的命令行終端。

$ bin/hive
> hive

查看表

hive> show tables;

創(chuàng)建表

hive> CREATE TABLE users(id int, username string, password string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

插入查詢數(shù)據(jù)

這里我們先準(zhǔn)備一個(gè)數(shù)據(jù)文件 users.dat,內(nèi)容如下:

1,user1,password1
2,user2,password2
3,user3,password3
4,user4,password4
5,user5,password5

向數(shù)據(jù)表導(dǎo)入數(shù)據(jù)

# 從本地文件系統(tǒng)導(dǎo)入
hive> LOAD DATA LOCAL INPATH '/tmp/users.dat' INTO TABLE users;

# 從 HDFS 導(dǎo)入
hive> LOAD DATA INPATH '/tmp/users.dat' INTO TABLE users;

導(dǎo)入數(shù)據(jù)后,使用 HQL 來查詢結(jié)果

hive> select * from users;
OK
1       user1   password1
2       user2   password2
3       user3   password3
4       user4   password4
5       user5   password5

此時(shí),我們查看一下這些數(shù)據(jù)在 HDFS 上是怎樣存儲(chǔ)的,我在查看

hive> dfs -ls /user/hive/warehouse/users
Found 1 items
-rwxr-xr-x   2 jhadmin supergroup         54 2018-02-05 00:14 /user/hive/warehouse/users/users.dat

hive> dfs -cat /user/hive/warehouse/users/users.dat
1,user1,password1
2,user2,password2
3,user3,password3
4,user4,password4
5,user5,password5

下面我們?cè)俨迦胍粭l記錄看看,此時(shí)終端會(huì)出現(xiàn)MapReduce作業(yè)的相關(guān)信息。

hive> INSERT INTO TABLE users(id, username, password) values (6, 'user6', 'password6');
... (MapReduce Job output)
hive> select * from users;
OK
6       user6   password6
1       user1   password1
2       user2   password2
3       user3   password3
4       user4   password4
5       user5   password5

查看一下 HDFS 的文件信息,可以看到新添加了一個(gè)文件000000_0,其中保存著上面插入語句保存的數(shù)據(jù)。

hive> dfs -ls /user/hive/warehouse/users
Found 2 items
-rwxr-xr-x   2 jhadmin supergroup         22 2018-02-05 00:26 /user/hive/warehouse/users/000000_0
-rwxr-xr-x   2 jhadmin supergroup         54 2018-02-05 00:14 /user/hive/warehouse/users/users.dat

hive> dfs -cat /user/hive/warehouse/users/000000_0
6,username6,password6

從上面的結(jié)果可以看到,每次單獨(dú)的 INSERT 語句都會(huì)至少產(chǎn)生一個(gè)文件,因此在生產(chǎn)環(huán)境下還是要避免這樣的插入操作,而應(yīng)該使用批量導(dǎo)入來寫入數(shù)據(jù)。

上面的查詢語句 “select * from users;” 太簡(jiǎn)單,以至于看不出他是不是使用的 MapReduce 作業(yè)來執(zhí)行查詢的,下面我們把查詢語句稍微修改一下,就可以看出 Hive 會(huì)把 HQL 轉(zhuǎn)換成 MapReduce 作業(yè)來執(zhí)行了。

hive> select * from users order by id;
... (MapReduce Job output)
OK
1       user1   password1
2       user2   password2
3       user3   password3
4       user4   password4
5       user5   password5
6       user6   password6
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 簡(jiǎn)介 Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供類SQL查詢功...
    匆匆歲月閱讀 1,223評(píng)論 1 2
  • 【什么是大數(shù)據(jù)、大數(shù)據(jù)技術(shù)】 大數(shù)據(jù),又稱巨量資料,指的是所涉及的數(shù)據(jù)資料量規(guī)模巨大到無法在合理時(shí)間內(nèi)通過傳統(tǒng)的應(yīng)...
    kimibob閱讀 2,901評(píng)論 0 51
  • 一、初識(shí)Hive 1、Hive簡(jiǎn)介 ??? (1) 什么是Hive? Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉庫可以...
    oooon閱讀 2,698評(píng)論 0 1
  • 還是會(huì)想念,想他為什么會(huì)結(jié)婚。一個(gè)人走到了一定的時(shí)候,自然而然的遇見,不討厭,就會(huì)結(jié)婚。而且,你不曾給人家希望,你...
    安心忘勿閱讀 174評(píng)論 0 0
  • 今天很開心!
    lion_8e58閱讀 161評(píng)論 0 1

友情鏈接更多精彩內(nèi)容