hive知識點總結

1 hive表關聯查詢,如何解決數據傾斜的問題?


傾斜緣由:

map輸出數據按key Hash的分配到reduce中,因爲key分佈不均勻、業務數據自己的特、建表時考慮不周、等緣由形成的reduce 上的數據量差別過大。

1)、key分佈不均勻;

2)、業務數據自己的特性;

3)、建表時考慮不周;

4)、某些SQL語句自己就有數據傾斜;

如何避免:對於key爲空產生的數據傾斜,能夠對其賦予一個隨機值。

解決方案

1>.參數調節:

hive.map.aggr = true

hive.groupby.skewindata=true

有數據傾斜的時候進行負載均衡,當選項設定位true,生成的查詢計劃會有兩個MR Job。第一個MR Job中,Map的輸出結果集合會隨機分佈到Reduce中,每一個Reduce作部分聚合操做,並輸出結果,這樣處理的結果是相同的Group By Key有可能被分發到不一樣的Reduce中,從而達到負載均衡的目的;第二個MR Job再根據預處理的數據結果按照Group By Key 分佈到 Reduce 中(這個過程能夠保證相同的 Group By Key 被分佈到同一個Reduce中),最後完成最終的聚合操做。

2>.SQL 語句調節:

1)、選用join key分佈最均勻的表做爲驅動表。作好列裁剪和filter操做,以達到兩表作join 的時候,數據量相對變小的效果。

2)、大小表Join:

使用map join讓小的維度表(1000 條如下的記錄條數)先進內存。在map端完成reduce.

4)、大表Join大表:

把空值的key變成一個字符串加上隨機數,把傾斜的數據分到不一樣的reduce上,因爲null 值關聯不上,處理後並不影響最終結果。

5)、count distinct大量相同特殊值:

count distinct 時,將值爲空的狀況單獨處理,若是是計算count distinct,能夠不用處理,直接過濾,在最後結果中加1。若是還有其餘計算,須要進行group by,能夠先將值爲空的記錄單獨處理,再和其餘計算結果進行union。
Hive 原理

1. 用戶提交查詢等任務給Driver。

2. 編譯器得到該用戶的任務Plan。

3. 編譯器Compiler根據用戶任務去MetaStore中獲取須要的Hive的元數據信息。

4. 編譯器Compiler獲得元數據信息,對任務進行編譯,先將HiveQL轉換爲抽象語法樹,而後將抽象語法樹轉換成查詢塊,將查詢塊轉化爲邏輯的查詢計劃,重寫邏輯查詢計劃,將邏輯計劃轉化爲物理的計劃(MapReduce), 最後選擇最佳的策略。

5. 將最終的計劃提交給Driver。

6. Driver將計劃Plan轉交給ExecutionEngine去執行,獲取元數據信息,提交給JobTracker或者SourceManager執行該任務,任務會直接讀取HDFS中文件進行相應的操做。

7. 獲取執行的結果。

8. 取得並返回執行結果。

Mapreduce和hive的區別和聯繫

http://www.360doc.com/content/14/1208/10/20466010_431234360.shtml

hive是基於hadoop的數據倉庫。

那麼爲何說hive是基於Hadoop的呢?

之因此說hive是構建在Hadoop之上的數據倉庫,簡單的說是由於:

①數據存儲在hdfs上

②數據計算用mapreduce

 

Hive是一種創建在Hadoop文件系統上的數據倉庫架構,並對存儲在HDFS中的數據進行分析和管理;它能夠將結構化的數據文件映射爲一張數據庫表,並提供完整的 SQL 查詢功能,能夠將 SQL 語句轉換爲 MapReduce 任務進行運行,經過本身的 SQL 去查詢分析須要的內容,這套 SQL 簡稱 Hive SQL(HQL),使不熟悉MapReduce 的用戶也能很方便地利用 SQL 語言對數據進行查詢、彙總、分析。

 

Hive不支持更改數據的操做,Hive基於數據倉庫,提供靜態數據的動態查詢。其使用類SQL語言,底層通過編譯轉爲MapReduce程序,在hadoop上運行,數據存儲在HDFS上。

簡述有Hive以後,爲什麼還要學mapreduce

https://blog.csdn.net/WYpersist/article/details/79981385

你以爲Hive是否支持in函數

https://blog.csdn.net/WYpersist/article/details/79980945

當輸入hive 命令時卡住了,你認爲是爲何,從哪些方面考慮

Cpu ,網絡,內存

說出Hive 安裝數據時,mysql和Derby的區別,爲何安裝mysql ,或爲何安裝Derby,分別有什麼優缺陷

https://blog.csdn.net/WYpersist/article/details/80101617

