Hive基礎知識(二十三):數據傾斜優化

絕大部分任務都很快完成,只有一個或者少數幾個任務執行的很慢甚至最終執行失敗, 這樣的現象為數據傾斜現象。

一定要和數據過量導致的現象區分開,數據過量的表現為所有任務都執行的很慢,這個 時候只有提高執行資源才可以優化 HQL 的執行效率。

綜合來看,導致數據傾斜的原因在于按照 Key 分組以后,少量的任務負責絕大部分數據 的計算,也就是說產生數據傾斜的 HQL 中一定存在分組操作,那么從 HQL 的角度,我們可 以將數據傾斜分為單表攜帶了 GroupBy 字段的查詢和兩表(或者多表)Join 的查詢

1. 單表數據傾斜優化

1.1.?使用參數

當任務中存在 GroupBy 操作同時聚合函數為 count 或者 sum 可以設置參數來處理數據 傾斜問題。

是否在 Map 端進行聚合,默認為 True
set hive.map.aggr = true;
在 Map 端進行聚合操作的條目數目
set hive.groupby.mapaggr.checkinterval = 100000;

有數據傾斜的時候進行負載均衡(默認是 false)

set hive.groupby.skewindata = true;

當選項設定為 true,生成的查詢計劃會有兩個 MR Job。

1.2. 增加 Reduce 數量(多個 Key 同時導致數據傾斜)

1)調整 reduce 個數方法一

(1)每個 Reduce 處理的數據量默認是 256MB

set hive.exec.reducers.bytes.per.reducer = 256000000 

(2)每個任務最大的 reduce 數,默認為 1009

set hive.exec.reducers.max = 1009 

(3)計算 reducer 數的公式

N=min(參數 2,總輸入數據量/參數 1)(參數 2 指的是上面的 1009,參數 1 值得是 256M)

2)調整 reduce 個數方法二

在 hadoop 的 mapred-default.xml 文件中修改

設置每個 job 的 Reduce 個數

set mapreduce.job.reduces = 15;

2. Join 數據傾斜優化

2.1. 使用參數

在編寫 Join 查詢語句時,如果確定是由于 join 出現的數據傾斜,那么請做如下設置:

# join 的鍵對應的記錄條數超過這個值則會進行分拆,值根據具體數據量設置
set hive.skewjoin.key=100000;
# 如果是 join 過程出現傾斜應該設置為 true
set hive.optimize.skewjoin=false;

如果開啟了,在 Join 過程中 Hive 會將計數超過閾值 hive.skewjoin.key(默認 100000)的 傾斜 key 對應的行臨時寫進文件中,然后再啟動另一個 job 做 map join 生成結果。通過 hive.skewjoin.mapjoin.map.tasks 參數還可以控制第二個 job 的 mapper 數量,默認 10000。

set hive.skewjoin.mapjoin.map.tasks=10000;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36691.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36691.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36691.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Arduino平臺軟硬件原理及使用——SR04超聲波傳感器的使用

文章目錄: 一、超聲波傳感器工作原理 二、SR04超聲波庫的使用 三、SR04超聲波傳感器在Arduino中的使用 一、超聲波傳感器工作原理 如上圖所示:HCSR04超聲波傳感器擁有4個針腳,除了VCC接正極、GND接負極外,還有兩個引腳“Trig”及“…

Linux線程互斥鎖

目錄 🚩看現象,說原因 🚩解決方案 🚩互斥鎖 🚀關于互斥鎖的理解 🚀關于原子性的理解 🚀如何理解加鎖和解鎖是原子的 🚩對互斥鎖的簡單封裝 引言 大家有任何疑問,可…

【Android面試八股文】如何實現Activity窗口快速變暗

文章目錄 方式一:修改 WindowManager.LayoutParams 的screenBrightness屬性動態調整窗口的亮度方式二:使用 `WindowManager.LayoutParams` 的 `alpha` 屬性結合 `ValueAnimator` 來實現窗口漸變變暗的效果方式三:使用遮罩層在Android中實現Activity窗口快速變暗有幾種方法,…

CCSP自考攻略+經驗總結

備考攻略 備考攻略準備階段通讀階段精度階段總復習階段刷題階段命運審判 寫到最后 備考攻略 趁著對ssp知識點的理解還在,開始ccsp的考證之路,文章結構還是按照cissp備考篇的結構梳理。本次備考和cissp的離職在家備考不同,ccsp是在職利用非工…

如何用亞馬遜合作伙伴網絡快速上線跨境電商

目前跨境電商已成為行業發展主流,如何快速、低成本打造品牌海外獨立站和智能客服營銷中心、構建全鏈路跨境電商體系是出海電商商家都會遇到的難題。亞馬遜云科技憑借與亞馬遜電商平臺易于集成的先天優勢成為首選的電商解決方案平臺。本文介紹了如何用亞馬遜云科技平…

