91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

大數據開發中hive有什么用

發布時間:2021-12-10 14:21:47 來源:億速云 閱讀:276 作者:小新 欄目:大數據

這篇文章給大家分享的是有關大數據開發中hive有什么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

引語

大數據開發之路漫漫其修遠兮,吾將上下而求索。很多入門大數據的小伙伴,可能第一個接觸到的,就是一只可愛的“小象”,也就是我們的大數據領域的數據倉庫工具hive。

大數據開發中hive有什么用

這只小象給我們提供了方便類SQL查詢語言HQL來操縱數據,使得我們一開始不用編寫復雜的代碼,就可以輕松的探索數據。Hive對于熟悉傳統數據庫的同學來說,算是很友好的一個入門工具。

對大數據以及人工智能概念都是模糊不清的,該按照什么線路去學習,學完往哪方面發展,想深入了解,想學習的同學歡迎加入大數據學習qq群:458345782,有大量干貨(零基礎以及進階的經典實戰)分享給大家,讓大家了解到目前國內最完整的大數據高端實戰實用學習流程體系 。從java和linux入手,其后逐步的深入到HADOOP-hive-oozie-web-flume-python-hbase-kafka-scala-SPARK等相關知識一一分享!

原理

在大數據生態中,hive一般作為數據倉庫來使用。什么是數據倉庫呢?簡單來說就像一個大糧倉,里邊堆著各種各樣的糧食,比如小麥、玉米、土豆、大米等等。數據倉庫里是一個數據集合體,把不同數據源按照一定的形式集合統一起來。 Hive本身是不做數據存儲的,它是構建在分布式存儲系統HDFS之上,我們平常看到的表數據其實本質上來說還是HDFS的文件。Hive把這些HDFS數據文件,通過元數據規則映射為數據庫的表,并且可以提供SQL操作的功能。 Hive總體結構比較簡單,下方是整體的hive架構圖,我們可以看到,總體有三個組件:用戶接口、元數據系統、驅動器。

大數據開發中hive有什么用

用戶通過用戶接口來輸入操作指令。一般接口有三種形式:

CLI端:一般在linux服務器直接輸入hive即可進入;

WEB模式:通過命令bin/hive --service hwi啟動,默認訪問9999端口;

遠程模式:一般是JDBC之類的編程接口;

Hive的核心在于驅動器,一般驅動器接收到用戶接口傳遞的一條SQL之后,會進行下面的一系列操作:

驅動器開始進行語法和語義分析

生成邏輯計劃并且邏輯優化

生成物理計劃

發送計劃到執行引擎(常用引擎有mapredue和sprk)執行

結果返回

而元數據系統一般傳統數據庫來承載,主要記錄了包括hive表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。

常用hive語法

了解了hive的基礎原理之后呢,我們這里結合工作中一些需求,來介紹下開發同學常用的hive操作。

分組統計

作為一名SQL仔,經常會要去統計一些奇奇怪怪的指標,比如不同年齡段的UV,下單數的小時分布之類的。一般常用的分組就是group by了,然后配合上一些窗口函數, SUM、AVG、MIN、MAX、COUNT等,就可以實現我們很多統計需求了。比如下邊的統計時間段的獨立用戶數,查詢結果如下圖所示:

大數據開發中hive有什么用

關聯查詢

有時候我們查詢的數據存放在不同的表中,那關聯查詢就派上用場了。所謂關聯查詢,一般就是通過兩張表相同的字段值關聯起來,同時查詢兩張表的記錄。Hive中常用關聯分內外關聯。

我們先建立兩張簡單的表tab_a和tab_b,用實例來說明關聯機制。表結構和表數據如下圖所示:

大數據開發中hive有什么用

內關聯一般使用關鍵字Join或inner join,內關聯只返回關聯上的結果。

大數據開發中hive有什么用

外關聯的形式就比較多樣化了,又分為:

左外關聯:關鍵字為left [outer] join,以前邊的表為主表,返回記錄數和主表記錄一致,關聯不上的字段為null;

右外關聯:關鍵字為right [outer] join,和左外關聯相反,則是以后邊的表為主表。

全外關聯:full [outer] join,返回兩個表的去重之和,關聯不上的字段為null。

行列轉換

有時候我們會遇到這樣的需求,需要把多列的數據平鋪到一行上輸出。比如查詢用戶的訪問軌跡,這時候有兩個函數就起上作用了。還是讓我們先來看看效果。

大數據開發中hive有什么用

這兩個sql的作用都是把每個用戶的點擊軌跡拼接暫展示出來,其中collect_set和collect_set能夠把列數據合并,轉為一行。而兩個的唯一區別就是collect_set會進行去重。

上述講的是行轉列,還有些需求,希望我們能把列數據拆分成多行,比如數據結構如下,

Page_id StringAd_id Array<int>

A[1,2,3]

B[3,5,6]

C[2,4,5]

要統計每個廣告在所有頁面出現的次數,這時候,我們可以先把同一列的數據線拆成多行,hive提供了explode展開函數,具體效果如下圖:

大數據開發中hive有什么用

Explode一般配合lateral view使用,把字段內容鋪開成虛擬視圖。接下來我們再這個基礎之上,就可以使用統計函數來進行分析。

