Hive學(xué)習(xí)筆記1

第一部分

什么是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等方式進行操作掏缎。當(dāng)然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要销,會在當(dāng)前目錄下生成一個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)容如下:

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://ip:3306/hive</value>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>root</value>
    </property>
</configuration>

當(dāng)配置文件設(shè)置完后以后谢谦,就可以啟動hive了释牺。


第四部分

Hive的管理

使用hive的腳本直接進入hive,或者 hive –service cli

cli常用的命令:

  1. 清屏:ctrl + l 或者 !clear;
  2. 查看數(shù)據(jù)倉庫中的表: show tables;
  3. 查看數(shù)據(jù)倉庫中的函數(shù):show functions;
  4. 查看表結(jié)構(gòu): desc 表名他宛;
  5. 查看hdfs上的文件列表: dfs -ls /user 查看hadoop上/user上的文件
  6. 執(zhí)行l(wèi)inux命令: !命令
  7. 執(zhí)行HQL語句:select * from test;當(dāng)執(zhí)行這個語句的時候是不會開啟一個MapReduce任務(wù)的船侧,因為這個是獲取全部的數(shù)據(jù),獲取全部的數(shù)據(jù)只需要把所有的數(shù)據(jù)讀取出來就可以了厅各,并不需要啟動一個任務(wù)镜撩。但是在執(zhí)行select name from test;查詢某一個字段的信息的時候就需要啟動一個MapReduce任務(wù)了。
  8. 可以執(zhí)行一個sql腳本:source /root/test.sql 這個語句就是啟動一個執(zhí)行sql腳本。這種方式就是和mysql執(zhí)行外部的信息一樣袁梗。
  9. hive -S 進入hive啟動任務(wù)不會產(chǎn)生調(diào)試信息宜鸯,直接產(chǎn)生MapReduce的結(jié)果。
  10. hive -e 執(zhí)行sql語句遮怜。hive -e ‘show tables’;這樣的執(zhí)行就直接在linux的命令行操作就行淋袖,并不需要進入hive的交互式中執(zhí)行。

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上看到。

<property>
  <name>hive.hwi.listen.host</name>
  <value>0.0.0.0</value>
  <description>This is the host address the Hive Web Interface will listen on</description>
</property>
 
<property>
  <name>hive.hwi.listen.port</name>
  <value>9999</value>
  <description>This is the port the Hive Web Interface will listen on</description>
</property>
 
<property>
  <name>hive.hwi.war.file</name>
  <value>lib/hive-hwi-0.13.0.war</value>
  <description>This is the WAR file with the jsp content for Hive Web Interface</description>
</property>

這個就可以使用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ù)類型的元素峦阁,這些元素可以通 過“點語法”的方式來得到所需要的元素谦铃。

create table student (
age int,
name string,
grade array<float>);

插入的時候就是: {1, wangmin, [10,20,30]};

create table student1 (
sid int,
sname string,
grade map<string, float>);

插入數(shù)據(jù)的時候: {1,wangmin,<'大學(xué)語文', 85>}

create table studnet3(
sid int,
sname string,
grades array<map<string, float>>);

插入數(shù)據(jù)的時候:{1, wangmin, [<'大學(xué)語文‘, 12>,<'大學(xué)英語’榔昔,23>]}

create table student4(
sid int,
info struct<nname:string, age:int, sex:string>);

插入數(shù)據(jù)的時候:{1, {'wangmin', 23, ‘男’}}
  • 時間類型:
    Date: 日期(年月日)
    Timestamp: 是unix的一個時間偏移量
    select unix_timestamp(); 查看系統(tǒng)的時間偏移量

第六部分

Hive的數(shù)據(jù)存儲

基于HDFS驹闰,沒有專門的數(shù)據(jù)存儲格式
Hive的數(shù)據(jù)模型:

表可以分成以下幾種:

  • Table 內(nèi)部表
  • Partition 分區(qū)表
  • External Table 外部表
  • Bucket Table 桶表
create table t1
(tid int, tname string, age int);

create table t2
(tid int, tname string age int);
localtion '/mytable/hive/t2';

create table t3
(tid int, tname string, age int)
row format delimited fields terminated by ',';

create table t4
as
select * from sample_date;

create table t5
row format delimited fields terminated by ','
as
select * from sample_data;

分區(qū)表:

create table partition_table
(sid int, sname string)
partitioned by (gender string)
row format delimited fields terminated by ',';

創(chuàng)建這張表的時候就是以gender進行分區(qū) 分區(qū)表能夠加快查詢效率

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市撒会,隨后出現(xiàn)的幾起案子嘹朗,更是在濱河造成了極大的恐慌,老刑警劉巖诵肛,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屹培,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機褪秀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門蓄诽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人媒吗,你說我怎么就攤上這事仑氛。” “怎么了闸英?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵锯岖,是天一觀的道長。 經(jīng)常有香客問我自阱,道長嚎莉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任沛豌,我火速辦了婚禮,結(jié)果婚禮上赃额,老公的妹妹穿的比我還像新娘加派。我一直安慰自己,他們只是感情好跳芳,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布芍锦。 她就那樣靜靜地躺著,像睡著了一般飞盆。 火紅的嫁衣襯著肌膚如雪娄琉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天吓歇,我揣著相機與錄音孽水,去河邊找鬼。 笑死城看,一個胖子當(dāng)著我的面吹牛女气,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播测柠,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼炼鞠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了轰胁?” 一聲冷哼從身側(cè)響起谒主,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赃阀,沒想到半個月后霎肯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年姿现,在試婚紗的時候發(fā)現(xiàn)自己被綠了肠仪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡备典,死狀恐怖异旧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情提佣,我是刑警寧澤吮蛹,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站拌屏,受9級特大地震影響潮针,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜倚喂,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一每篷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧端圈,春花似錦焦读、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宴倍,卻和暖如春张症,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸵贬。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工俗他, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恭理。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓拯辙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親颜价。 傳聞我的和親對象是個殘疾皇子涯保,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容