主頁 >  其他 > Hive-常見調優方式 && 兩個面試sql

Hive-常見調優方式 && 兩個面試sql

2021-02-24 06:41:33 其他

Hive作為大資料領域常用的資料倉庫組件,在設計和開發階段需要注意效率,影響Hive效率的不僅僅是資料量過大;資料傾斜、資料冗余、job或I/O過多、MapReduce分配不合理等因素都對Hive的效率有影響,對Hive的調優既包含對HiveQL陳述句本身的優化,也包含Hive配置項和MR方面的調
整,

從以下三個方面展開:
架構優化
引數優化
SQL優化

1.架構方面

執行引擎方面針對公司內平臺的資源,選擇更合適的更快的引擎,比如MR、TEZ、Spark等,

如果選擇是TEZ引擎,可以在優化器時候開啟向量化的優化器,另外可以選擇成本優化器CBO,配置分別如下:

set hive.vectorized.execution.enabled = true; -
- 默認 false
set hive.vectorized.execution.reduce.enabled = true; -
- 默認 false
SET hive.cbo.enable=true; --從 v0.14.0默認
true
SET hive.compute.query.using.stats=true; -- 默認false
SET hive.stats.fetch.column.stats=true; -- 默認false
SET hive.stats.fetch.partition.stats=true; -- 默認true 

在表的設計上優化,比如選擇磁區表,分桶表,以及表的存盤格式,為了減少資料傳輸,可以使用壓縮的方式,下面給幾個引數(更多引數可以查看官網)

-- 中間結果壓縮
SET
hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec ;
-- 輸出結果壓縮
SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress.codec =org.apache.hadoop.io.compress.SnappyCodc

2.引數優化

第二部分是引數優化,其實上面架構部分,有部分也是通過引數來控制的,這一部分的引數控制主要有下面幾個方面

本地模式、嚴格模式、JVM重用、并行執行、推測執行、合并小檔案、Fetch模式

2.1 本地模式

當資料量較小的時候,啟動分布式處理資料會比較慢,啟動時間較長,不如本地模式快,用下面的引數來調整

SET hive.exec.mode.local.auto=true; -- 默認 false 
小
SET hive.exec.mode.local.auto.inputbytes.max=50000000; --輸入檔案的大小小于 hive.exec.mode.local.auto.inputbytes.max 配置的大
SET hive.exec.mode.local.auto.input.files.max=5; -- 默認 4  map任務的數量小于 hive.exec.mode.local.auto.input.files.max 配置的
大小

2.2 嚴格模式

這其實是個開關,滿足下面三個陳述句時候,就會失敗,如果不開啟就正常執行,開啟后就讓這些陳述句自動失敗

hive.mapred.mode=nostrict
 -- 查詢磁區表時不限定磁區列的陳述句;
 -- 兩表join產生了笛卡爾積的陳述句;
 -- 用order by來排序,但沒有指定limit的陳述句 

2.3 Jvm重用

在mr里面,是以行程為單位的,一個行程就是一個Jvm,其實像短作業,這些行程能夠重用就會很快,但是它的缺點是會等任務執行完畢后task插槽,這個在資料傾斜時候較為明顯,開啟這個使用下面的引數

SET mapreduce.job.jvm.numtasks=5;

2.4 并行執行

Hive的查詢會轉為stage,這些stage并不是相互依賴的,可以并行執行這些stage,使用下面的引數

SET hive.exec.parallel=true; -- 默認false
SET hive.exec.parallel.thread.number=16; -- 默認8

2.5 推測執行

這個引數的作用是,使用空間資源來換取得到最終結果的時間,比如由于網路,資源不均等原因,某些任務運行特別慢,會啟動備份行程處理同一份資料,并最終選用最先成功的計算結果作為最終結果,

set mapreduce.map.speculative=true
set mapreduce.reduce.speculative=true
set hive.mapred.reduce.tasks.speculative.execution=true

2.6 合并小檔案

在map執行前面,先合并小檔案來減少map數

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

在任務結束后,合并小檔案

# 在 map-only 任務結束時合并小檔案,默認true
SET hive.merge.mapfiles = true;
# 在 map-reduce 任務結束時合并小檔案,默認false
SET hive.merge.mapredfiles = true;
# 合并檔案的大小,默認256M
SET hive.merge.size.per.task = 268435456;
# 當輸出檔案的平均大小小于該值時,啟動一個獨立的map-reduce任務進行檔案merge
SET hive.merge.smallfiles.avgsize = 16777216;

