Hive框架基礎(一)

* Hive框架基礎(一)

一句話:學習Hive有毛用刺啦?

那么解釋一下 毛用:

* 操作接口采用類SQL語法,提供快速開發(fā)的能力(不會Java也可以玩運算)

* 避免了去寫MapReduce,減少開發(fā)人員的學習成本(MapReduce運算寫斷手)

* 擴展功能很方便

* 數(shù)據(jù)庫不等同于數(shù)據(jù)倉庫

數(shù)據(jù)庫有很多,例如:mysql端辱、oracle、DB2圾浅、sqlserver掠手,但hive并不是數(shù)據(jù)庫。

Hive是FaceBook的開源項目狸捕,Hive是基于Hadoop的一個數(shù)據(jù)倉庫工具喷鸽,可以將結構化的數(shù)據(jù)文件,映射成一張表灸拍,并提供類似SQL查詢功能做祝, hive的HQL語言(類似SQL)可以將任務翻譯成Java語言并直接在MapReduce上運行,支持Yarn資源調度鸡岗。hive一般不會直接接入到業(yè)務中使用混槐,從某種意義上來講呢,相當于一個Hadoop的客戶端轩性,Hive在集群中并不需要每一臺服務器都安裝Hive声登。

** Hive的一些重要特性

* 本質:將HQL轉化成MapReduce任務

* 底層存儲使用HDFS

* 適合離線批量處理,延遲比較大(用于周期性的執(zhí)行分析)揣苏,不適合用于在線的需要實時分析結果的場景

* Hive體系結構

* 用戶接口: Client

* 終端命令行CLI --主要的一種使用方式悯嗓,JDBC的方式一般不使用,比較麻煩卸察。

* 元數(shù)據(jù):metastore

* 默認apache使用的是derby數(shù)據(jù)庫(只能有一個客戶端使用)脯厨,CDH使用postgreDB

* 元數(shù)據(jù)包括:表名、表所屬的數(shù)據(jù)庫(默認是default)坑质、表的擁有者合武、列/分區(qū)字段临梗、表的類型(是否是外部表),表的數(shù)據(jù)所在目錄等稼跳,并沒有存儲Hive表的真實數(shù)據(jù)

* 使用HDFS進行存儲

* 使用MapReduce進行計算

* 解析器: 解析Hql語句

* 編譯器: 把sql語句翻譯成MapReduce程序

* 優(yōu)化器: 優(yōu)化sql語句

* 執(zhí)行器: 在yarn平臺運行MapReduce程序

* Hive在Hadoop中的位置盟庞,如圖:

** Hive部署

* 安裝JDK(此步驟省略,請查看之前內容)

* 安裝Hadoop

此步驟要確保Hadoop可以正常使用岂贩,比如上傳文件茫经,運行jar任務等等

* 安裝Hive

Hive下載地址傳送門:鏈接:http://pan.baidu.com/s/1eSFuTWm 密碼:k5xo

安裝過程涉及命令:

$ tar -zxf apache-hive-0.13.1-bin.tar.gz -C /opt/modules/

進入Hive根目錄下的conf目錄,進行如下操作萎津,到這個階段應該無需解釋了吧?

$ cp -a hive-env.sh.template ?hive-env.sh抹镊,如圖:

$ cp -a hive-default.xml.template ?hive-site.xml锉屈,如圖:

* 修改hive-env.sh

JAVA_HOME=/opt/modules/jdk1.8.0_121

HADOOP_HOME=/opt/modules/hadoop-2.5.0

export HIVE_CONF_DIR=/opt/modules/apache-hive-0.13.1-bin/conf

如圖:

* 安裝mysql,依次涉及命令:

$ su - root

# yum -y install mysql mysql-server mysql-devel

# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

# rpm -ivh mysql-community-release-el7-5.noarch.rpm

# yum -y install mysql-community-server

* 成功安裝之后啟動mysql服務

# systemctl start ?mysqld.service垮耳,centOS7以下版本使用:# service mysqld start

注意颈渊,初次安裝mysql是root賬戶是沒有密碼的

* 設置密碼

方案一:

# mysqladmin -uroot password '123456'

方案二:

# mysql -uroot -p

mysql> update user set password=password("123456") where user='root';

mysql> flush privileges;

mysql> exit;

* 給用戶授權

# mysql -uroot -p

mysql>grant all on *.* to root@'z01' identified by '123456' ;

mysql> flush privileges;

mysql> exit;

注釋:

(grant 權限1,權限2,…權限n on 數(shù)據(jù)庫名稱.表名稱 to 用戶名@用戶地址 identified by ‘連接口令’;)

