數(shù)據(jù)倉庫和傳統(tǒng)數(shù)據(jù)庫的區(qū)別
數(shù)據(jù)倉庫是相對穩(wěn)定的,當(dāng)中的數(shù)據(jù)不會(huì)發(fā)生頻繁的變化,甚至不發(fā)生變化。很多情況下就只讀了。當(dāng)中存儲了大量的歷史數(shù)據(jù)。不斷增加。
數(shù)據(jù)庫只存儲某一時(shí)刻的狀態(tài)。不斷變化,不保留歷史數(shù)據(jù)。
Hive
Hive是構(gòu)建在Hadoop頂層的數(shù)據(jù)倉庫工具,因?yàn)镠adoop具有好的水平可擴(kuò)展性,所以Hive也具有好的水平可擴(kuò)展性。
Hive本身并不支持?jǐn)?shù)據(jù)存儲和數(shù)據(jù)處理,它相當(dāng)于給用戶提供了一種編程語言,讓用戶通過SQL語言去編寫它的分析需求。
Hive是架構(gòu)在底層的Hadoop核心組件基礎(chǔ)之上的,通過HDFS完成數(shù)據(jù)倉庫的存儲,通過MapReduce完成數(shù)據(jù)倉庫的分析。
Hive就是借助這兩個(gè)組件來完成數(shù)據(jù)的存儲和處理。這是和傳統(tǒng)數(shù)據(jù)倉庫的區(qū)別。
參考SQL語句,設(shè)計(jì)了新的語句HiveQL。用戶通過運(yùn)行HiveQL語句就可以運(yùn)行具體的MR任務(wù)來完成數(shù)據(jù)倉庫的分析。
Pig面向流式的處理語言,類似于SQL語句,Pig Latin腳本語言。它也是轉(zhuǎn)換成MR。
Pig相對于Hive是一個(gè)輕量級的分析工具,它比較適合做實(shí)時(shí)交互式分析。而不是做大規(guī)模海量數(shù)據(jù)的批處理。所以Pig主要用于數(shù)據(jù)倉庫的ETL環(huán)節(jié)。Hive主要用于數(shù)據(jù)倉庫海量數(shù)據(jù)的批處理分析。
Pig可以替代Hive完成ETL。
交互式實(shí)時(shí)查詢分析可以考慮使用HBase。
Hive分鐘級響應(yīng)。
Hive和Pig一般都是用于構(gòu)建報(bào)表中心,為企業(yè)提供各種報(bào)表服務(wù)。報(bào)表不需要實(shí)時(shí)。
Hive使用
首先將hive的bin包上傳到linux當(dāng)中。

使用如下命令解壓

解壓成功:

cd到解壓后的hive目錄:

bin/hive就可以啟動(dòng)hive的交互式窗口:

如果啟動(dòng)的時(shí)候遇到如下問題:
ls: cannot access /home/hadoop/spark-2.2.0-bin-hadoop2.6/lib/spark-assembly-*.jar: No such file or directory
參考:https://www.cnblogs.com/tijun/p/7598281.html
注意:Hive是建立在hadoop頂層上的,啟動(dòng)Hive之前一定要啟動(dòng)hadoop!否則啟動(dòng)不了Hive。
使用Hive自帶存儲元數(shù)據(jù)的數(shù)據(jù)庫derby有缺陷,在哪個(gè)路徑啟動(dòng)Hive,就會(huì)在哪個(gè)路徑下建立一個(gè)metastore_db。導(dǎo)致不同路徑下產(chǎn)生各自的元數(shù)據(jù),無法共享。工業(yè)界往往不采用這種方式。
推薦使用mysql存儲Hive元數(shù)據(jù)。
MySQL版本的Hive安裝
首先要有一個(gè)MySQL的數(shù)據(jù)庫:
yum在線安裝,使用如下命令:
yum install mysql mysql-server mysql-devel
離線安裝使用rpm包。
首次使用使用如下命令啟動(dòng):
初始化啟動(dòng)
/etc/init.d/mysqld start

