大資料之 HIVE 面試題 不定時更新

2021-10-04 21:36:32 字數 4296 閱讀 1522

hive是基於hadoop的乙個資料倉儲工具,可以將結構化的資料檔案對映成為一張資料庫表,並提供類sql的查詢功能。可以將sql語句轉化為mapreduce任務進行執行。hive提供了一系列的工具,可以用來進行資料提取轉化載入(etl),這是一種可以儲存、查詢和分析儲存在 hadoop 中的大規模資料的機制。

1.) 直接使用hadoop所面臨的問題

人員學習成本太高

專案週期要求太短

mapreduce實現複雜查詢邏輯開發難度太大

2.)操作介面採用類sql語法,提供快速開發的能力。

避免了去寫mapreduce,減少開發人員的學習成本。

擴充套件功能很方便。

1.)可擴充套件

hive可以自由的擴充套件集群的規模,一般情況下不需要重啟服務。

2.)延展性

hive支援使用者自定義函式,使用者可以根據自己的需求來實現自己的函式。

3.)容錯

良好的容錯性,節點出現問題sql仍可完成執行

優點:

1. 學習成本低,只要會sql就能用hive

2. 開發效率高,不需要程式設計,只需要寫sql

3. 模型簡單,易於理解

4. 針對海量資料的高效能查詢和分析

5. hiveql 靈活的可擴充套件性(extendibility)

6. 高擴充套件性(scalability)和容錯性

7. 與 hadoop 其他產品完全相容

缺點:

1.) 使用者介面:包括 cli、jdbc/odbc、webgui。

2.) 元資料儲存:通常是儲存在關聯式資料庫如 mysql , derby中。

3.) 直譯器、編譯器、優化器、執行器。

textfile:預設格式,資料不做壓縮,磁碟開銷大,資料解析開銷大。

sequencefile:hadoop api提供的一種二進位制檔案支援,使用方便,可分割,可壓縮,支援三種壓縮,none,record,block。

rcfile:是一種行列儲存相結合的方式。首先,將資料按行分塊,保證同乙個record在同乙個塊上,避免讀乙個記錄讀取多個block。其次,塊資料列式儲存,有利於資料壓縮和快速的列訪問。資料載入的時候效能消耗大,但具有較好的壓縮比和查詢響應。

資料傾斜是進行大資料計算時最經常遇到的問題之一。當我們在執行hiveql或者執行mapreduce作業時候,如果遇到一直卡在map100%,reduce99%一般就是遇到了資料傾斜的問題。資料傾斜其實是進行分布式計算的時候,某些節點的計算能力比較強或者需要計算的資料比較少,早早執行完了,某些節點計算的能力較差或者由於此節點需要計算的資料比較多,導致出現其他節點的reduce階段任務執行完成,但是這種節點的資料處理任務還沒有執行完成。

1)group by

group by,我使用hive對資料做一些型別統計的時候遇到過某種型別的資料量特別多,而其他型別資料的資料量特別少。當按照型別進行group by的時候,會將相同的group by欄位的reduce任務需要的資料拉取到同乙個節點進行聚合,而當其中每一組的資料量過大時,會出現其他組的計算已經完成而這裡還沒計算完成,其他節點的一直等待這個節點的任務執行完成,所以會看到一直map 100%  reduce 99%的情況。

解決方法:set hive.map.aggr=true  ;

set hive.groupby.skewindata=true

原理:hive.map.aggr=true 這個配置項代表是否在map端進行聚合

hive.groupby.skwindata=true 當選項設定為 true,生成的查詢計畫會有兩個 mr job。第乙個 mr job 中,map 的輸出結果集合會隨機分布到 reduce 中,每個 reduce 做部分聚合操作,並輸出結果,這樣處理的結果是相同的 group by key 有可能被分發到不同的 reduce 中,從而達到負載均衡的目的;第二個 mr job 再根據預處理的資料結果按照 group by key 分布到 reduce 中(這個過程可以保證相同的 group by key 被分布到同乙個 reduce 中),最後完成最終的聚合操作。

2)map和reduce優化。

1.當出現小檔案過多,需要合併小檔案。可以通過set hive.merge.mapfiles=true來解決。

2.單個檔案大小稍稍大於配置的block塊的大寫,此時需要適當增加map的個數。

