什么是Hive:
Hive是基于Hadoop之上的數(shù)據(jù)倉庫挠轴,數(shù)據(jù)存放在HDFS上,它同樣可以通過ETL來進行數(shù)據(jù)的抽取、轉(zhuǎn)換和加載弟断。同時Hive可以自己開發(fā)Mapreduce程序來完成本身不能提供的數(shù)據(jù)處理操作洒敏。Hive本身就是一個SQL的解析引擎龄恋,他將SQL 語句轉(zhuǎn)成Mapreduce任務(wù)在hadoop之上執(zhí)行。
什么是數(shù)據(jù)倉庫:
數(shù)據(jù)倉庫是一個面向主題的凶伙,集成的郭毕,不可更新的,隨時間不變化的數(shù)據(jù)集合函荣,它用于支持企業(yè)或組織的決策分析處理显押。
針對數(shù)據(jù)倉庫的概念的解釋:首先數(shù)據(jù)倉庫中的數(shù)據(jù)是面向主題的扳肛,也就是這些數(shù)據(jù)的都是為了描述同一類事情,同時它的數(shù)據(jù)主要用于查詢操作乘碑,不會對數(shù)據(jù)倉庫中的數(shù)據(jù)進行刪除和更新操作挖息。
OLTP: 聯(lián)機事務(wù)處理(面向的是事務(wù),需要實時的更新操作兽肤,銀行轉(zhuǎn)賬) OLAP: 聯(lián)機分析處理(面向歷史數(shù)據(jù)套腹,進行數(shù)據(jù)的分析與挖掘,主要面向查詢资铡,不會做更新和插入數(shù)據(jù)电禀,推薦系統(tǒng))
注意:
在搭建數(shù)據(jù)倉庫的過程最常用的兩種模型就是:星型模型和雪花模型,雪花模型是在星型模型上發(fā)展出來的笤休。什么是星型模型尖飞,比如一個商品的推薦系統(tǒng),主題應(yīng)該是商品店雅,但是圍繞商品的有客戶信息政基、廠家信息、促銷信息等很多信息底洗,這樣就組成了一個星型模型腋么。但是客戶信息中也存在客戶的家庭的信息、地址信息等亥揖。這樣再關(guān)聯(lián)的話就是一個雪花模型了珊擂。
Hive的體系結(jié)構(gòu):
Hive將元數(shù)據(jù)存儲在數(shù)據(jù)庫中(metastore),這個數(shù)據(jù)庫支持mysql费变、derby等數(shù)據(jù)庫中摧扇。Hive默認是存儲在derby數(shù)據(jù)庫中。 Hive的元數(shù)據(jù)有哪些挚歧? 包括表的名字扛稽、表的列和分區(qū)及其屬性,表的屬性包括是否為外部表等滑负,表的數(shù)據(jù)所在目錄等在张。 首先Hive是基于Hadoop的,所以hive的數(shù)據(jù)會使用HDFS進行保存矮慕,同時hive的查詢操作也是轉(zhuǎn)化成hadoop的MapReduce操作帮匾,所以在hive中會存在一個Hive Driver:包括編譯器、解析器和優(yōu)化器痴鳄。 在Hive的驅(qū)動之前有訪問接口瘟斜、jdbc以及WebConsole等方式進行操作。當然hive的元信息是存放在關(guān)系型數(shù)據(jù)庫中的。 HQL的執(zhí)行過程: 解釋器螺句、編譯器虽惭、優(yōu)化器完成HQL查詢語句從詞法分析、語法分析蛇尚、編譯芽唇、優(yōu)化以及查詢計劃的生成。生成的查詢計劃存儲在HDFS中佣蓉,并在隨后的Mapreduce調(diào)用執(zhí)行披摄。
Hive的安裝:
Hive的官網(wǎng)地址: hive.apache.org apache 的歷史工程發(fā)布頁面在: archive.apache.org,在這個頁面下可以找到hive工程勇凭。這里使用的是0.13版本疚膊。
Hive的安裝之前需要先將hadoop安裝好,hive有三種安裝方式:嵌入模式虾标、本地模式寓盗、遠程模式。
嵌入模式:Hive將元信息存儲在Hive自帶的Derby數(shù)據(jù)庫中璧函。但是這種操作方式存在一些缺陷: 1. 只允許創(chuàng)建一個連接傀蚌,也就是只允許一個用戶操作hive 2. 多用于Demo
在安裝hive之前需要先安裝hadoop,然后把hive的壓縮包解壓蘸吓,在bin目錄下執(zhí)行./hive進入hive的啟動腳本善炫,這種方式就是使用的嵌入式模式啟動hive,會在當前目錄下生成一個metastore_db的目錄库继,這個就是元信息目錄箩艺。
本地模式:Hive將元信息存儲在mysql數(shù)據(jù)庫中,mysql數(shù)據(jù)庫與hive運行在同一臺物理機上宪萄。這種方式可以允許多個用戶操作hive艺谆,可以用于開發(fā)和測試。
遠程模式:(推薦使用這種方式)hive將元信息存儲在mysql數(shù)據(jù)庫中拜英,mysql數(shù)據(jù)庫與hive運行在不同的物理機上静汤。
元信息存儲在遠程的mysql中。進入遠程mysql中居凶,mysql -u … -p … , 進入后使用create database hive創(chuàng)建一個hive數(shù)據(jù)庫來保存元數(shù)據(jù)虫给。 在hive解壓后,把mysql的驅(qū)動jar包上傳到hive的lib目錄中侠碧。這樣hive才能操作mysql數(shù)據(jù)庫狰右。然后需要更改hive的配置文件。在conf中創(chuàng)建一個hive-site.xml文件舆床,文件的內(nèi)容如下:
當配置文件設(shè)置完后以后,就可以啟動hive了。
Hive的管理
使用hive的腳本直接進入hive挨队,或者 hive –service cli
cli常用的命令:
Web界面方式:
啟動方式: #hive –service hwi & 在0.13.0中并沒有包含web管理的war包谷暮,需要自己編譯。
下載hive源碼包盛垦,并且解壓源碼包湿弦,然后進入源碼路徑下的hwi目錄,使用:jar cvfM0 hive-hwi-0.13.0.war -C web/ . 這樣就會打成一個war包腾夯,把這個war包拷貝到hive的lib目錄下颊埃,同時需要修改hive-site.xml 配置文件,這個修改可以在wiki上看到蝶俱。
這個就可以使用hive –service hwi啟動web服務(wù)了班利,但是在訪問這個web應(yīng)用的時候,瀏覽器還是報出了500的錯誤榨呆。這個問題需要拷貝jdk的tools.jar 拷貝到hive的lib目錄下罗标。
這個時候就可以打開這個web界面了。
hive的遠程服務(wù)
啟動hive的遠程服務(wù)的命令如下: hive –service hiveserver & 如果要使用jdbc連接hive進行操作积蜻,這個時候就需要開啟hive的遠程服務(wù)闯割。
Hive的數(shù)據(jù)類型
基本數(shù)據(jù)類型: tinyint/smallint/int/bigint 整數(shù)類型 float/double 浮點類型 boolean 布爾類型 string/varchar/char 字符串類型
復(fù)雜數(shù)據(jù)類型: array:數(shù)組類型,由一系列相同的數(shù)據(jù)類型的元素組成 map:集合類型竿拆,包含key->value鍵值對宙拉,可以通過key來訪問元素。 struct:結(jié)構(gòu)類型丙笋,可以包含不同數(shù)據(jù)類型的元素谢澈,這些元素可以通 過“點語法”的方式來得到所需要的元素。
Hive的數(shù)據(jù)存儲
基于HDFS不见,沒有專門的數(shù)據(jù)存儲格式 Hive的數(shù)據(jù)模型:
表可以分成以下幾種:
創(chuàng)建這張表的時候就是以gender進行分區(qū) 分區(qū)表能夠加快查詢效率