大數據開發中hive有什么用

取TopN記錄

給數據分組排序再取前幾條記錄,也是我們較為常見的需求。hive提供了row_number函數,可以對排序值進行編號。舉個栗子,要取省份的溫度最高的城市,數據如下:

省份城市溫度

廣東佛山34

廣東廣州30

江西贛州31

江西南昌28

江西萍鄉29

湖南長沙26

湖南衡陽25

我們可以使用row_number()組合group by的形式,來進行組內排序,并且返回順序值rank。

結果如下圖所示:

大數據開發中hive有什么用

此時,如果要去top1的數據,只需添加rank為1的條件即可。和row_number功能和用法類似的函數還有rank()和dense_rank(),唯一的區別在返回的排序rank值有細微區別,此處不再贅述。

Hive進階

數據傾斜

在我們數據清洗過程中,經常會出現一種現象,分布式任務一般會分成多個小任務task,但是呢,有些task處理的很快,有些task就很慢,有時候甚至會卡死導致整個任務失敗,這種現象就是惡名遠揚的數據傾斜。之所以導致數據傾斜,大部分是join、去重統計(count distinct)或者group by操作中的key分布不均勻。拿最常見的hive查詢引擎mapreduce來說,基本就是shuffle階段,有些reduce任務獲取到的key數據量十分多,導致處理很緩慢。

為了避免數據傾斜,一般從兩種方向去解決:

1.調整hive參數

我們可以設置hive.map.aggr和hive.groupby.skewindata兩個參數為true,此時hive會生成兩個job任務,第一個job先將key進行隨機化處理,第二個job在進行真正的shuffle key。如下流程說明圖:

大數據開發中hive有什么用

從上圖可以看出,由于多次在map端聚合,使得最終shuffle時的數據量大大減少,從而減輕了數據傾斜的程度。

2.優化sql

使用mapJoin:我們經常會有大小表join的需求,而這也是數據傾斜的多發區。此時我們可以使用mapJoin的方式,從而避免shuffle。具體實現就是把小表在每一個Map任務內存中保存一份,從而直接在Map就進行join操作。沒了reduce過程,自然也避免了數據傾斜。在hive0.11版本之前,需要顯示聲明啟動該優化操作,如下示例SQL所示:Select /*+ MAPJOIN(small_tab)*/  .key,value FROM small_tab JOIN big_tab ON small_tab.key = big_tab.key 而在hive0.11版本之后,hive能夠自動檢測小表,自行進行mapJoin優化。我們可以通過hive.mapjoin.smalltable.filesize參數手動配置小表的閾值(默認值25M)。使用MapJoin有一個缺點在于內存會浪費,因為每個Map端都有一個副本。所以mapJoin也一般只適合大小表join的情況。

異常值、特殊值手動處理:很多時候造成數據傾斜的可能是一些空值或者,字符串導致的。我們可以通過過濾空值或者對空值做隨機字符串處理,由此避免空值的影響。

如果是大表和大表的join產生了數據傾斜,mapJoin這種方式不太合適,但是在某些場景下,其中一個大表可以被處理成小表。比如,我們要查詢單日訪客瀏覽記錄,并需要附加用戶信息。這時候要和用戶大表user_info關聯,而單日訪客記錄量user_flow也比較大,并不能直接使用mapjoin的方式。但仔細分析,單日訪客UV其實并不大,可以先進行簡單去重,轉換為小表進而可以使用mapJoin。具體SQL如下所示:select /*+mapjoin(x)*/* from user_flow a left outer join (select /*+mapjoin(c)*/d.* from ( select distinct user_id from user_flow )c join user_info d on c.user_id = d.user_id) x on a.user_id = b.user_id;

優勢和不足

Hive目前作為業內使用最為廣泛的數據倉庫工具,自然有著很多優點:高可靠、容錯性高、擴展性強。

HQL語法和傳統SQL類似,且內置大量處理函數支持的存儲格式種類多,兼容性強。用戶接口多,支持各種形式的調用。但是hive也有它自身的一些不足,比如:

OLTP支持不足,不支持事務,目前只有比較新的版本才可以實現行列級別更新且對格式要求嚴格。

由于HDFS特性數據處理延遲高效率較低。HQL的表達能力和靈活性方面有限。基于這些優缺點,hive有它自身擅長的領域,比如用作離線數據倉庫,批量處理海量數據。如果要追求實時性或者要高效率處理小量數據,目前來看,其他新的技術方案,比如kudu、hbase等或許是更好的選擇。

感謝各位的閱讀!關于“大數據開發中hive有什么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

佛学| 定陶县| 陵川县| 永平县| 鹤庆县| 随州市| 河源市| 石狮市| 汾西县| 新津县| 宁国市| 洞口县| 丁青县| 来安县| 乐昌市| 天镇县| 宝清县| 明溪县| 桐柏县| 焦作市| 余庆县| 汕尾市| 綦江县| 苍山县| 峡江县| 海宁市| 武强县| 特克斯县| 称多县| 班戈县| 枝江市| 临安市| 大兴区| 都江堰市| 苍溪县| 盐城市| 阿坝| 恩平市| 和田市| 青田县| 湖南省|