解決方法:set mapred.map.tasks個數

3.檔案大小適中,但map端計算量非常大,如select id,count(*),sum(case when...),sum(case when...)...需要增加map個數。

-解決方法:set mapred.map.tasks個數,set mapred.reduce.tasks個數

3)當hiveql中包含count(distinct)時

如果資料量非常大,執行如select a,count(distinct b) from t group by a;型別的sql時,會出現資料傾斜的問題。

解決方法:使用sum...group by代替。如select a,sum(1) from (select a, b from t group by a,b) group by a;

4)當遇到乙個大表和乙個小表進行join操作時

解決方法:使用mapjoin 將小表載入到記憶體中。

如:select /*+ mapjoin(a) */ 

a.c1, b.c1 ,b.c2

from a join b 

where a.c1 = b.c1; 

5)遇到需要進行join的但是關聯欄位有資料為空,如表一的id需要和表二的id進行關聯

解決方法1:id為空的不參與關聯

比如:select * from log a 

join users b 

on a.id is not null and a.id = b.id 

union all 

select * from log a 

where a.id is null; 

解決方法2:給空值分配隨機的key值

如:select * from log a 

left outer join users b 

on case when a.user_id is null 

then concat(『hive』,rand() ) 

else a.user_id end = b.user_id; 

分割槽表指的是在建立表時指定的partition的分割槽空間,避免全表掃瞄,提高查詢效率

分割槽提供了乙個隔離資料和優化查詢的便利方式,不過並非所有的資料都可形成合理的分割槽,

尤其是需要確定合適大小的分割槽劃分方式,(不合理的資料分割槽劃分方式可能導致有的分割槽資料過多,而某些分割槽沒有什麼資料的尷尬情況)

試試分桶是將資料集分解為更容易管理的若干部分的另一種技術。

資料分桶的原理:

跟mr中的hashpartitioner的原理一模一樣

mr中:按照key的hash值去模除以reducttask的個數

hive中:按照分桶字段的hash值去模除以分桶的個數

hive也是 針對某一列進行桶的組織。hive採用對列值雜湊,然後除以桶的個數求餘的方式決定該條記錄存放在哪個桶當中。

好處:1、方便抽樣

2、提高join查詢效率

(1)獲得更高的查詢處理效率。桶為表加上了額外的結構,hive 在處理有些查詢時能利用這個結構。具體而言,連線兩個在(包含連線列的)相同列上劃分了桶的表,可以使用 map 端連線 (map-side join)高效的實現。比如join操作。對於join操作兩個表有乙個相同的列,如果對這兩個表都進行了桶操作。那麼將儲存相同列值的桶進行join操作就可以,可以大大較少join的資料量。

(2)使取樣(sampling)更高效。在處理大規模資料集時,在開發和修改查詢的階段,如果能在資料集的一小部分資料上試執行查詢,會帶來很多方便。

分桶字段必須是表中的字段

內部表資料由hive自身管理,外部表資料由hdfs管理;

刪除內部表會直接刪除元資料(metadata)及儲存資料;刪除外部表僅僅會刪除元資料,hdfs上的檔案並不會被刪除;

使用order by會引發全域性排序

使用sort by會引發區域性排序

配置檔案《命令列引數《引數宣告

大資料技術高頻面試題 hive

hive 和資料庫除了擁有類似的查詢語言,再無類似之處。1 資料儲存位置 hive 儲存在 hdfs 資料庫將資料儲存在塊裝置或者本地檔案系統中。2 資料更新 hive中不 建議對資料的改寫。而資料庫中的資料通常是需要經常進行修改的,3 執行延遲 hive 執行延遲較高。資料庫的執行延遲較低。當然,...

大資料面試題

海量資料面試題整理 1.給定a b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4g,讓你找出a b檔案共同的url?方案1 可以估計每個檔案安的大小為50g 64 320g,遠遠大於記憶體限制的4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。s 求每對小...

大資料面試題

1.列舉spark 比hadoop 快的原 因 以及現在存在的主要問題 2.描述下使用spark streaming 和 graphx實現實時計算的可行性,以及可能會遇到的問題 3.graphx的pregel api 只支援有向圖遍歷 如何實現無xiang 遍歷,描述思路 4.spark 通過yar...