簡述Hive 桶表什麼,什麼做用,舉例

Hive 分區是什麼,什麼做用,該怎麼分區

Hive 動態分區和靜態分區

Hive 分區重命名

說出Hive 導入數據的過程(表有多個分區,桶)

Hive 排序

什麼是Hive join

說說你所理解的Hive 視圖操做

Hive 序列函數

簡述Hive 自定義函數

知道Hive UDF是什麼嗎,什麼做用,爲何要用

簡述Hive 優缺點

https://blog.csdn.net/wypersist/article/details/79999401

說說Hive內部表和外部表分別是什麼?爲何要建外部表?

Hive內部表和外部表的區別

https://blog.csdn.net/wypersist/article/details/80314022

Hive 建立內部表時,會將數據移動到數據倉庫指向的路徑;若建立外部表,僅記錄數據所在的路徑,不對數據的位置作任何改變。在刪除表的時候,內部表的元數據和數據會被一塊兒刪除,而外部表只刪除元數據,不刪除數據。這樣外部表相對來講更加安全些,數據組織也更加靈活,方便共享源數據。
  須要注意的是傳統數據庫對錶數據驗證是 schema on write(寫時模式),而 Hive 在load時是不檢查數據是否符合schema的,hive 遵循的是 schema on read(讀時模式),只有在讀的時候hive才檢查、解析具體的數據字段、schema。
  讀時模式的優點是load data 很是迅速,由於它不須要讀取數據進行解析,僅僅進行文件的複製或者移動。

  寫時模式的優點是提高了查詢性能,由於預先解析以後能夠對列創建索引,並壓縮,但這樣也會花費要多的加載時間。

被external修飾的是內部表(managed table),被external修飾的爲外部表(external table);
區別:
內部表數據由Hive自身管理,外部表數據由HDFS管理;
內部表數據存儲的位置是hive.metastore.warehouse.dir(默認:/user/hive/warehouse),外部表數據的存儲位置由本身制定;
刪除內部表會直接刪除元數據(metadata)及存儲數據;刪除外部表僅僅會刪除元數據,HDFS上的文件並不會被刪除;
對內部表的修改會將修改直接同步給元數據,而對外部表的表結構和分區進行修改,則須要修復(MSCK REPAIR TABLE table_name;)

https://blog.csdn.net/wypersist/article/details/80314022

什麼是數據傾斜

Hive 表類型有哪些

https://blog.csdn.net/dsl200970/article/details/70245916

Mapreduce和hive的區別和聯繫

http://www.360doc.com/content/14/1208/10/20466010_431234360.shtml

hive是基於hadoop的數據倉庫。

那麼爲何說hive是基於Hadoop的呢?

之因此說hive是構建在Hadoop之上的數據倉庫,簡單的說是由於:

①數據存儲在hdfs上

②數據計算用mapreduce

Hive是一種創建在Hadoop文件系統上的數據倉庫架構,並對存儲在HDFS中的數據進行分析和管理;它能夠將結構化的數據文件映射爲一張數據庫表,並提供完整的 SQL 查詢功能,能夠將 SQL 語句轉換爲 MapReduce 任務進行運行,經過本身的 SQL 去查詢分析須要的內容,這套 SQL 簡稱 Hive SQL(HQL),使不熟悉MapReduce 的用戶也能很方便地利用 SQL 語言對數據進行查詢、彙總、分析。

Hive不支持更改數據的操做,Hive基於數據倉庫,提供靜態數據的動態查詢。其使用類SQL語言,底層通過編譯轉爲MapReduce程序,在hadoop上運行,數據存儲在HDFS上。

說出Hive 如何調優,提高效率

https://blog.csdn.net/WYpersist/article/details/80030499

https://blog.csdn.net/WYpersist/article/details/80030921

https://blog.csdn.net/WYpersist/article/details/80032327

說出Hive 數據清洗的過程

Hive 編程題

五、海量數據分佈在100臺電腦上,統計出這批數據的TOP10。(寫出核心算法思路)

六、背景:現有商品,買家,賣家三個實體,實現一個小小型的交易系統

1)給出表結構設計

2)帥選出沒有買過商品的用戶

3)寫出sql 語句,帥選出僅僅購買了麪粉的用戶

HIVE與RDBMS關係數據庫的區別

一、hive存儲的數據量比較大,適合海量數據,適合存儲軌跡類歷史數據,適合用來作離線分析、數據挖掘運算,

事務性較差,實時性較差

 rdbms通常數據量相對來講不會太大,適合事務性計算,實時性較好,更加接近上層業務

