Hive 概述 體系架構及環境搭建


一、Hive 概述及體系架構

1.Hive 是什么

(1).由Facebook開源,最初用於解決海量結構化的日志數據統計問題
(2).是一個構建在Hadoop之上的數據倉庫
(3).Hive定義了一種類似於SQL查詢語言:HQL(非常類似於MySQL中的SQL語句,同時做了擴展)
(4).通常用於離線數據處理(采用MapReduce)
(5).可以認為是一個HQL=>MapReduce的語言翻譯器
(6).底層支持多種不同的執行引擎(默認是MapReduce)
(7).支持不同的壓縮格式、存儲格式以及自定義函數
(8).Hive中的數據庫及表就是HDFS中的目錄/文件夾,數據是文件,元數據信息可以存儲在任意的一個關系型數據庫中(比如:MySQL、SqlServer、Oracle等,默認是Derby),數據存儲在HDFS中

2.Hive 的體系架構

這里寫圖片描述

上圖為Hive的體系架構圖,主要由如下幾部分組成

用戶接口:Client
Cli(Command-line shell),及shell 命令行,hive1的客戶端,hive server2 提供了新的命令beeline
JDBC/ODBC,通過Java來訪問hive,與傳統數據庫JDBC的方式類型,比如我們使用Java通過JDBC訪問操作MySQL
WebUI,瀏覽器中訪問hive

元數據:metastore
Hive 將元數據存儲在數據庫中(metastore),數據庫可以為關系型數據庫中的任意一種,元數據包括:表名、表所屬數據庫、表的擁有者、列/分區字段、表的類型、表數據所在目錄。

驅動器:driver
包含:解析器、編譯器、優化器、執行器
完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計划(plan)的生成,生成的查詢計划存儲在 HDFS 中,並在隨后有 MapReduce 調用執行

Hadoop
使用hdfs進行數據存儲,運行在yarn上,使用mapreduce進行計算

3.Hive 部署架構

1.測試環境

這里寫圖片描述

Hive 是構建在Hadoop之上的一個數據倉庫,實際工作中,我們的Hadoop是肯定是集群,但Hive我們只需要裝在一台服務上即可,元數據默認存放在Derby中,Derby是一個單用戶,使用起來不是很方便,建議我們自己裝一個mysql數據庫,專門用於存放hive的元數據信息。

2.生產環境

這里寫圖片描述

生產環境中與測試環境不相同的之處就是mysql用的是主備,當一台mysql服務掛掉了,通過某種機制它會自動切換到另一台,其實這樣做的好處就是為了容錯,保證高可用,防止hive的元數據丟失

4.與關系型數據庫的區別

這里寫圖片描述

hive的優缺點
優點:
容易上手、易用,比用MapReduce編程簡單很多
數據離線處理,比如日志分析,海量數據結構化分析
底層基於hadoop,易於擴展,支持自定義函數UDF

缺點:
Hive執行延遲比較高,不適合實時查詢
Hive優勢在於處理大數據集,對於小數據集沒有優勢

二、環境搭建

Hive中的元數據默認存放在Derby中,Derby是單用戶的,使用起來不方便,我們使用MySQL來存儲Hive的元數據信息,元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。 由於Hive的元數據需要不斷的更新、修改,而HDFS系統中的文件是多讀少改的,這顯然不能將Hive的元數據存儲在HDFS中。

1.安裝mysql

直接使用yum -y install 命令安裝mysql是無法安裝mysql的高級版本, 需要先安裝帶有可用的mysql5系列社區版資源的rpm包,去mysql的官網下載即可

MySQL官網:https://dev.mysql.com/downloads/file/?id=470281
MySQL安裝教程官網:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/

這里寫圖片描述

下載完成后使用xshell上傳到linux,輸入如下命令安裝

$ sudo rpm -Uvh mysql57-community-release-el7-11.noarch.rpm

安裝完成后,查看mysql安裝版本列表

$ yum repolist all | grep mysql 

這里寫圖片描述

安裝mysql,只需要安裝mysql-community-server即可,yum會自動檢測安裝依賴包

$ sudo yum -y install mysql-community-server   

安裝完成后,啟動mysql

$ sudo systemctl start mysqld

mysql安裝完成后會有一個初始的密碼,輸入如下命令查看

$ sudo grep 'temporary password' /var/log/mysqld.log   

這里寫圖片描述

使用剛剛查看到的密碼登錄

$ mysql -uroot -p

