什么是Hive:
Hive是基于Hadoop之上的數(shù)據(jù)倉庫,數(shù)據(jù)存放在HDFS上,它同樣可以通過ETL來進(jìn)行數(shù)據(jù)的抽取、轉(zhuǎn)換和加載。同時(shí)Hive可以自己開發(fā)Mapreduce程序來完成本身不能提供的數(shù)據(jù)處理操作。Hive本身就是一個(gè)SQL的解析引擎,他將SQL 語句轉(zhuǎn)成Mapreduce任務(wù)在hadoop之上執(zhí)行。
什么是數(shù)據(jù)倉庫:
數(shù)據(jù)倉庫是一個(gè)面向主題的,集成的,不可更新的,隨時(shí)間不變化的數(shù)據(jù)集合,它用于支持企業(yè)或組織的決策分析處理。
針對(duì)數(shù)據(jù)倉庫的概念的解釋:首先數(shù)據(jù)倉庫中的數(shù)據(jù)是面向主題的,也就是這些數(shù)據(jù)的都是為了描述同一類事情,同時(shí)它的數(shù)據(jù)主要用于查詢操作,不會(huì)對(duì)數(shù)據(jù)倉庫中的數(shù)據(jù)進(jìn)行刪除和更新操作。
OLTP: 聯(lián)機(jī)事務(wù)處理(面向的是事務(wù),需要實(shí)時(shí)的更新操作,銀行轉(zhuǎn)賬) OLAP: 聯(lián)機(jī)分析處理(面向歷史數(shù)據(jù),進(jìn)行數(shù)據(jù)的分析與挖掘,主要面向查詢,不會(huì)做更新和插入數(shù)據(jù),推薦系統(tǒng))
注意:
在搭建數(shù)據(jù)倉庫的過程最常用的兩種模型就是:星型模型和雪花模型,雪花模型是在星型模型上發(fā)展出來的。什么是星型模型,比如一個(gè)商品的推薦系統(tǒng),主題應(yīng)該是商品,但是圍繞商品的有客戶信息、廠家信息、促銷信息等很多信息,這樣就組成了一個(gè)星型模型。但是客戶信息中也存在客戶的家庭的信息、地址信息等。這樣再關(guān)聯(lián)的話就是一個(gè)雪花模型了。
Hive的體系結(jié)構(gòu):
Hive將元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中(metastore),這個(gè)數(shù)據(jù)庫支持mysql、derby等數(shù)據(jù)庫中。Hive默認(rèn)是存儲(chǔ)在derby數(shù)據(jù)庫中。 Hive的元數(shù)據(jù)有哪些? 包括表的名字、表的列和分區(qū)及其屬性,表的屬性包括是否為外部表等,表的數(shù)據(jù)所在目錄等。 首先Hive是基于Hadoop的,所以hive的數(shù)據(jù)會(huì)使用HDFS進(jìn)行保存,同時(shí)hive的查詢操作也是轉(zhuǎn)化成hadoop的MapReduce操作,所以在hive中會(huì)存在一個(gè)Hive Driver:包括編譯器、解析器和優(yōu)化器。 在Hive的驅(qū)動(dòng)之前有訪問接口、jdbc以及WebConsole等方式進(jìn)行操作。當(dāng)然hive的元信息是存放在關(guān)系型數(shù)據(jù)庫中的。 HQL的執(zhí)行過程: 解釋器、編譯器、優(yōu)化器完成HQL查詢語句從詞法分析、語法分析、編譯、優(yōu)化以及查詢計(jì)劃的生成。生成的查詢計(jì)劃存儲(chǔ)在HDFS中,并在隨后的Mapreduce調(diào)用執(zhí)行。
Hive的安裝:
Hive的官網(wǎng)地址: hive.apache.org apache 的歷史工程發(fā)布頁面在: archive.apache.org,在這個(gè)頁面下可以找到hive工程。這里使用的是0.13版本。
Hive的安裝之前需要先將hadoop安裝好,hive有三種安裝方式:嵌入模式、本地模式、遠(yuǎn)程模式。
嵌入模式:Hive將元信息存儲(chǔ)在Hive自帶的Derby數(shù)據(jù)庫中。但是這種操作方式存在一些缺陷: 1. 只允許創(chuàng)建一個(gè)連接,也就是只允許一個(gè)用戶操作hive 2. 多用于Demo
在安裝hive之前需要先安裝hadoop,然后把hive的壓縮包解壓,在bin目錄下執(zhí)行./hive進(jìn)入hive的啟動(dòng)腳本,這種方式就是使用的嵌入式模式啟動(dòng)hive,會(huì)在當(dāng)前目錄下生成一個(gè)metastore_db的目錄,這個(gè)就是元信息目錄。
本地模式:Hive將元信息存儲(chǔ)在mysql數(shù)據(jù)庫中,mysql數(shù)據(jù)庫與hive運(yùn)行在同一臺(tái)物理機(jī)上。這種方式可以允許多個(gè)用戶操作hive,可以用于開發(fā)和測(cè)試。
遠(yuǎn)程模式:(推薦使用這種方式)hive將元信息存儲(chǔ)在mysql數(shù)據(jù)庫中,mysql數(shù)據(jù)庫與hive運(yùn)行在不同的物理機(jī)上。
元信息存儲(chǔ)在遠(yuǎn)程的mysql中。進(jìn)入遠(yuǎn)程mysql中,mysql -u … -p … , 進(jìn)入后使用create database hive創(chuàng)建一個(gè)hive數(shù)據(jù)庫來保存元數(shù)據(jù)。 在hive解壓后,把mysql的驅(qū)動(dòng)jar包上傳到hive的lib目錄中。這樣hive才能操作mysql數(shù)據(jù)庫。然后需要更改hive的配置文件。在conf中創(chuàng)建一個(gè)hive-site.xml文件,文件的內(nèi)容如下:
當(dāng)配置文件設(shè)置完后以后,就可以啟動(dòng)hive了。
Hive的管理
使用hive的腳本直接進(jìn)入hive,或者 hive –service cli
cli常用的命令:
Web界面方式:
啟動(dòng)方式: #hive –service hwi & 在0.13.0中并沒有包含web管理的war包,需要自己編譯。
下載hive源碼包,并且解壓源碼包,然后進(jìn)入源碼路徑下的hwi目錄,使用:jar cvfM0 hive-hwi-0.13.0.war -C web/ . 這樣就會(huì)打成一個(gè)war包,把這個(gè)war包拷貝到hive的lib目錄下,同時(shí)需要修改hive-site.xml 配置文件,這個(gè)修改可以在wiki上看到。
這個(gè)就可以使用hive –service hwi啟動(dòng)web服務(wù)了,但是在訪問這個(gè)web應(yīng)用的時(shí)候,瀏覽器還是報(bào)出了500的錯(cuò)誤。這個(gè)問題需要拷貝jdk的tools.jar 拷貝到hive的lib目錄下。
這個(gè)時(shí)候就可以打開這個(gè)web界面了。
hive的遠(yuǎn)程服務(wù)
啟動(dòng)hive的遠(yuǎn)程服務(wù)的命令如下: hive –service hiveserver & 如果要使用jdbc連接hive進(jìn)行操作,這個(gè)時(shí)候就需要開啟hive的遠(yuǎn)程服務(wù)。
Hive的數(shù)據(jù)類型
基本數(shù)據(jù)類型: tinyint/smallint/int/bigint 整數(shù)類型 float/double 浮點(diǎn)類型 boolean 布爾類型 string/varchar/char 字符串類型
復(fù)雜數(shù)據(jù)類型: array:數(shù)組類型,由一系列相同的數(shù)據(jù)類型的元素組成 map:集合類型,包含key->value鍵值對(duì),可以通過key來訪問元素。 struct:結(jié)構(gòu)類型,可以包含不同數(shù)據(jù)類型的元素,這些元素可以通 過“點(diǎn)語法”的方式來得到所需要的元素。
Hive的數(shù)據(jù)存儲(chǔ)
基于HDFS,沒有專門的數(shù)據(jù)存儲(chǔ)格式 Hive的數(shù)據(jù)模型:
表可以分成以下幾種:
創(chuàng)建這張表的時(shí)候就是以gender進(jìn)行分區(qū) 分區(qū)表能夠加快查詢效率