二、hive的計算引擎是hadoop的mapreduce,存儲是hadoop的hdfs文件系統,

 rdbms的引擎由數據庫本身設計實現例如mysql的innoDB,存儲用的是數據庫服務器本地的文件系統

三、hive因爲基於hadoop因此存儲和計算的擴展能力都很好,

 rdbms在這方面比較弱,好比orcale的分表和擴容就很頭疼

四、hive表格沒有主鍵、沒有索引、不支持對具體某一行的操做,適合對批量數據的操做,不支持對數據的update操做,

更新的話通常是先刪除表而後從新落數據

 rdbms事務性強,有主鍵、索引,支持對具體某一行的增刪改查等操做

五、hive的SQL爲HQL,與標準的RDBMS的SQL存在有很多的區別,相對來講功能有限

rdbms的SQL爲標準SQL,功能較爲強大。

Hive分析窗口函數

Hive 數據傾斜類

Hive 取前10條數據

https://blog.csdn.net/wypersist/article/details/80318305

Hive 取最小成績的記錄和最大的記錄

Hive 四種排序

https://blog.csdn.net/wypersist/article/details/80314431

Hive 時間函數

Mysql 和hive的區別

Hive 的sql語句和mysql 的sql語句有什麼不一樣

Mysql和derby

Hive 將元數據存儲在 RDBMS 中,通常經常使用 MySQL 和 Derby。默認狀況下,Hive 元數據保存在內嵌的 Derby 數據庫中,只能容許一個會話鏈接,只適合簡單的測試。實際生產環境中不適用, 爲了支持多用戶會話,則須要一個獨立的元數據庫,使用 MySQL 做爲元數據庫,Hive 內部對 MySQL 提供了很好的支持。

內置的derby主要問題是併發性能不好,能夠理解爲單線程操做。

Derby還有一個特性。更換目錄執行操做,會找不到相關表等
好比在/usr下執行建立表,在/usr下能夠找到這個表。在/etc下執行查找這個表,就會找不到 。

Hive存儲格式

https://blog.csdn.net/ly19901208/article/details/77049824

Hive 工做原理

https://blog.csdn.net/wypersist/article/details/80174647
A全部的hive任務都會有reducer的執行嗎?

答:不是,因爲當前hive的優化,使得通常簡單的任務不會去用reducer任務;只有稍微複雜的任務纔會有reducer任務

舉例:使用select * from person ; 就不會有reducer

      使用from person p

                  insert  into  person2 select p.age,p.name  

 

B\hive解決了什麼問題

答:多用戶的使用,解決了元數據的衝突,hive2代理管理元數據       

    區別hive2,hiveserver2是服務,而hive是一個交互窗口

 

C\設置時鐘同步的定時任務

crontab -e

*/10 * * * * /usr/sbin/ntpdate time.nist.gov

 

D\hive的函數:UDF  UDAF UDTF的區別

UDF:   單行進入,單行輸出

UDAF:  多行進入,單行輸出

UDTF:  單行輸入,多行輸出

 

E\hive的優化

答:優化能夠從幾個方面着手:

    1. 好的模型設計事半功倍。

    2. 解決數據傾斜問題。

3. 減小 job 數。

4. 設置合理的 map reduce 的 task 數,能有效提高性能。(好比,10w+級別的計算,用

        160 個 reduce,那是至關的浪費,1 個足夠)。

5. 本身動手寫 sql 解決數據傾斜問題是個不錯的選擇。set hive.groupby.skewindata=true;

   這是通用的算法優化,但算法優化老是漠視業務,習慣性提供通用的解決方法。 Etl 開發

   人員更瞭解業務,更瞭解數據,因此經過業務邏輯解決傾斜的方法每每更精確,更有效。

6. 對 count(distinct)採起漠視的方法,尤爲數據大的時候很容易產生傾斜問題,不抱僥倖

      心理。本身動手,豐衣足食。

7. 對小文件進行合併,是行至有效的提升調度效率的方法,假如咱們的做業設置合理的文

件數,對雲梯的總體調度效率也會產生積極的影響。

8. 優化時把握總體,單個做業最優不如總體最優。

 

F優化:

1\排序優化

Order by 實現全局排序,一個 reduce 實現,效率低

Sort by  實現部分有序,單個 reduce 輸出的結果是有序的,效率高,一般和

DISTRIBUTE BY 關鍵字一塊兒使用(DISTRIBUTE BY 關鍵字 能夠指定 map 到 reduce

端的分發 key)

CLUSTER BY col1 等價於 DISTRIBUTE BY col1 SORT BY col1

2\分區優化

3\合併小文件

4\避免空值關聯,多用聚合函數,多用臨時表

html

相關文章
相關標籤/搜索