Hive

數(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之上的。

  1. 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不同的。


  2. Hive JDBC服務(wù)(參考java jdbc連接mysql)
  3. 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最常用的方式。

  1. 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è)中最常用。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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