您好,登錄后才能下訂單哦!
小編給大家分享一下HIVE從入門(mén)到精通的示例分,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
1背景
應(yīng)用于工業(yè)的商務(wù)智能收集分析所需的數(shù)據(jù)集正在大量增長(zhǎng),使得傳統(tǒng)的數(shù)據(jù)倉(cāng)庫(kù)解決方案變得過(guò)于昂貴。Hadoop是一個(gè)流行的開(kāi)源map-reduce實(shí)現(xiàn),用于像yahoo, Facebook一類(lèi)的公司。來(lái)存儲(chǔ)和處理商用硬件上的大范圍數(shù)據(jù)集。然而map-reduce程序模型還是處于很低級(jí)別,即需要開(kāi)發(fā)者來(lái)書(shū)寫(xiě)客戶(hù)程序,這些程序往往難于維護(hù)與重用。
用hbase做數(shù)據(jù)庫(kù),但由于hbase沒(méi)有類(lèi)sql查詢(xún)方式,所以操作和計(jì)算數(shù)據(jù)非常不方便,于是整合hive,讓hive支撐在hbase數(shù)據(jù)庫(kù)層面的hql查詢(xún)。hive也叫做數(shù)據(jù)倉(cāng)庫(kù)。
2定義
Hive是基于Hadoop(HDFS, MapReduce)的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供類(lèi)SQL查詢(xún)功能。
本質(zhì)是將SQL轉(zhuǎn)換為MapReduce程序。
3體系結(jié)構(gòu)
Hive本身建立在Hadoop的體系結(jié)構(gòu)上,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供完整的sql查詢(xún)功能,可以將sql語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行。并按照該計(jì)劃生成MapReduce任務(wù)后交給Hadoop集群處理,Hive的體系結(jié)構(gòu)如圖1-1所示:
圖1-1 Hive的體系結(jié)構(gòu)
4Hive的數(shù)據(jù)存儲(chǔ)
Hive的存儲(chǔ)是建立在Hadoop文件系統(tǒng)之上的。Hive本身沒(méi)有專(zhuān)門(mén)的數(shù)據(jù)存儲(chǔ)格式,也不能為數(shù)據(jù)建立索引,用戶(hù)可以自由地組織Hive中的表,只需要在創(chuàng)建表的時(shí)候告訴Hive數(shù)據(jù)中的列分隔符和行分隔符就可以解析數(shù)據(jù)了。
Hive中主要包含四類(lèi)數(shù)據(jù)模型:表(Table)、外部表(External Table)、分區(qū)(Partition)和桶(Bucket)。
Hive中的表和數(shù)據(jù)庫(kù)中的表在概念上是類(lèi)似的,每個(gè)表在Hive中都有一個(gè)對(duì)應(yīng)的存儲(chǔ)目錄。例如一個(gè)表pokes在HDFS中的路徑為/warehouse/pokes,其中/warehouse是hive-site.xml配置文件中由${hive.metastore.warehouse.dir}指定的數(shù)據(jù)倉(cāng)庫(kù)的目錄。
Hive中每個(gè)分區(qū)都對(duì)應(yīng)數(shù)據(jù)庫(kù)中相應(yīng)分區(qū)列的一個(gè)索引,但是分區(qū)的組織方式和傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)不同。在Hive中,表中的一個(gè)分區(qū)對(duì)應(yīng)表下的一個(gè)目錄,所有分區(qū)的數(shù)據(jù)都存儲(chǔ)在對(duì)應(yīng)的目錄中。例如,圖1-2中htable表中包含year、month和day三個(gè)分區(qū),分別對(duì)應(yīng)三個(gè)目錄:對(duì)于year=2012,month=01,day=01的HDFS子目錄為:/warehouse/htable/year=2012/ month=01/ day=01;對(duì)于year=2012,month=02,day=14的HDFS子目錄為:/warehouse/htable/year=2012/ month=02/ day=14;
桶對(duì)指定列進(jìn)行哈希計(jì)算時(shí),根據(jù)哈希值切分?jǐn)?shù)據(jù),每個(gè)桶對(duì)應(yīng)一個(gè)文件。例如,將圖1-2中htable表中屬性列Uniqueid列分散到32個(gè)桶中,首先要對(duì)Uniqueid進(jìn)行hash計(jì)算,對(duì)應(yīng)哈希值為0的桶寫(xiě)入HDFS的目錄為:/warehouse/htable/year=2012/ month=01/ day=01/part-0;對(duì)應(yīng)哈希值為1的桶寫(xiě)入HDFS的目錄為:/warehouse/htable/year=2012/ month=01/ day=01/part-1。 圖1-2 Hive數(shù)據(jù)存儲(chǔ)
一、 hive功能簡(jiǎn)介
功能簡(jiǎn)介PARTITIONED BY關(guān)鍵字為表格分區(qū) 4.通過(guò)CLUSTERED BY關(guān)鍵字將PATITION劃分成BUCKET 5.定義每條記錄的存儲(chǔ)格式,包括: 字段之間如何分隔; 集合字段中的元素如何分隔; Map的key值如何分隔 6.指定存儲(chǔ)格式為Hadoop的SequenceFile
(2)查看表結(jié)構(gòu) DESCRIBE tablename; (3)修改表格 為表格添加字段 ALTER TABLE pokes ADD COLUMNS (new_col INT);
(4)刪除表格 DROP TABLE tablename;
DML (1)、導(dǎo)入數(shù)據(jù) 導(dǎo)入操作,只是將文件復(fù)制到對(duì)應(yīng)的表格目錄中,并不會(huì)對(duì)文檔的schema進(jìn)行校驗(yàn) 從HDFS導(dǎo)入 LOAD DATA INPATH 'data.txt' INTO TABLE page_view PARTITION(date='2008-06-08', country='US') 從本地導(dǎo)入,并覆蓋原數(shù)據(jù) LOAD DATA LOCAL INPATH 'data.txt' OVERWRITE INTO TABLE page_view PARTITION(date='2008-06-08', country='US')
Hive體系結(jié)構(gòu) hiveserver hiveserver啟動(dòng)方式:hive --service hiveserver HiveServer支持多種連接方式:Thrift、JDBC、ODBC
metastore metastore用來(lái)存儲(chǔ)hive的元數(shù)據(jù)信息(表格、數(shù)據(jù)庫(kù)定義等),默認(rèn)情況下是和hive綁定的,部署在同一個(gè)JVM中,將元數(shù)據(jù)存儲(chǔ)到Derby中 這種方式不好的一點(diǎn)是沒(méi)有辦法為一個(gè)Hive開(kāi)啟多個(gè)實(shí)例(Derby在多個(gè)服務(wù)實(shí)例之間沒(méi)有辦法共享)
Hive提供了增強(qiáng)配置,可將數(shù)據(jù)庫(kù)替換成MySql等關(guān)系數(shù)據(jù)庫(kù),將存儲(chǔ)數(shù)據(jù)獨(dú)立出來(lái)在多個(gè)服務(wù)實(shí)例之間共享
甚至還可以將metastore Service也獨(dú)立出來(lái),部署到其他JVM中去,在通過(guò)遠(yuǎn)程調(diào)用的方式去訪(fǎng)問(wèn)
metastore的常用配置: hive.metastore.warehouse.dir 存儲(chǔ)表格數(shù)據(jù)的目錄 hive.metastore.local 使用內(nèi)嵌的metastore服務(wù)(默認(rèn)為true) hive.metastore.uris 如果不使用內(nèi)嵌的metastore服務(wù),需指定遠(yuǎn)端服務(wù)的uri javax.jdo.option.ConnectionURL 所使用數(shù)據(jù)庫(kù)的url javax.jdo.option.ConnectionDriverName 數(shù)據(jù)庫(kù)驅(qū)動(dòng)類(lèi) javax.jdo.option.ConnectionUserName 連接用戶(hù)名 javax.jdo.option.ConnectionPassword 連接密碼
hive數(shù)據(jù)存儲(chǔ)格式
定義表格時(shí)如不指定Row Format和Stored As從句,hive采用如下默認(rèn)配置: CREATE TABLE ... ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' COLLECTION ITEMS TERMINATED BY '\002' MAP KEYS TERMINATED BY '\003' LINES TERMINATED BY '\n' STORED AS TEXTFILE; 默認(rèn)為純文本文件TEXTFILE
如果存儲(chǔ)的數(shù)據(jù)不是純文本,而包含二進(jìn)制的數(shù)據(jù),可用SequenceFile和RCFile RCFile:基于列存儲(chǔ),類(lèi)似于HBase,查詢(xún)Table時(shí),如果要檢索的數(shù)據(jù)不是整條記錄,而是具體的column,RCFile較比SequenceFile高效一些,只需遍歷指定column對(duì)應(yīng)的數(shù)據(jù)文件即可 使用RCFile,創(chuàng)建Table時(shí)使用如下語(yǔ)法: CREATE TABLE ... ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe' STORED AS RCFILE;
除此之外,Hive還可通過(guò)正則表達(dá)式的方式指定輸入數(shù)據(jù)源的格式: CREATE TABLE stations (usaf STRING, wban STRING, name STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "(\d{6}) (\d{5}) (.{29}) .*" );
看完了這篇文章,相信你對(duì)“HIVE從入門(mén)到精通的示例分”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。