* mysql數(shù)據(jù)庫默認只允許root用戶通過localhost/127.0.0.1來登錄使用

* 上面帶有grant的那條語句中:

all:表示所有權限;

*.*:表示數(shù)據(jù)庫.數(shù)據(jù)表终佛;

root:表示授權給哪個用戶俊嗽,用戶名可以任意指定,如果沒有會自動創(chuàng)建铃彰;

'z01' :授權給哪臺主機

'123456':授權給用戶來登錄的密碼

(尖叫提示:如果你需要讓所有的分布式機器都有權限訪問mysql绍豁,在此例子中,還需要執(zhí)行grant all on *.* to root@'z02' identified by '123456' ;以及grant all on *.* to root@'z03' identified by '123456' ;留意@符號后邊的主機名)

* 配置hive-site.xml

打開之后牙捉,該文件中顯示的全部為默認的配置竹揍,其中如下4項做出相應修改:

* 安裝驅動包

涉及命令:

$ tar -zxf mysql-connector-java-5.1.27.tar.gz -C /opt/modules

$ cp mysql-connector-java-5.1.27-bin.jar /opt/modules/apache-hive-0.13.1-bin/lib/

操作如圖所示:

* 修改目錄權限

首先確保HDFS正常運行,之后涉及命令:

$ bin/hadoop fs -chmod g+w /tmp

$ bin/hadoop fs -chmod g+w /user/hive/warehouse

(注意:/tmp存放臨時文件邪铲;/user/hive/warehouse ?具體的Hive倉庫目錄)

沒有對應目錄芬位,則創(chuàng)建對應目錄


* 啟動Hive客戶端

$ bin/hive,如圖:

* 中場小結:hive带到、hadoop的關系昧碉、mysql三者之間的關系

* hive數(shù)據(jù)存儲在HDFS的/user/hive/warehouse目錄中,我們通過查看hive-site.xml中的hive.metastore.warehouse.dir屬性即可發(fā)現(xiàn)如圖:

* Hive基本操作

* 顯示所有數(shù)據(jù)庫

hive> show databases;

* 創(chuàng)建數(shù)據(jù)庫

語法:?

hive (default)> create database 數(shù)據(jù)庫名稱 ;

例如:

創(chuàng)建一個數(shù)據(jù)庫d1:

hive> create databases d1;

* 刪除數(shù)據(jù)庫

hive (default)> drop database 數(shù)據(jù)庫名稱 ;

* 進入d1數(shù)據(jù)庫

hive> use d1;

* 創(chuàng)建表

語法:

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name

[(col_name data_type? ...)]

[PARTITIONED BY (col_name data_type , ...)]

[ROW FORMAT row_format]

[LOCATION hdfs_path]

[AS select_statement];

例如:

在當前數(shù)據(jù)庫中創(chuàng)建表staff揽惹,其中包含字段:id被饿,name,sex

hive> create table staff(id int, name string, sex string) row format delimited fields terminated by '\t';

(注意:最后那一句英文表明數(shù)據(jù)字段之間用table制表符分割)

* 格式化輸出表staff的結構

hive> desc formatted staff;

如圖:

* 向表中插入數(shù)據(jù)

語法:

load data local inpath '文件路徑' [overwrite] into table 數(shù)據(jù)庫名.表名 ;

解釋:

** local 表示加載本地文件

** 文件加載模式:append 追加(默認使用)或?overwrite 覆蓋