2.7 Fetch模式

最后一種fetch模式,則是在某些情況下盡量不跑mr,比如查詢幾個欄位,全域查找,欄位查,limit查等情況

hive.fetch.task.conversion=more

3.sql優化

這一部分較復雜,可能涉及到資料傾斜問題,至于資料傾斜問題一直是大資料處理的不可比避免的一個問題,處理方式也較多

3.1 sql優化

sql優化是開發人員最容易控制的部分,往往是經驗使之,大約總結一下又下面的方式

列,磁區拆解,sort by 代替 order by, group by 代替count(distinct) ,group by的預聚合(通過引數來控制),傾斜配置項,map join,單獨過濾空值,適當調整map 和 reduces數,這些在作業中幾乎都會碰到,盡可能去優化他們呢是你要做的

3.2 傾斜均衡配置項

這個配置與 group by 的傾斜均衡配置項異曲同工,通過 hive.optimize.skewjoin來配置,默認false,如果開啟了,在join程序中Hive會將計數超過閾值 hive.skewjoin.key (默認100000)的傾斜key對應的行臨時寫進檔案中,然后再啟動另一個job做map join生成結果,通過 hive.skewjoin.mapjoin.map.tasks 引數還可以控制第二個job的mapper數量,默認1000

3.3 單獨處理傾斜key

如果傾斜的 key 有實際的意義,一般來講傾斜的key都很少,此時可以將它們單獨抽取出來,對應的行單獨存入臨時表中,然后打上一個較小的亂數前綴(比如0~9),最后再進行聚合,不要一個Select陳述句中,寫太多的Join,一定要了解業務,了解資料,(A0-A9)分成多條陳述句,分步執行;(A0-A4; A5-A9);先執行大表與小表的關聯;

4.兩個SQL

4.1 找出全部奪得3連貫的隊伍

team,year
活塞,1990
公牛,1991
公牛,1992


--
 -- 1 排名
select team, year, 
row_number() over (partition by team order by year) as rank
  from t1;

-- 2 獲取分組id
select team, year, 
row_number() over (partition by team order by year) as rank,
(year -row_number() over (partition by team order by year)) as groupid
  from t1;

-- 3 分組求解
select team, count(1) years
  from (select team, 
        (year -row_number() over (partition by team order by year)) as groupid
          from t1
       ) tmp
group by team, groupid
having count(1) >= 3;

4.2 找出每個id在在一天之內所有的波峰與波谷值

波峰:
這一時刻的值 > 前一時刻的值
這一時刻的值 > 后一時刻的值
波谷:
這一時刻的值 < 前一時刻的值
這一時刻的值 < 后一時刻的值
id time price 前一時刻的值(lag) 后一時刻的值(lead)
sh66688, 9:35, 29.48 null 28.72
sh66688, 9:40, 28.72 29.48 27.74
sh66688, 9:45, 27.74
sh66688, 9:50, 26.75
sh66688, 9:55, 27.13
sh66688, 10:00, 26.30
sh66688, 10:05, 27.09
sh66688, 10:10, 26.46
sh66688, 10:15, 26.11
sh66688, 10:20, 26.88
sh66688, 10:25, 27.49
sh66688, 10:30, 26.70
sh66688, 10:35, 27.57
sh66688, 10:40, 28.26
sh66688, 10:45, 28.03

-- 思路:關鍵是找到波峰波谷的特征
-- 波峰的特征: 大于前一個時間段、后一個時間段的值
-- 波谷的特征: 小于前一個時間段、后一個時間段的值
-- 找到這個特征SQL就好寫了

select id, time, price,
       case when price > beforeprice and price > afterprice then "波峰"
            when price < beforeprice and price < afterprice then "波谷" end as feature
  from (select id, time, price,
               lag(price) over (partition by id order by time) beforeprice,
               lead(price) over (partition by id order by time) afterprice
          from t2
        )tmp
 where (price > beforeprice and price > afterprice) or
       (price < beforeprice and price < afterprice);

吳邪,小三爺,混跡于后臺,大資料,人工智能領域的小菜鳥,
更多請關注
file

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262848.html

標籤:其他

上一篇:二分圖最小點覆寫構造方案+König定理證明

下一篇:HttpRunner介面自動化測驗框架

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more