原創(chuàng)|大數(shù)據(jù)新聞|編輯:鄭恭琳|2020-11-25 10:34:21.867|閱讀 281 次
概述:Hive是基于Hadoop構(gòu)建的一套數(shù)據(jù)倉(cāng)庫(kù)分析系統(tǒng),它提供了豐富的SQL查詢(xún)方式來(lái)分析存儲(chǔ)在Hadoop分布式文件系統(tǒng)中的數(shù)據(jù):可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供完整的SQL查詢(xún)功能;可以將SQL語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)運(yùn)行,通過(guò)自己的SQL查詢(xún)分析需要的內(nèi)容,這套SQL簡(jiǎn)稱(chēng)Hive SQL,使不熟悉mapreduce的用戶(hù)可以很方便地利用SQL語(yǔ)言查詢(xún)、匯總和分析數(shù)據(jù)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
相關(guān)鏈接:
Hive是基于Hadoop構(gòu)建的一套數(shù)據(jù)倉(cāng)庫(kù)分析系統(tǒng),它提供了豐富的SQL查詢(xún)方式來(lái)分析存儲(chǔ)在Hadoop分布式文件系統(tǒng)中的數(shù)據(jù):可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供完整的SQL查詢(xún)功能;可以將SQL語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)運(yùn)行,通過(guò)自己的SQL查詢(xún)分析需要的內(nèi)容,這套SQL簡(jiǎn)稱(chēng)Hive SQL,使不熟悉mapreduce的用戶(hù)可以很方便地利用SQL語(yǔ)言查詢(xún)、匯總和分析數(shù)據(jù)。而mapreduce開(kāi)發(fā)人員可以把自己寫(xiě)的mapper和reducer作為插件來(lái)支持Hive做更復(fù)雜的數(shù)據(jù)分析。它與關(guān)系型數(shù)據(jù)庫(kù)的SQL略有不同,但支持了絕大多數(shù)的語(yǔ)句如DDL、DML以及常見(jiàn)的聚合函數(shù)、連接查詢(xún)、條件查詢(xún)。它還提供了一系列的1:具進(jìn)行數(shù)據(jù)提取轉(zhuǎn)化加載,用來(lái)存儲(chǔ)、查詢(xún)和分析存儲(chǔ)在Hadoop中的大規(guī)模數(shù)據(jù)集,并支持UDF(User-Defined Function)、UDAF(User-Defnes AggregateFunction)和UDTF(User-Defined Table-Generating Function),也可以實(shí)現(xiàn)對(duì)map和reduce函數(shù)的定制,為數(shù)據(jù)操作提供了良好的伸縮性和可擴(kuò)展性。
Hive不適合用于聯(lián)機(jī)(online)上事務(wù)處理,也不提供實(shí)時(shí)查詢(xún)功能。它最適合應(yīng)用在基于大量不可變數(shù)據(jù)的批處理作業(yè)。Hive的特點(diǎn)包括:可伸縮(在Hadoop的集群上動(dòng)態(tài)添加設(shè)備)、可擴(kuò)展、容錯(cuò)、輸入格式的松散耦合。
Hive的內(nèi)部表與數(shù)據(jù)庫(kù)中的Table在概念上是類(lèi)似。每一個(gè)Table在Hive中都有一個(gè)相應(yīng)的目錄存儲(chǔ)數(shù)據(jù)。刪除表時(shí),元數(shù)據(jù)與數(shù)據(jù)都會(huì)被刪除。
內(nèi)部表示例:
創(chuàng)建數(shù)據(jù)文件:test_inner_table.txt
創(chuàng)建表:create table test_inner_table (key string)
加載數(shù)據(jù):LOAD DATA LOCAL INPATH ‘filepath’ INTO TABLE test_inner_table
查看數(shù)據(jù):select * from test_inner_table; select count(*) from test_inner_table
刪除表:drop table test_inner_table
外部表指向已經(jīng)在HDFS中存在的數(shù)據(jù),可以創(chuàng)建Partition。外部表加載數(shù)據(jù)和創(chuàng)建表同時(shí)完成(CREATE EXTERNAL TABLE ……LOCATION),實(shí)際數(shù)據(jù)是存儲(chǔ)在LOCATION后面指定的 HDFS 路徑中,并不會(huì)移動(dòng)到數(shù)據(jù)倉(cāng)庫(kù)目錄中。當(dāng)刪除一個(gè)External Table時(shí),僅刪除該鏈接。
外部表示例:
創(chuàng)建數(shù)據(jù)文件:test_external_table.txt
創(chuàng)建表:create external table test_external_table (key string)
加載數(shù)據(jù):LOAD DATA INPATH ‘filepath’ INTO TABLE test_inner_table
查看數(shù)據(jù):select * from test_external_table; ?select count(*) from test_external_table
刪除表:drop table test_external_table
Partition對(duì)應(yīng)于數(shù)據(jù)庫(kù)中的Partition列的密集索引。在Hive中,表中的一個(gè)Partition對(duì)應(yīng)于表下的一個(gè)目錄,所有的Partition的數(shù)據(jù)都存儲(chǔ)在對(duì)應(yīng)的目錄中。
分區(qū)表示例:
創(chuàng)建數(shù)據(jù)文件:test_partition_table.txt
創(chuàng)建表:create table test_partition_table (key string) partitioned by (dt string)
加載數(shù)據(jù):LOAD DATA INPATH ‘filepath’ INTO TABLE test_partition_table partition (dt=‘2006’)
查看數(shù)據(jù):select * from test_partition_table; select count(*) from test_partition_table
刪除表:drop table test_partition_table
Buckets是將表的指定列通過(guò)Hash算法進(jìn)一步分解成不同的文件存儲(chǔ)。它對(duì)指定列計(jì)算hash,根據(jù)hash值切分?jǐn)?shù)據(jù),目的是為了并行,每一個(gè)Bucket對(duì)應(yīng)一個(gè)文件。當(dāng)需要并行執(zhí)行Map任務(wù)時(shí),桶是不錯(cuò)的選擇。
桶的示例:
創(chuàng)建數(shù)據(jù)文件:test_bucket_table.txt
創(chuàng)建表:create table test_bucket_table (key string) clustered by (key) into 20 buckets
加載數(shù)據(jù):LOAD DATA INPATH ‘filepath’ INTO TABLE test_bucket_table
查看數(shù)據(jù):select * from test_bucket_table; set hive.enforce.bucketing = true;
視圖與傳統(tǒng)數(shù)據(jù)庫(kù)的視圖類(lèi)似。視圖是只讀的,它基于的基本表,如果改變,數(shù)據(jù)增加不會(huì)影響視圖的呈現(xiàn);如果刪除,會(huì)出現(xiàn)問(wèn)題。如果不指定視圖的列,會(huì)根據(jù)select語(yǔ)句后的生成。
示例:create view test_view as select * from test
對(duì)大數(shù)據(jù)系統(tǒng)來(lái)講,數(shù)據(jù)量大并不可怕,可怕的是數(shù)據(jù)傾斜。
數(shù)據(jù)傾斜,是并行處理的數(shù)據(jù)集中,某一部分的數(shù)據(jù)顯著多于其它部分,從而使得該部分的處理速度成為整個(gè)數(shù)據(jù)集的瓶頸。
在Spark中,同一個(gè)Stage的不同Partition可以并行處理,而具有依賴(lài)關(guān)系的不同Stage之間是串行處理的。換句話說(shuō),一個(gè)Stage所耗費(fèi)的時(shí)間,主要由最慢的那個(gè)Task決定。由于同一個(gè)Stage內(nèi)的所有Task執(zhí)行相同的計(jì)算,在排除不同計(jì)算節(jié)點(diǎn)計(jì)算能力差異的前提下,不同Task之間耗時(shí)的差異主要由該Task所處理的數(shù)據(jù)量決定。
傾斜表是一種特殊類(lèi)型的表,其中經(jīng)常出現(xiàn)的值(重偏差)被分割成單獨(dú)的文件,其余的值將轉(zhuǎn)到其他文件。通過(guò)指定偏斜值,Hive會(huì)自動(dòng)將它們分解為單獨(dú)的文件,并在查詢(xún)期間可以跳過(guò)(或包含)整個(gè)文件,從而提高性能。
創(chuàng)建表語(yǔ)法:create table <T> (schema) skewed by (keys) on (values) [STORED as DIRECTORIES];
具體例子: create table T (c1 string, c2 string) skewed by (c1) on ('x1')
存儲(chǔ)過(guò)程是在數(shù)據(jù)庫(kù)系統(tǒng)中為了完成特定功能的SQL 語(yǔ)句集,經(jīng)過(guò)第一次編譯后再次調(diào)用不需要再次編譯,用戶(hù)通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)執(zhí)行它。
CREATE PROCEDURE proc_test
BEGIN
Drop table order_base.O_ORDER_DETAIL;
create table order_base.O_ORDER_DETAIL (customernumber string, invoicenumber string, invoicedate string, ordernumber string, itemnumberid string, ordertypeen string, ordertypesc string, salesrepid string, warehouse string, lineamount string, linecostamount string, invoicequantity string, lineno string) clustered by (ordertypeen) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true');
TRUNCATE TABLE order_base.O_ORDER_DETAIL;
INSERT INTO order_base.O_ORDER_DETAIL select * from ORDER_DETAIL;
update order_base.O_ORDER_DETAIL set itemnumberid=replace(itemnumberid,'*','');
END;
CALL proc_test
執(zhí)行存儲(chǔ)過(guò)程
hplsql -f /home/hadoop/proc_test.sql
查詢(xún)結(jié)果
select * from order_base.O_ORDER_DETAIL where ordernumber=8800840;
CLI:command line interface,命令行接口。
Thrift客戶(hù)端: Hive架構(gòu)的許多客戶(hù)端接口是建立在thrift客戶(hù)端之上,包括JDBC和ODBC接口。
WEBGUI:Hive客戶(hù)端提供了一種通過(guò)網(wǎng)頁(yè)的方式訪問(wèn)Hive所提供的服務(wù)。這個(gè)接口對(duì)應(yīng)Hive的HWI組件(Hive Web Interface),生產(chǎn)環(huán)境可用Hue組件代替,下圖為Hue界面。
跨行業(yè)數(shù)據(jù)挖掘流程
基于企業(yè)的業(yè)務(wù)目標(biāo),進(jìn)行數(shù)據(jù)理解、數(shù)據(jù)準(zhǔn)備、數(shù)據(jù)建模,最后進(jìn)行評(píng)價(jià)和部署,真正實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)業(yè)務(wù)決策。更多詳情,請(qǐng)。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn