Hive大數(shù)據(jù)分析

一、What

1、什么是Hive

Hive是底層封裝了Hadoop的數(shù)據(jù)倉庫處理工具,存在的目的是讓精通SQL的分析師能夠?qū)Υ娣旁贖DFS上的大規(guī)模數(shù)據(jù)集執(zhí)行查詢,它在工作站上運(yùn)行時,將用戶的HiveQL 語句通過解釋器轉(zhuǎn)換為MapReduce 作業(yè)提交到Hadoop 集群上,Hadoop 監(jiān)控作業(yè)執(zhí)行過程,然后返回作業(yè)執(zhí)行結(jié)果給用戶。Hive把結(jié)構(gòu)化的數(shù)據(jù)組織為表,通過這種方式為存儲在HDFS上的數(shù)據(jù)賦予結(jié)構(gòu)。

HQL是Hive的查詢語言,可以看成是SQL的一種方言,受SQL影響很深。

Hadoop是一個能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理軟件框架。

Hadoop的框架最核心的設(shè)計就是:HDFS和MapReduce。HDFS為海量的數(shù)據(jù)提供了存儲,而MapReduce則為海量的數(shù)據(jù)提供了計算。

MapReduce:分布式數(shù)據(jù)處理模型和執(zhí)行環(huán)境,應(yīng)用與大型商用機(jī)集群。

HDFS:分布式文件系統(tǒng),應(yīng)用與大型商用機(jī)集群。


2、Hive架構(gòu)

主要分為以下幾個部分:

用戶接口

用戶接口主要有三個:CLI,Client 和 WUI。其中最常用的是 CLI,Cli 啟動的時候,會同時啟動一個 Hive 副本。Client 是 Hive 的客戶端,用戶連接至 Hive Server。在啟動 Client 模式的時候,需要指出 Hive Server 所在節(jié)點(diǎn),并且在該節(jié)點(diǎn)啟動 Hive Server。 WUI 是通過瀏覽器訪問 Hive。

元數(shù)據(jù)存儲

Hive 將元數(shù)據(jù)存儲在數(shù)據(jù)庫中,如 mysql、derby。Hive 中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)及其屬性,表的屬性(是否為外部表等),表的數(shù)據(jù)所在目錄等。

解釋器、編譯器、優(yōu)化器、執(zhí)行器

解釋器、編譯器、優(yōu)化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優(yōu)化以及查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,并在隨后由 MapReduce 調(diào)用執(zhí)行。

Hadoop

Hive 的數(shù)據(jù)存儲在 HDFS 中,大部分的查詢由 MapReduce 完成(不包含 * 的查詢,比如 select * from tbl 不會生成 MapReduce 任務(wù))。


3、Impala

Impala是Cloudera公司主導(dǎo)開發(fā)的新型查詢系統(tǒng),它提供SQL語義,能查詢存儲在Hadoop的HDFS和HBase中的PB級大數(shù)據(jù)。已有的Hive系統(tǒng)雖然也提供了SQL語義,但由于Hive底層執(zhí)行使用的是MapReduce引擎,仍然是一個批處理過程,難以滿足查詢的交互性。相比之下,Impala的最大特點(diǎn)也是最大賣點(diǎn)就是它的快速。

Impala不需要把中間結(jié)果寫入磁盤,省掉了大量的I/O開銷。

省掉了MapReduce作業(yè)啟動的開銷。MapReduce啟動task的速度很慢(默認(rèn)每個心跳間隔是3秒鐘),Impala直接通過相應(yīng)的服務(wù)進(jìn)程來進(jìn)行作業(yè)調(diào)度,速度快了很多。

Impala完全拋棄了MapReduce這個不太適合做SQL查詢的范式,而是像Dremel一樣借鑒了MPP并行數(shù)據(jù)庫的思想另起爐灶,因此可做更多的查詢優(yōu)化,從而省掉不必要的shuffle、sort等開銷。


二、Why

Hive優(yōu)點(diǎn):

1、簡單易上手:支持類SQL的查詢語言,不需要分析人員寫mapreduce;

2、可擴(kuò)展,適用于處理大數(shù)據(jù)集:MR作為計算引擎,HDFS作為存儲系統(tǒng);

3、提供統(tǒng)一的元數(shù)據(jù)管理;

4、延展性好:支持自定義函數(shù);

5、容錯性好,節(jié)點(diǎn)出現(xiàn)問題,SQL仍可以完成執(zhí)行。

Hive缺點(diǎn):

1、HQL表達(dá)能力有限:優(yōu)化迭代算法無法表達(dá),數(shù)據(jù)挖掘

2、延遲性高,效率低:

默認(rèn)為MR執(zhí)行引擎,啟動有延遲,常用于OLAP數(shù)據(jù)分析場景,不適用OLTP場景;

HQL調(diào)優(yōu)困難,粒度比較粗;

Hive可控性差。


三、How

1、適用場景

作為數(shù)據(jù)倉庫ETL:

數(shù)據(jù)挖掘:

用戶行為分析:

文本分析:

2、HQL的數(shù)據(jù)類型

tinyint,smallint,int,bigint,float,double,boolean,string,binary,timestamp;

array,map,struct

3、HQL的操作與函數(shù)

SQL操作:關(guān)系操作,空值判斷,算術(shù)操作,邏輯操作;

內(nèi)置函數(shù):數(shù)學(xué)和統(tǒng)計函數(shù),字符串函數(shù),日期函數(shù),條件函數(shù),聚類函數(shù),XML函數(shù),JSON函數(shù)

類型轉(zhuǎn)換

隱式類型轉(zhuǎn)換:任何整數(shù)類型都可以隱式地轉(zhuǎn)換成一個范圍更廣的類型。所有整數(shù)類型、float和string類型都能隱式轉(zhuǎn)換為double。tinyint、smallint和int都可以轉(zhuǎn)換為float。boolean類型不能轉(zhuǎn)換為其他數(shù)據(jù)類型,timestamp可以被隱式轉(zhuǎn)換為string。

顯式數(shù)據(jù)轉(zhuǎn)化:使用cast進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。

4、表

內(nèi)部表:所有的處理都由Hive完成

創(chuàng)建內(nèi)部表:

CREATE TABLE IF NOT EXISTS table_name[(col_name data_type [COMMENT col_comment], ...)][COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)][STORED AS file_format] [LOCATION '/mso/export/test']

加載數(shù)據(jù):

加載本地數(shù)據(jù):Load data local inpath '/......' into tablename;

加載HDFS數(shù)據(jù)? load data inpath 'hdfs://.....' into tablename

查看HDFS數(shù)據(jù):

操作數(shù)據(jù)庫:

外部表:要使用hive和其他工具來處理同一個數(shù)據(jù)集

分區(qū)和分桶:partitioned by,clustered by[column name] into x buckets

存儲格式:沒有用 row format 或者 started as 字句聲明的時候,Hive默認(rèn)為分隔的文本格式,每行存儲一個row

導(dǎo)入數(shù)據(jù):

load data:通過把文件復(fù)制或者移到表的目錄中,從而把數(shù)據(jù)導(dǎo)入hive的表或者分區(qū)

insert:把數(shù)據(jù)從一個hive表填充到另一個hive表:insert overwrite table tablename select col1,col2 from source

對于分區(qū)的表,可以使用partition子句來指明數(shù)據(jù)要插入哪個分區(qū):insert overwrite table tablename partition(dt=' ') select col1,col2 from source

多表插入:把insert語句倒過來,from放在最前面,這樣可以在同一個查詢中使用多個insert語句。效率更高,因為只要掃描一遍源表就可以生成多個不相交的輸出。

from source?

insert overwrite table tablename select col1,count(distinct col2) group by col1

insert overwrite table tablename1.....

create table...as select:將輸出結(jié)果存放到一張新表非常方便。select語句失敗,新表就不會被創(chuàng)建。

表的修改:

1、重命名:使用 alter table source rename? to target 重命名表

2、新增一個表列:alter table target add columns(col3 string)

表的丟棄:

1、刪除表的數(shù)據(jù)和元數(shù)據(jù):drop table??

查詢數(shù)據(jù):

1、排序和聚類:order by? ?sort by? distribute by

from records select year,temperature distribute by year sort by year asc,temperature desc

2、連接:Hive 只能使用等值連接,hive不允許在select 語句的from字句中列出要連接的表,或者在where字句中指定連接的條件。

內(nèi)連接:join?

外連接:left outer join,right outer join,full outer join

半連接:相當(dāng)于 in? ?select * from a left semi join on sales on?

3、視圖表

4、用戶定義函數(shù)UDF,必須用Java寫!


四、HQL的順序與調(diào)優(yōu)

1、Hive函數(shù)的執(zhí)行順序:https://www.cnblogs.com/jiangxiaoxian/p/7155636.html

from + 表名

on +字段

(left/right)join +表名

where +條件

group by +字段

having + 條件

select +字段

distinct +字段

union +結(jié)果集

order by +字段

limit +數(shù)量

2、窗口函數(shù):https://blog.https://www.cnblogs.com/jiangxiaoxian/p/7155636.html.net/qq_26937525/article/details/54925827

3、分析函數(shù)

4、日期函數(shù):https://blog.csdn.net/u013421629/article/details/80450047

5、優(yōu)化

分區(qū)表-提高查詢(partition)

列式存儲(parquet和orc)

表連接優(yōu)化(將大表放后面)

盡早的過濾數(shù)據(jù)

盡量原子化操作(避免復(fù)雜的語句,建議使用臨時表來過渡)

如果要用到union into 替換成insert into(性能能提上50%)

order by 改為 sort by (全局排序改為局部排序)

數(shù)據(jù)傾斜

6、詳解參考:https://blog.csdn.net/scgaliguodong123_/article/details/60135385

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    草里有只羊閱讀 18,529評論 0 85
  • Hive是構(gòu)建在Hadoop HDFS上得一個數(shù)據(jù)倉庫 數(shù)據(jù)倉庫是一個面向主題的、集成的、不可更新的、隨時間不變化...
    Sx_Ren閱讀 1,028評論 0 9
  • Hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供類SQL查詢功能。本...
    felix521閱讀 1,415評論 0 0
  • 又是新的一天,又坐在了電腦前。 我的身體已經(jīng)形成了慣性思維,每天打開辦公室的門,徑自走向電腦桌,按開關(guān)鍵,再去洗壺...
    南深小小閱讀 314評論 0 2
  • 在不見她的時間里,每一分每一秒都是痛苦的。走在大街上,坐在辦公室里,吃飯時、睡覺前。 試圖努力的忙起來,試圖掩蓋自...
    booksir閱讀 447評論 0 0

友情鏈接更多精彩內(nèi)容