這里寫圖片描述

修改密碼

注意,該版本的MySQL對用戶密碼安全性有所加強,所以設置的密碼必須包含至少一個數字、一個大寫字母、一個小寫字母和一個特殊符號的組合,密碼長度至少8個字符。

ALTER USER 'root'@'localhost' IDENTIFIED BY '輸入你的密碼';

修改完成后,輸入exit退出shell界面,使用新密碼登錄即可

2.安裝hive

從官網下載hive的安裝包,官網地址:http://apache.fayea.com/hive/

筆者下載版本為2.3.0,下載完成后上傳到linux,輸入如下命令解壓

$ tar -zvxf apache-hive-2.3.0-bin.tar.gz

配置hive-site.xml文件

進入hive的conf目錄下,拷貝文件hive-default.xml.template命名為hive-site.xml

$ cd /home/hadoop/hive
$ cp hive-default.xml.template hive-site.xml

這里寫圖片描述

創建hive的臨時目錄

$ mkdir tmp

hive-site.xml配置如下,更多請參考hive 官網

<configuration>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/home/hadoop/hive/tmp/hive</value>
</property>

<property>
<name>hive.downloaded.resources.dir</name>
<value>/home/hadoop/hive/tmp/${hive.session.id}_resources</value>
<description>hive下載資源的存儲目錄</description>
</property>

<property>
<name>hive.querylog.location</name>
<value>/home/hadoop/hive/tmp/hive</value>
<description>hive結構日志存儲目錄</description>
</property>

<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/home/hadoop/hive/tmp/hive/operation_logs</value>
<description>hive的操作日志目錄</description>
</property>

<property>
<name>hive.exec.scratchdir</name>
<value>/tmp/hive</value>
<description>hive用於存儲不同階段map/reduce的執行計划及存儲中間輸出結果的目錄</description>
</property>

<property>
<name>hive.scratch.dir.permission</name>
<value>700</value>
<description>hive訪問hadoop文件權限設置</description>
</property>

<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>P@ssw0rd</value>
<description>元數據存儲的數據庫的密碼</description>
</property>

<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>元數據存儲數據庫的用戶名</description>
</property>

<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive_metadata?createDatabaseIfNotExist=true&amp;characterEncoding=utf8</value>
<description>元數據存儲的數據庫的url</description>
</property>

<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>元數據存儲的數據庫的驅動</description>
</property>

<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
<description>開啟自動創建(生產環境中不推薦使用)</description>
</property>

<property>
<name>hive.metastore.schema.verification</name>
<value>false</value></description>
</property>

<!------------ 配置hive的事務 start ------------>
<property>
<name>hive.optimize.sort.dynamic.partition</name>
<value>false</value>
</property>
<property>
<name>hive.support.concurrency</name>
<value>true</value>
</property>
<property>
<name>hive.enforce.bucketing</name>
<value>true</value>
</property>
<property>
<name>hive.exec.dynamic.partition.mode</name>
<value>nonstrict</value>
</property>
<property>
<name>hive.txn.manager</name>
<value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
<name>hive.compactor.initiator.on</name>
<value>true</value>
</property>
<property>
<name>hive.compactor.worker.threads</name>
<value>1</value>
</property>
<property>
<name>hive.in.test</name>
<value>true</value>
</property>
<!------------ 配置hive的事務 end ------------>

<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>

注意:在啟動前需要將mysql的驅動包復制到hive安裝目錄的lib目錄下,否則在啟動時,會報如下錯誤

DatastoreDriverNotFoundException: The specified datastore
driver (“com.mysql.jdbc.Driver”) was not found in the CLASSPATH

筆者安裝的hive版本為2.3.0,既支持hive1,也支持hive2,hive1和2的啟動是不一樣的,分別如下

hive1
$ hive --service metastore # 第一次啟動時執行,以后會自動綁定
$ hive

hive2
$ hiveserver2
$ beeline -u jdbc:hive2://

啟動成功后登錄mysql,可以看到創建了一個數據庫hive_metadata(在hive-site.xml參數javax.jdo.option.ConnectionURL中配置)

這里寫圖片描述

查看數據庫hive_metadata

這里寫圖片描述

hive啟動成功后,查看hive的臨時目錄下會生成如下文件

$ cd /home/hadoop/hive/tmp/

這里寫圖片描述

輸入hive(hive1)進入客戶端,查看所有數據庫,默認的數據庫default

這里寫圖片描述


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com