再一次敲mysql命令進(jìn)入mysql

給mysql設(shè)置密碼,并立即生效:
flush privileges; 刷新權(quán)限
這里設(shè)置賬戶名
root密碼mysql
退出之后再一次進(jìn)入mysql,就可以使用用戶名密碼進(jìn)入了:

使用如下命令,可以遠(yuǎn)程訪問:
GRANT ALL PRIVILEGES ON *.* TO '用戶名'@'%' IDENTIFIED BY '密碼' WITH GRANT OPTION;

查看mysql啟動(dòng)情況:

設(shè)置每次開機(jī)啟動(dòng)mysql:

配置Hive
1. 配置HIVE_HOME環(huán)境變量
進(jìn)入到hive的conf目錄下修改hive-env.sh配置文件:

vi hive-env.sh:
修改這里:

修改為:

小技巧,使用which 定位hadoop 的路徑:

修改hive-env.sh文件之后保存退出。
2. 配置元數(shù)據(jù)庫信息
地址,賬號,密碼
和hadoop相同,如果不去配置會(huì)有默認(rèn)的配置:

vi hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mysql</value>
<description>password to use against metastore database</description>
</property>
</configuration>
放置mysql的連接驅(qū)動(dòng)。
cd lib

將mysql的驅(qū)動(dòng)放置在這個(gè)目錄下:

Hive的幾種啟動(dòng)方式(4種)
啟動(dòng)Hive之前一定要先啟動(dòng)Hadoop,因?yàn)镠ive是建立在Hadoop之上的。
-
Hive交互shell bin/hive
由于使用了mysql去存儲hive的元數(shù)據(jù),所以在不同的目錄下進(jìn)入hive都可以看到相同的元數(shù)據(jù)信息。
這里先是在hive的根目錄下運(yùn)行hive,創(chuàng)建數(shù)據(jù)庫,然后在hive/bin下啟動(dòng)hive,可以看到之前創(chuàng)建的數(shù)據(jù)庫還在。這是和hive自帶的derby不同的。
- Hive JDBC服務(wù)(參考java jdbc連接mysql)
-
hive啟動(dòng)為一個(gè)服務(wù)器,來對外提供服務(wù)
在bin目錄下有一個(gè)hiveserver2
啟動(dòng)之后不提示任何信息,光標(biāo)一直在閃爍:
這個(gè)時(shí)候node-1上就有了hive這個(gè)服務(wù)。
在node-3上遠(yuǎn)程連接:
先要在node-3上要有hive,使其具備hive命令:
bin路徑下有一個(gè)beeline,這是一個(gè)JDBC的客戶端。使用它就可以連接一個(gè)已經(jīng)遠(yuǎn)程啟動(dòng)的hive客戶端。

遠(yuǎn)程連接使用beeline協(xié)議。它有自己的格式。
! connect jdbc:hive2://node-1:10000

hive2和hiveserver2對應(yīng)。hive的端口號是10000。
這里輸入的是linux node-1的用戶名密碼。
連接成功,可以查看到node-1上邊Hive的信息。
而且這里顯示的結(jié)果有了一個(gè)格式化的美觀展示。
這里也顯示出了使用mysql存儲hive元數(shù)據(jù)的好處,不管是在node-2還是node-3等哪個(gè)客戶端遠(yuǎn)程訪問node-1的hive,都會(huì)得到相同的結(jié)果。
這是Hive最常用的方式。
- Hive命令
hive -e ‘sql’
bin/hive -e 'select * from t_test'
-e 表示后邊是一條語句,這個(gè)只能執(zhí)行一次,執(zhí)行結(jié)束后就會(huì)退出Hive,回到linux。
總結(jié):最常用的是1,3兩種方式,1適合自己測試,3企業(yè)中最常用。






