HIVE 基本概念
在真實(shí)生產(chǎn)中,數(shù)據(jù)處理的需求量非常多每篷,如果對(duì)每個(gè)需求都需要開(kāi)發(fā)一個(gè)mapreduce程序來(lái)實(shí)現(xiàn)喜每,則開(kāi)發(fā)的成本代價(jià)太高,開(kāi)發(fā)的周期很長(zhǎng)雳攘;
所以带兜,急需要一種工具,能夠快速生成mapreduce程序吨灭,則可以極大地降低開(kāi)發(fā)成本刚照,降低對(duì)開(kāi)發(fā)人員的技術(shù)難度要求,極大縮減項(xiàng)目開(kāi)發(fā)周期喧兄;
HIVE就是這么一個(gè)神器N夼稀!吠冤!
它可以讓你把你的數(shù)據(jù)文件 “映射”成一個(gè)表浑彰,然后還可以讓你輸入SQL指令,它就能將你的SQL指令解析后生成mapreduce程序進(jìn)行邏輯運(yùn)算拯辙;
HIVE: 就是一個(gè)利用HDFS存儲(chǔ)數(shù)據(jù)郭变,利用mapreduce運(yùn)算數(shù)據(jù)的數(shù)據(jù)倉(cāng)庫(kù)工具
安裝
- 上傳安裝包
wget http://oss.jetbrains.org.cn/apache-hive-1.2.1-bin.tar.gz
- 解壓
tar -zxvf apache-hive-1.2.1-bin.tar.gz
啟動(dòng)方式
- 用bin/hive 啟動(dòng)一個(gè)交互式查詢軟件來(lái)使用
- 用bin/hiveserver2 啟動(dòng)一個(gè)hive的服務(wù)端軟件來(lái)接收查詢請(qǐng)求
HIVE的建庫(kù)
CREATE DATABASE db_name;
建庫(kù)的實(shí)質(zhì):
- HIVE 會(huì)記住關(guān)于庫(kù)定義的信息(庫(kù)名叫什么)
- HIVE會(huì)在HDFS上創(chuàng)建一個(gè)庫(kù)目錄:/user/hive/warehouse/db_name
HIVE的建表
-
內(nèi)部表建表語(yǔ)句
CREATE TABLE t_name(filed1 type,field2 type,field3 type)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’ ;建表的實(shí)質(zhì):
- HIVE 會(huì)記住關(guān)于表定義的信息(表名叫什么、有哪些字段涯保、數(shù)據(jù)文件的分隔符诉濒?)
- HIVE會(huì)在HDFS上創(chuàng)建一個(gè)表數(shù)據(jù)文件存儲(chǔ)目錄:/user/hive/warehouse/db_name/t_name
外部表建表語(yǔ)句
CREATE EXTERNAL TABLE t_name(filed1 type,field2 type,field3 type)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’
LOCATION ‘/aa/bb/’ ; (這里的地址都是hdfs中的地址,不是宿主機(jī)的)
注意:當(dāng)drop一個(gè)內(nèi)部表時(shí)夕春,hive會(huì)清楚這個(gè)表的元數(shù)據(jù)未荒,并刪除這個(gè)表的數(shù)據(jù)目錄;
當(dāng)drop一個(gè)外部表時(shí)及志,hive會(huì)清除這個(gè)表的元數(shù)據(jù)片排,但不會(huì)刪它的數(shù)據(jù)目錄寨腔;
通常,外部表用于映射最開(kāi)始的數(shù)據(jù)文件(一般是由別的系統(tǒng)所生成的)
- 分區(qū)表建表語(yǔ)句
分區(qū)表:會(huì)在表數(shù)據(jù)存儲(chǔ)目錄中率寡,允許有子目錄(分區(qū))
CREATE TABLE t_access(ip string,url string)
PARTITIONED BY (day string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’;
建表時(shí)脆侮,只是指定這個(gè)表可以按day變量的具體值建子目錄;所以建表時(shí)勇劣,不會(huì)生成子目錄;
導(dǎo)入數(shù)據(jù)到該表時(shí)潭枣,就需要指定一個(gè)具體的day變量的值比默,hive就會(huì)用這個(gè)值建一個(gè)子目錄,并將數(shù)據(jù)文件放入該子目錄盆犁;
導(dǎo)入數(shù)據(jù)語(yǔ)句:
- LOAD DATA LOCAL INPATH ‘/root/access.1’ INTO TABLE t_access PARTITION(day=’2017-11-25’);
- LOAD DATA LOCAL INPATH ‘/root/access.2’ INTO TABLE t_access PARTITION(day=’2017-11-26’);
Hive的特點(diǎn)
可擴(kuò)展
Hive可以自由的擴(kuò)展集群的規(guī)模命咐,一般情況下不需要重啟服務(wù)。延展性
Hive支持用戶自定義函數(shù)谐岁,用戶可以根據(jù)自己的需求來(lái)實(shí)現(xiàn)自己的函數(shù)醋奠。容錯(cuò)
良好的容錯(cuò)性,節(jié)點(diǎn)出現(xiàn)問(wèn)題SQL仍可完成執(zhí)行伊佃。
數(shù)據(jù)導(dǎo)入導(dǎo)出
方式1:導(dǎo)入數(shù)據(jù)的一種方式:
手動(dòng)用hdfs命令窜司,將文件放入表目錄;
方式2:在hive的交互式shell中用hive命令來(lái)導(dǎo)入本地?cái)?shù)據(jù)到表目錄
hive>load data local inpath '/root/order.data.2' into table t_order;
方式3:用hive命令導(dǎo)入hdfs中的數(shù)據(jù)文件到表目錄
hive>load data inpath '/access.log.2017-08-06.log' into table t_access partition(dt='20170806');
其他
hive 的其他sql 語(yǔ)法 與 常用關(guān)系型數(shù)據(jù)庫(kù)航揉,如mysql塞祈,oracle等語(yǔ)法類似,這里不做細(xì)致說(shuō)明帅涂。议薪。