** load data加載只是進行了簡單的位置轉移(如果load一個HDFS上的數(shù)據(jù)永丝,比如從HDFS中的一個位置移動到HDFS中的另一個位置锹漱,會發(fā)生數(shù)據(jù)轉移,轉移之后慕嚷,原來目錄的數(shù)據(jù)就沒有了哥牍,如果是從local到HDFS毕泌,則不會刪除原來的數(shù)據(jù)

** 加載數(shù)據(jù)過程中不會去判斷字段分隔符是否正確,只有在用戶查詢數(shù)據(jù)的時候,會發(fā)現(xiàn)錯誤

例如:

首先嗅辣,在hive的本地安裝目錄下撼泛,創(chuàng)建文件staff.txt,該文件內容如下:

接著澡谭,將本地文件中的數(shù)據(jù)導入到table中愿题,使用命令:

hive> load data local inpath 'staff.txt' into table staff;

最后查看導入后的效果

hive> select * from staff;

如圖:

* 修改Hive日志信息

** 重命名配置文件

$ mv hive-log4j.properties.template hive-log4j.properties

** 創(chuàng)建文件夾

$ mkdir logs

** 編輯hive-log4j.properties文件,并修改日志存儲目錄

hive.log.dir=/opt/modules/apache-hive-0.13.1-bin/logs

如圖:

* 設置hive在操作時是否顯示數(shù)據(jù)庫名稱和列名

如圖:

改為true即可

* Hive任務

hive任務有兩種:

走mapreduce:

hive (default)> select name from d1.staff;

如圖:

不走mapreduce:

hive (default)> select * from d1.staff;

如圖:

* Hive的調試

在調試Hive任務時蛙奖,一般會加入如下參數(shù):

$ bin/hive --hiveconf hive.root.logger=DEBUG,console

* mysql數(shù)據(jù)庫備份與還原

備份與還原的數(shù)據(jù)庫名稱均為:metastore潘酗,如圖:

** 備份:

$ mysqldump -uroot -p metastore > metastore.sql

如圖:

** 還原:

方案1:

$ mysql -uroot -p metastore < metastore.sql

如圖:

方案2:

$ mysql -uroot -p

mysql>? source /path/metastore.sql ;

* 拓展:mysql存儲中innodb和MYISAM區(qū)別

InnoDB和MyISAM是許多人在使用MySQL時最常用的兩個表類型,這兩個表類型各有優(yōu)劣雁仲,視具體應用而定仔夺。基本的差別為:MyISAM類型不支持事務處理等高級處理攒砖,而InnoDB類型支持缸兔。MyISAM類型的表強調的是性能,其執(zhí)行數(shù)度比InnoDB類型更快吹艇,但是不提供事務支持惰蜜,而InnoDB提供事務支持以及外部鍵等高級數(shù)據(jù)庫功能。

** innodb?

新版本5.5+中默認使用受神;

.frm 結構文件抛猖;

.ibdata1 數(shù)據(jù)文件;

** MYISAM

/var/lib/mysql路克;

.frm 結構文件樟结;

.MYI 索引文件;

.MYD 數(shù)據(jù)文件精算;

* Hive命令兩個重要參數(shù)

執(zhí)行sql語句:-e

$ bin/hive -e "select * from d1.staff"瓢宦,如圖:

執(zhí)行sql語句文件:-f

首先創(chuàng)建一個帶有sql語句的文件p1.hql,如圖:

$ bin/hive -f p1.hql灰羽,如圖:

* Hive 歷史命令的存放

存放位置:~/.hivehistory

查看該文件驮履,如圖:

* Hive中臨時設置配置并生效

例如:hive > set hive.cli.print.current.db=true;

(注意,此方式為臨時生效)

* 總結

本節(jié)主要講解如何配置并使用Hive廉嚼,并觀察hive任務在mapreduce中的運行以及結果的輸出玫镐。


個人微博:http://weibo.com/seal13

QQ大數(shù)據(jù)技術交流群(廣告勿入):476966007


下一節(jié):Hive框架基礎(二)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市怠噪,隨后出現(xiàn)的幾起案子恐似,更是在濱河造成了極大的恐慌,老刑警劉巖傍念,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矫夷,死亡現(xiàn)場離奇詭異葛闷,居然都是意外死亡,警方通過查閱死者的電腦和手機双藕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門淑趾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忧陪,你說我怎么就攤上這事扣泊。” “怎么了嘶摊?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵延蟹,是天一觀的道長。 經常有香客問我更卒,道長等孵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任蹂空,我火速辦了婚禮,結果婚禮上果录,老公的妹妹穿的比我還像新娘上枕。我一直安慰自己,他們只是感情好弱恒,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布辨萍。 她就那樣靜靜地躺著,像睡著了一般返弹。 火紅的嫁衣襯著肌膚如雪锈玉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天义起,我揣著相機與錄音拉背,去河邊找鬼。 笑死默终,一個胖子當著我的面吹牛椅棺,可吹牛的內容都是我干的。 我是一名探鬼主播齐蔽,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼两疚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了含滴?” 一聲冷哼從身側響起诱渤,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谈况,沒想到半個月后勺美,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體递胧,經...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年励烦,在試婚紗的時候發(fā)現(xiàn)自己被綠了谓着。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡坛掠,死狀恐怖赊锚,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情屉栓,我是刑警寧澤舷蒲,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站友多,受9級特大地震影響牲平,放射性物質發(fā)生泄漏。R本人自食惡果不足惜域滥,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一纵柿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧启绰,春花似錦昂儒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至着倾,卻和暖如春拾酝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卡者。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工蒿囤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人虎眨。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓蟋软,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嗽桩。 傳聞我的和親對象是個殘疾皇子岳守,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內容