1背景java
應用於工業的商務智能收集分析所需的數據集正在大量增加,使得傳統的數據倉庫解決方案變得過於昂貴。Hadoop是一個流行的開源map-reduce實現,用於像yahoo, Facebook一類的公司。來存儲和處理商用硬件上的大範圍數據集。然而map-reduce程序模型仍是處於很低級別,即須要開發者來書寫客戶程序,這些程序每每難於維護與重用。正則表達式
用hbase作數據庫,但因爲hbase沒有類sql查詢方式,因此操做和計算數據很是不方便,因而整合hive,讓hive支撐在hbase數據庫層面的hql查詢。hive也叫作數據倉庫。sql
2定義數據庫
Hive是基於Hadoop(HDFS, MapReduce)的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供類SQL查詢功能。apache
本質是將SQL轉換爲MapReduce程序。工具
3體系結構oop
Hive自己創建在Hadoop的體系結構上,能夠將結構化的數據文件映射爲一張數據庫表,並提供完整的sql查詢功能,能夠將sql語句轉換爲MapReduce任務進行。並按照該計劃生成MapReduce任務後交給Hadoop集羣處理,Hive的體系結構如圖1-1所示:網站
圖1-1 Hive的體系結構url
4Hive的數據存儲orm
Hive的存儲是創建在Hadoop文件系統之上的。Hive自己沒有專門的數據存儲格式,也不能爲數據創建索引,用戶能夠自由地組織Hive中的表,只須要在建立表的時候告訴Hive數據中的列分隔符和行分隔符就能夠解析數據了。
Hive中主要包含四類數據模型:表(Table)、外部表(External Table)、分區(Partition)和桶(Bucket)。
Hive中的表和數據庫中的表在概念上是相似的,每一個表在Hive中都有一個對應的存儲目錄。例如一個表pokes在HDFS中的路徑爲/warehouse/pokes,其中/warehouse是hive-site.xml配置文件中由${hive.metastore.warehouse.dir}指定的數據倉庫的目錄。
Hive中每一個分區都對應數據庫中相應分區列的一個索引,可是分區的組織方式和傳統關係型數據庫不一樣。在Hive中,表中的一個分區對應表下的一個目錄,全部分區的數據都存儲在對應的目錄中。例如,圖1-2中htable表中包含year、month和day三個分區,分別對應三個目錄:對於year=2012,month=01,day=01的HDFS子目錄爲:/warehouse/htable/year=2012/ month=01/ day=01;對於year=2012,month=02,day=14的HDFS子目錄爲:/warehouse/htable/year=2012/ month=02/ day=14;
桶對指定列進行哈希計算時,根據哈希值切分數據,每一個桶對應一個文件。例如,將圖1-2中htable表中屬性列Uniqueid列分散到32個桶中,首先要對Uniqueid進行hash計算,對應哈希值爲0的桶寫入HDFS的目錄爲:/warehouse/htable/year=2012/ month=01/ day=01/part-0;對應哈希值爲1的桶寫入HDFS的目錄爲:/warehouse/htable/year=2012/ month=01/ day=01/part-1。 圖1-2 Hive數據存儲
1、 hive功能簡介
功能簡介PARTITIONED BY關鍵字爲表格分區 4.經過CLUSTERED BY關鍵字將PATITION劃分紅BUCKET 5.定義每條記錄的存儲格式,包括: 字段之間如何分隔; 集合字段中的元素如何分隔; Map的key值如何分隔 6.指定存儲格式爲Hadoop的SequenceFile
(2)查看錶結構 DESCRIBE tablename; (3)修改表格 爲表格添加字段 ALTER TABLE pokes ADD COLUMNS (new_col INT);
(4)刪除表格 DROP TABLE tablename;
DML (1)、導入數據 導入操做,只是將文件複製到對應的表格目錄中,並不會對文檔的schema進行校驗 從HDFS導入 LOAD DATA INPATH 'data.txt' INTO TABLE page_view PARTITION(date='2008-06-08', country='US') 從本地導入,並覆蓋原數據 LOAD DATA LOCAL INPATH 'data.txt' OVERWRITE INTO TABLE page_view PARTITION(date='2008-06-08', country='US')
Hive體系結構 hiveserver hiveserver啓動方式:hive --service hiveserver HiveServer支持多種鏈接方式:Thrift、JDBC、ODBC
metastore metastore用來存儲hive的元數據信息(表格、數據庫定義等),默認狀況下是和hive綁定的,部署在同一個JVM中,將元數據存儲到Derby中 這種方式很差的一點是沒有辦法爲一個Hive開啓多個實例(Derby在多個服務實例之間沒有辦法共享)
Hive提供了加強配置,可將數據庫替換成MySql等關係數據庫,將存儲數據獨立出來在多個服務實例之間共享
甚至還能夠將metastore Service也獨立出來,部署到其餘JVM中去,在經過遠程調用的方式去訪問
metastore的經常使用配置: hive.metastore.warehouse.dir 存儲表格數據的目錄 hive.metastore.local 使用內嵌的metastore服務(默認爲true) hive.metastore.uris 若是不使用內嵌的metastore服務,需指定遠端服務的uri javax.jdo.option.ConnectionURL 所使用數據庫的url javax.jdo.option.ConnectionDriverName 數據庫驅動類 javax.jdo.option.ConnectionUserName 鏈接用戶名 javax.jdo.option.ConnectionPassword 鏈接密碼
hive數據存儲格式
定義表格時如不指定Row Format和Stored As從句,hive採用以下默認配置: 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; 默認爲純文本文件TEXTFILE
若是存儲的數據不是純文本,而包含二進制的數據,可用SequenceFile和RCFile RCFile:基於列存儲,相似於HBase,查詢Table時,若是要檢索的數據不是整條記錄,而是具體的column,RCFile較比SequenceFile高效一些,只需遍歷指定column對應的數據文件便可 使用RCFile,建立Table時使用以下語法: CREATE TABLE ... ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe' STORED AS RCFILE;
除此以外,Hive還可經過正則表達式的方式指定輸入數據源的格式: 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}) .*" ); 參考資料: http://www.alidata.org/archives/595 https://cwiki.apache.org/confluence/display/Hive/Home hadoop權威指南
瞭解更多詳情請登陸超人學院網站http://www.crxy.cn或者每週日晚八點半相約免費公開課 https://ke.qq.com/course/53102#term_id=100145289 具體詳情請聯繫QQ2435014406