hive中常見的問題以及解決方案

2021-10-03 23:19:47 字數 1541 閱讀 9982

hive中常見的問題以及解決方案

1.hive表關聯查詢,如何解決資料傾斜問題?

傾斜原因:map輸出資料按照key的hash分配到reduce中區,由於key分布不均勻,或者業務資料本身問題等造成reduce上的資料量差異過大

解決方案:

(1)引數調節

hive.map.aggr = true

hive.groupby.skuwindata = 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語句調節:

兩個表連線時,用小表來驅動達標可以提高系統的執行效率

兩表連線時,先執行的是兩個表的笛卡爾積,接著是on的條件篩選,然後是join型別外部行的新增

inner join:沒區別

left join:應該把大表放在後面

right join:應該把大表放在前面

① 選用join key分布最均勻的表作為驅動表。做好列裁剪和filter操作,以達到兩表做join 的時候,資料量相對變小的效果。

② 大小表join:

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

③ 大表join大表:

把空值的key變成乙個字串加上隨機數,把傾斜的資料分到不同的reduce上,由於null 值關聯不上,處理後並不影響最終結果。

④ count distinct大量相同特殊值:

count distinct 時,將值為空的情況單獨處理,如果是計算count distinct,可以不用處理,直接過濾,在最後結果中加1。如果還有其他計算,需要進行group by,可以先將值為空的記錄單獨處理,再和其他計算結果進行union。

2.hive內部表和外部表的區別?

建立表時:建立內部表時,會將資料移動到資料倉儲指向的路徑;若建立外部表,僅記錄資料所在的路徑,不對資料的位置做任何改變。

刪除表時:在刪除表的時候,內部表的元資料和資料會被一起刪除, 而外部表只刪除元資料,不刪除資料。這樣外部表相對來說更加安全些,資料組織也更加靈活,方便共享源資料。

3.hive桶表的理解

桶表是對資料進行雜湊取值,然後放到不同檔案中儲存。

資料載入到桶表時,會對字段取hash值,然後與桶的數量取模。把資料放到對應的檔案中。物理上,每個桶就是-表(或分割槽)目錄裡的乙個檔案,乙個作業產生的桶(輸出檔案)和reduce任務個數相同。

桶表專門用於抽樣查詢,是很專業性的,不是日常用來儲存資料的表,需要抽樣查詢時,才建立和使用桶表。

hive中遞迴 hive中常見問題

1 limit語句優化 eg.select from table name limit 100 在 hive 中,由於表的資料量往往較大,以上語句都會被優化 set hive.fetch.task.conversion none 會被關閉這項優化,強制起 mr 作業 預設配置值為 more 這些語句...

HIVE架構以及HIVE常見問題

hive是執行在yarn上的,資料儲存在hdfs上。將sql語句轉換為mapreduce,當然hive本身做了一些優化,有些任務不會走mapreduce。hive其實就是把結構化的資料檔案對映到表中,hive表的元資料資訊儲存在關係型資料庫中,具體可以參見我的另一篇部落格,配置了mysql資料庫。s...

網路程式設計中常見問題以及解決思路

最近在幫老師做乙個p2p的專案,客戶端包含註冊以及登陸功能,關於資料庫的選擇,嘗鮮採用了最新的mongodb,但是在執行簡單的demo的時候依然出現了許多的問題。文章會逐漸跟新,在我有時間的前提下 本地測試正常,部署到伺服器發現tcp通訊出現故障,本機作業系統win10,伺服器核心版本如下圖所示 在...