Elasticsearch8.x聚合查詢全面指南:從理論到實戰

聚合查詢的概念 聚合查詢(Aggregation Queries)是Elasticsearch中用于數據匯總和分析的查詢類型。它不同于普通的查詢,而是用于執行各種聚合操作,如計數、求和、平均值、最小值、最大值、分組等。 聚合查詢的分類 分桶聚合&…

centos7 安裝單機MongoDB

centos7安裝單機 yum 安裝 1、配置yum源 vim /etc/yum.repos.d/mongodb.repo [mongodb-org-7.0] nameMongoDB Repository baseurlhttps://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/7.0/x86_64/ gpgcheck1 enabled1 gpgkeyhttps://www.mongodb.org/static/pgp…

【監控】3.配置 Grafana 以使用 Prometheus 數據源

1 訪問 Grafana 打開瀏覽器,訪問 http://localhost:3000(默認端口)。使用默認的用戶名和密碼 admin/admin 登錄。 2 添加 Prometheus 數據源 進入 Grafana 儀表板,點擊左側菜單中的“Configuration” -> “Data Sources”。…

未來已來,如何打造智慧養殖場?

近年來,國家出臺了一系列扶持政策,以促進養殖行業高質量發展,推動行業轉型升級。在國家政策和市場需求的雙重驅動下,養殖行業正迎來前所未有的發展機遇。智慧養殖以其高效、智能和可持續的特點,正逐步取代傳統養殖方式…

6.26.4.1 基于交叉視角變換的未配準醫學圖像多視角分析

1. 介紹 許多醫學成像任務使用來自多個視圖或模式的數據,但很難有效地將這些數據結合起來。雖然多模態圖像通常可以在神經網絡中作為多個輸入通道進行配準和處理,但來自不同視圖的圖像可能難以正確配準(例如,[2])。因此,大多數多視…

電影搜索筆記

1 字幕組 2 磁力搜索 2.1 磁力大全 http://7809.org/cldq.html

吳恩達2022機器學習專項課程C2W3:2.27 選修_數據傾斜

目錄 處理不平衡數據集1.分類需求描述2.計算精確率和召回率 權衡精確率和召喚率1.手動調整閾值2.F1分數 總結 處理不平衡數據集 1.分類需求描述 如果你在處理一個機器學習應用,其中正例和負例的比例(用于解決分類問題)非常不平衡&#xff0…

多域名微信公眾號獲取授權(前后端分離,后端獲取微信用戶openid)

1.通過后端站點http://b.cn 跳轉至前端鏈接 http://aa.cn/v1/demo/demo public function index(){$identinput(ident);$this->redirect(http://aa.cn/?ident.$ident);}2.前端http://aa.cn 再跳轉到后端 https://c.com(此域名綁定微信公眾號:需備案) onShow() {console.lo…

數據庫怎么同步

數據庫要怎么同步呢,有很多方法,看你用什么數據庫,如果是Sqlserver,你要數據庫同步,那么可以使用自帶的訂閱發布,訂閱發布應該是不錯的方法,但是我上次要配置雙向同步,它的對等發布好像沒部署成…

Ansible-綜合練習-生產案例

斌的招兒 網上教程大多都是官網模板化的教程和文檔,這里小斌用自己實際生產環境使用的例子給大家做一個詳解。涉及到一整套ansible的使用,對于roles的使用,也僅涉及到tasks和files目錄,方便大家快速上手并規范化管理。 0.環境配置…

想關掉一個qwidget是用deleteLater還是用close

在Qt中關閉一個QWidget可以選擇使用close()或者deleteLater()兩種方法,根據具體需求,兩者有不同的適用場景: close()方法: close()會觸發QWidget的closeEvent,也就是說,它會產生一個關閉事件,可…

聚星文社AI工具

聚星文社AI工具是一種基于人工智能技術開發的工具,旨在輔助作者和寫作人員提升創作效率和質量。 點擊下載 該工具可以提供多項功能,包括語法糾錯、智能推薦、文章自動摘要等。 通過使用聚星文社AI工具,用戶可以在寫作過程中得到即時的糾錯建…

memcached服務介紹

memcached 基礎概念安裝使用 基礎概念 Memcached 是一個高性能的分布式內存對象緩存系統,用于減少數據庫負載,加速動態 Web 應用。 Memcached 的基本概念 緩存:Memcached 的核心功能是緩存數據,它將經常訪問的數據存儲在內存中…

ECMAScript6介紹及環境搭建

這實際上說明,對象的解構賦值是下面形式的簡寫。 let { foo: foo, bar: bar } { foo: ‘aaa’, bar: ‘bbb’ }; 也就是說,對象的解構賦值的內部機制,是先找到同名屬性,然后再賦給對應的變量。真正被賦值的是后者,而…