版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
大數(shù)據(jù)項目之電商數(shù)倉(即席查詢)
第1章Presto
1.1Presto簡介
1.1.1Presto概念
夕Presto概念◎尚硅谷
Presto是一個開源的分布式SQL查詢引擎,數(shù)據(jù)量支持GB到PB字節(jié),主要用
來處理秒級查詢的場景。
注意:雖然Presto可以解析SQL,但它不是一個標(biāo)準(zhǔn)的數(shù)據(jù)庫。不是MySQL、
Oracle的代替品,也不能用來處理在線事務(wù)(OLTP)。
1.1.2Presto架構(gòu)
夕Presto架構(gòu)
Presto由一個Coordinator和多個Worker組成。
4)Calolog表示數(shù)據(jù)源。一個Caielog包含Schema和Connector
Catalog
Schema
HiveMetasiorePrestoWorkerHiveConnectorHive
Table
1)由客戶端提交查詢,?3)Worker負(fù)誑執(zhí)行
從Prcslo命令行CLI提交到I任務(wù)和處理數(shù)據(jù)
Coordinator5
Catalog
Schema
PrestoCLI?PrestoCoordinatorPrestoWorkerKafkaConnectorKafka
Table
2)Coordinator解析查詢計'
劃,然后把任務(wù)分發(fā)給
Worker執(zhí)彳:Catalog
Schema
?PrestoWorkerRedisConnectorRedis
Table
7)Coordinator^負(fù)貴從Worker獲
取結(jié)果并返回最終結(jié)果給Cliem。
5)Conneclor是適配器,6)Schema類似于
用于Presto和數(shù)據(jù)源Mysql中數(shù)據(jù)庫,Table
)
(如Hive、Rcdis的類似,MySQL中表
連接,類似于JDBC.
1.1.3Presto優(yōu)缺點
沙Presto優(yōu)缺點o商硅谷
MapReducePresto1)優(yōu)點
Allstagesarepipe-lined
■■■■■■■■■?Nowaittime(1)Presto基于內(nèi)存運算,減少了硬盤10,計算更快。
/Nofault-tolerance
<<
Waitbetw^tn/?^*****^*~^(2)能夠連接多個數(shù)據(jù)源,跨數(shù)據(jù)源連表查,如從
stages
Hive查詢大量網(wǎng)站訪問記錄,然后從Mysql中匹配出設(shè)備
memory-to-memory信息。
datatransfer
■■SBIKSfl/NodiskIO
Writedatai/Datachunkmust
todisklnmemory
2)缺點
Presto能夠處理PB級別的海量數(shù)據(jù)分析,但Pest。并不是
把PB級數(shù)據(jù)都放在內(nèi)存中計算的。而是根據(jù)場景,如ICount,
AVG等聚合運算,是邊讀數(shù)據(jù)邊il算,再清內(nèi)存,再讀數(shù)據(jù)
再計算,這種耗的內(nèi)存并不高。但是連表查,就可能產(chǎn)生大
量的臨時數(shù)據(jù),因此速度會變慢,反而Hive此時會更擅長。
1.1.4Presto>Impala性能比較
hUDS://blog.csdn.cet/uO12551524/article/details/79124532
測試結(jié)論:Impala性能稍領(lǐng)先于Presto,但是Presto在數(shù)據(jù)源支持上非常豐富,包括
Hive、圖數(shù)據(jù)庫、傳統(tǒng)關(guān)系型數(shù)據(jù)庫、Redis等。
1.2Presto安裝
1.2.1PrestoServer安裝
o)官網(wǎng)地址
https://prestodb.github.io/
1)下載地址
https://repoL/maven2/com/facebook/presto/presto-servei70.196/presto-server-
0.196.tar.gz
2),各presto-server-0.196.tar.gz導(dǎo)入hadoop102的/opt/software目錄下,并解壓至lj/opt/module
目錄
[atguigu@hadoopl02software]$tar-zxvfpresto-server-
0.196.tar.gz-C/opt/module/
3)修改名稱為presto
[atguigu@hadoopl02module]$mvpresto-server-0.196/presto
4)進入到/opt/module/presto目錄,并創(chuàng)建存儲數(shù)據(jù)文件夾
[atguigu@hadoopl02presto]$mkdirdata
5)進入到/opt/module/presto目錄,并創(chuàng)建存儲配置文件文件夾
[atguigu@hadoopl02presto]$mkdiretc
6)配置在/opt/module/presto/etc目錄下添加jvm.config配置文件
[atguigu@hadoopl02etc]$vimjvm.config
添加如下內(nèi)容
-server
-Xmxl6G
-XX:+UseGlGC
-XX:GlHeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:4-HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
7)Presto可以支持多個數(shù)據(jù)源,在Presto里面叫catalog,這里我們配置支持Hive的數(shù)據(jù)
源,配置一個Hive的catalog
[atguigu@hadoopl02etc]$mkdircatalog
[atguigu@hadoopl02catalog]$vimperties
添加如下內(nèi)容
=hive-hadoop2
hive.metastore.uri=thrift://hadoopl02:9083
8)將hadoopl02上的presto分發(fā)到hadoopl03、hadoop104
[atguigu@hadoopl02module]$xsyncpresto
9)分發(fā)之后,分別進入hadoopl02、hadoopl03^hadoopl04三臺主機的/opt/module/presto/elc
的路徑。配置node屬性,nodeid每個節(jié)點都不一樣。
[atguigu@hadoopl02etc]$vimperties
node.environment=production
node.data-dir=/opt/module/presto/data
[atguigu@hadoopl03etc]$vimperties
node.environment=production
node.
node,data-dir=/opt/module/presto/data
[atguigu@hadoopl04etc]$vimperties
node.environment=production
node.
node.data-dir=/opt/module/presto/data
10)Presto是由一個coordinator節(jié)點和多個worker節(jié)點組成。在hadoopl02上配置成
coordinator,在hadoopl03、hadoop104上配置為worker。
(1)hadoop102上配置coordinator節(jié)點
[atguigu@hadoopl02etc]$vimperties
添加內(nèi)容如下
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery-server.enabled=true
discovery.uri=http://hadoopl02:8881
(2)hadoopl03^hadoop104上配置worker節(jié)點
[atguigu@hadoopl03etc]$vimperties
添加內(nèi)容如下
coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://hadoopl02:8881
[atguigu@hadoopl04etc]$vimperties
添加內(nèi)容如下
coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://hadoopl02:8881
11)在hadoopl02的/opt/module/hive目錄下,啟動HiveMetastore,用atguigu角色
[atguigu@hadoopl02hive]$
nohupbin/hive--servicemetastore>/dev/null2>&1&
12)分別在hadoopl02、hadoopl03>hadoop104上啟動PrestoServer
(1)前臺啟動Presto,控制臺顯示日志
[atguigu@hadoopl02presto]$bin/launcherrun
[atguigu@hadoopl03presto]$bin/launcherrun
[atguigu@hadoopl04presto]$bin/launcherrun
(2)后臺啟動Presto
[atguigu@hadoopl02presto]$bin/launcherstart
[atguigu@hadoopl03presto]$bin/launcherstart
[atguigu@hadoopl04presto]$bin/launcherstart
13)11志查看路徑/opt/module/presto/data/var/log
1.2.2Presto命令行Client安裝
1)下載Presto的客戶端
https://repol.maven.ovg/maven2/com/faceboKk/p)esto/Dresto-cli/0.196/Dresto-cli-0.196?
execulablc.jar
2)將presto-cli-0.196-executable.jar上傳至ijhadoop102W/opt/module/presto文件夾下
3)修改文件名稱
[atguigu@hadoopl02presto]$mvpresto-cli-0.196-executable.jar
prestocli
4)增加執(zhí)行權(quán)限
[atguigu@hadoopl02presto]$chmod+xprestocli
5)啟動prestocli
[atguigu@hadoopl02presto]$./prestocli--serverhadoopl02:8881
--cataloghive——schemadefault
6)Presto命令行操作
Presto的命令行操作,相當(dāng)于Hive命令行操作。每個表必須要加上schema。
例如:
select*fromschema.tablelimit100
1.2.3Presto可視化Client安裝
1)將yanagishima-18.0.zip上傳至Uhadoopl02的/opt/module目錄
2)解壓縮yanagishima
[atguigu@hadoopl02module]$unzipyanagishima-18.0.zip
cdyanagishima-18.0
3)進入至lj/opt/module/yanagishima-18.0/conf文件夾,編寫perties酉己置
[atguigu@hadoopl02conf]$vimyanagishima.properties
添加如下內(nèi)容
jetty.port=7080
presto.datasources=atguigu-presto
presto,coordinator.server.atguigu-presto=http://hadoopl02:8881
catalog.atguigu-presto=hive
schema.atguigu-presto=default
sql.query.engines=presto
4)S/opt/module/yanagishima-18.0路徑下啟動yanagishima
[atguigu@hadoopl02yanagishima-18.0]$
nohupbin/yanagishima-start.sh>y.log2>&1&
5)啟動web頁面
http://hadoop102:7080
看到界面,進行查詢了。
6)查看表結(jié)構(gòu)
Schema<:>TableOColumnrjExtraComment
defaultdm.versson.aBocationntws.ld
mid.daMy.nwis.dtlang
lnfornwtion.schemamid.news.histofy.divttsion.nMne
mid_U5?r_hljW?y.dt
area
ods.ad.dt
toul.dhpUy
ods_background_dt
toul.dkk
partitionkey
ods.dtsplay.dt
ods.newsdeuilpro.dt
(xpandColumnsMLICT?FROM...WHEUot-2eiW22-LIMITtoe
這里有個TreeView,可以查看所有表的結(jié)構(gòu),包括Schema、表、字段等。
比如執(zhí)行select*fromhive.dw_weather.tmp_news_clicklimit10,這個句子里Hive這個
詞可以刪掉,是上面配置的Catalog
1MHl111111HH11111aM1Hli11MlM
I1select,fromhive.dwweather.middailynowsdtlimit10
CMBIC;hive,?Basetable?view
Schema□Table。ColumnTypeExtr
defaultdm.verslon.allocatlon二news.ldvarchar
dw.weathermld.dally.news.dtvarchar
lnformation_schemamld.news.hlstory.dtvarchar
testmid_user_history_dt
varchar
ods.ad.dt
Integer
ods.background.dt
integer
ods_basedata_dt
varcharpan
ods.display.dt
ods.loadlng.dt
ods.nesvsdetailpro.dt
每個表后面都有個復(fù)制鍵,點一下會復(fù)制完整的表名,然后再上面框里面輸入sql語句,
ctrl+enter鍵執(zhí)行顯示結(jié)果
Vyanagishima18.0au?M<eatiguigu-prestob.presto
?.elect?fromhiv?.dw_w??ther.tmp_n?ws_c1ick|1im:t10
品Treeview三QueryListSHistory★BookmarkSResultG>Timeline
20190223.122817.00012_54w6c■2019/02/2320:28:258.03278105
linenewsidlangversion_nameareauserjd
1n4260en127MXu2868
2n0010en133MXu6515
?6759P?1.0.7MX□9947
4n8048en1.2.5MXU5196
n3795en13.5MXU5296
6n3021en13.0MXU8066
7n7023en1.3.8MXU8958
8(17696enMXu5696
9n9O67Pt1.12MXU0179
10n6068en12.6MX□3771
1.3Presto優(yōu)化之?dāng)?shù)據(jù)存儲
1.3.1合理設(shè)置分區(qū)
與Hive類似,Presto會根據(jù)元數(shù)據(jù)信息讀取分區(qū)數(shù)據(jù),合理的分區(qū)能減少Presto數(shù)據(jù)
讀取量,提升查詢性能。
1.3.2使用列式存儲
Presto對ORC文件讀取做了特定優(yōu)化,因此在Hive中創(chuàng)建Presto使用的表時,建議采
用ORC格式存儲。相對于Parquet,Presto對ORC支持更好。
1.3.3使用壓縮
數(shù)據(jù)壓縮可以減少節(jié)點間數(shù)據(jù)傳輸對io帶寬壓力,對于即席查詢需要快速解壓,建議
采用Snappy壓縮。
1.4Presto優(yōu)化之查詢SQL
1.4.1只選擇使用的字段
由于采用列式存儲,選擇需要的字段可加快字段的讀取、減少數(shù)據(jù)量。避免采用*讀取
所有字段。
[GOOD]:SELECTtime,user,hostFROMtbl
[BAD]:SELECT*FROMtbl
1.4.2過濾條件必須加上分區(qū)字段
對于有分區(qū)的表,where語句中優(yōu)先使用分區(qū)字段進行過濾。acct.day是分區(qū)字段,
visit_time是具體訪問時間。
[GOOD]:SELECTtime,user,hostFROMtblwhereacct_day=20171101
[BAD]:SELECT*FROMtblwherevisit_time=20171101
1.4.3GroupBy語句優(yōu)化
合理安排Groupby語句中字段順序?qū)π阅苡幸欢ㄌ嵘?。將GroupBy語句中字段按照每
個字段distinct數(shù)據(jù)多少進行降序排列。
[GOOD]:SELECTGROUPBYuid,gender
[BAD]:SELECTGROUPBYgender,uid
1.4.4Orderby時使用Limit
Orderby需要掃描數(shù)據(jù)到單個worker節(jié)點進行排序,導(dǎo)致單個worker需要大量內(nèi)存。
如果是查詢TopN或者BottomN,使用limit可減少排序計算和內(nèi)存壓力。
[GOOD]:SELECT*FROMtblORDERBYtimeLIMIT100
[BAD]:SELECT*FROMtblORDERBYtime
1.4.5使用Join語句時將大表放在左邊
Presto中join的默認(rèn)算法是broadcastjoin,即將join左邊的表分割到多個worker,然后
將join右邊的表數(shù)據(jù)整個復(fù)制一份發(fā)送到每個worker進行計算。如果右邊的表數(shù)據(jù)量太大,
則可能會報內(nèi)存溢出錯誤。
[GOOD]SELECT???FROMlargetable1joinsmalltableson1.id
=s.id
[BAD]SELECT.?,FROMsmall_tablesjoinlargetable1on1.id
=s.id
1.5注意事項
1.5.1字段名引用
避免和關(guān)鍵字沖突:MySQL對字段加反引號'、Presto對字段加雙引號分割
當(dāng)然,如果字段名稱不是關(guān)鍵字,可以不加這個雙引號-。
1.5.2時間函數(shù)
對于Timestamp,需要進行比較的時候,需要添加Timestamp關(guān)鍵字,而MySQL中對
Timestamp可.以直接進行比較。
//MySQL的寫法*/
SELECTtFROMaWHEREt>f2017-01-0100:00:00';
/*Presto中的寫法*/
SELECTtFROMaWHEREt>timestamp'2017-01-0100:00:00*;
1.5.3不支持INSERTOVERWRITE語法
Presto中不支持insertoverwrite語法,只能先delete,然后insertintOo
1.5.4PARQUET格式
Presto目前支持Parquet格式,支持查詢,但不支持inserto
第2章Druid
2.1Druid簡介
2.1.1Druid概念
夕Druid簡介@商硅谷
Druid是一個快速的列式分布式的支持實時分析的數(shù)據(jù)存儲系統(tǒng)。它在處理PB
級數(shù)據(jù)、毫秒級查詢、數(shù)據(jù)實時處理方面,比傳統(tǒng)的OLAP系統(tǒng)有了顯著的性能
改進。
Druid的官方網(wǎng)站是http:〃druid.io。
注意:阿里巴巴也曾創(chuàng)建過一個開源項目叫作Druid(簡稱阿里Druid),它是
一個數(shù)據(jù)庫連接池的項目。阿里Druid和本文討論的Druid沒有任何關(guān)系,它們解
決完全不同的問題。
2.1.2Druid特點
Druid特點@造硅谷
1)列式存儲格式。Druid使用面向列的存儲,它只需要加載特定查詢所需要的列。查詢速度迅速快。
2)可擴展的分布式系統(tǒng)。Druid通常部署在數(shù)十到數(shù)百臺服務(wù)器的集群中,并且提供數(shù)百萬條/秒的攝
取率,保留數(shù)百萬條記錄,以及亞秒級到幾秒鐘的查詢延遲。
3)大規(guī)模的并行處理.Druid可以在整個集群中進行大規(guī)模的并行查詢。
4)實時或批量攝取.Druid可以實時攝取數(shù)據(jù)(實時獲取的數(shù)據(jù)可立即用于查詢)或
批量處理數(shù)據(jù)。
5)自愈,自平衡,易操作。集群擴展和縮小,只需添加或刪除服務(wù)器,集群將在后臺自動重新平衡,
無需任何停機時間。
6)數(shù)據(jù)進行了有效的預(yù)聚合或預(yù)計算,查詢速度快。
7)數(shù)據(jù)的結(jié)果應(yīng)用了Bitmap壓縮算法°
2.1.3Druid應(yīng)用場景
S>Druid應(yīng)用場景◎尚硅谷
1)適用于清洗好的記錄實時錄入,但不需要更新操作
2)適用于支持寬表,不用Join的方式(換句話說就是一張單表)
3)適用于可以總結(jié)出基礎(chǔ)的統(tǒng)計指標(biāo),用一個字段表示
4)適用于實時性要求高的場景
5)適用于對數(shù)據(jù)質(zhì)量的敏感度不高的場景
2.1.4Druid對比Impala/Presto/SparkSQL/Kylin/EIasticsearch
Druid對比Impala/Presto/SparkSQL/Kylin/EIasticsearch。商硅谷
飆?ES畫■聞組3國?國4)SparkSQL:基于Spark平臺上的一個OLAP框架,
YYNNNN基本思路是增加機器來并行計算,從而提高查詢速
YYYYYY
(開發(fā)中)丫丫度。
SQL支持NYYN
鹿線YYYYYY
實時YN(開發(fā)中)NNNY
)最大的特點是使用了倒排索引解決索引問題。
精確去里NYYYYN5ES:
多表JoinNYYYYN根據(jù)研究,ES在數(shù)據(jù)獲取和聚集用的資源比在Druid
JDBCforBlNYYYYN立
MJ。
1)Druid:i出一個實時處理時序數(shù)據(jù)的OLAP數(shù)據(jù)庫,因為它的索引首先按照6)框架選型:
時間分片,:在詢的時候也是按照時間線去路由索引。(1)從超大數(shù)據(jù)的查詢效率來看:
Druid>Kylin>Presto>SparkSQL
2)Kylin:出定心是Cube,Cube是?種預(yù)計算技術(shù),基本思路是預(yù)先對數(shù)據(jù)作”
(2)從支持的數(shù)據(jù)源種類來講:
多維索引,:性詢時只掃描索引而不訪問原始數(shù)據(jù)從而提速。
Presto>SparkSQL>Kylin>Druid
3)Presto:它沒有使用MapReduce,大部分場景下比Hive快?個數(shù)量級,其
中的關(guān)鍵是所有的處理都在內(nèi)存中完成。
4)Impala:基于內(nèi)存運算,速度快.支持的數(shù)據(jù)源沒仃P(guān)resto?
2.2Druid框架原理
沙Druid框架原理O商硅谷
4)拙調(diào)。點:主5)統(tǒng)治老:進程監(jiān)Dn?dnodM
要負(fù)責(zé)歷史N點的數(shù)據(jù)視MiddleManager進程,并ExternalDcpendanc***
負(fù)蛟均衡,以及通過規(guī)且是數(shù)據(jù)攝入Druid的控制
則(Rule)管理數(shù)據(jù)的CoordinatorOverlord器,他們負(fù)費將提取任務(wù)
Nodes
生命周期.Ncxies分配給MiddleManagers并
協(xié)冏Segement發(fā)布,
3)森諭磔點:接收客戶端
位詢請求,并將這些杳詢轉(zhuǎn)發(fā)給
Historicals^lMiddleManagers.
StrMwnmoDaU
Broket
MetadataStorageZookeeper??dQuertet
Nodes當(dāng)Brokers從這些子杳詢中
BattftDato
收到結(jié)果時,它們會合并這些結(jié)
1)中間管理節(jié)點,及時8>Zookeeper:為Q
果并將它們返回給調(diào)用者.
掇入實時數(shù)據(jù).已生成7)元數(shù)現(xiàn)年.存筒Druid集科的:Druid集群提供以執(zhí)行協(xié)調(diào)
元數(shù)樹信息,比如的相關(guān)信息.■查詢節(jié)點果刖了線存技術(shù)
Segment數(shù)據(jù)文件.Segment服務(wù).如內(nèi)部服務(wù)的監(jiān)控.
一般用MySQl.協(xié)調(diào)和領(lǐng)導(dǎo)者選舉.
Historical
DeepStorage
Nodes.
2)歷史。點:加栽已生成好的數(shù)據(jù)文件,以供數(shù)據(jù)有
)數(shù)陽文件存儲渾:存放生成的數(shù)據(jù)文件,并
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 供應(yīng)鏈倉儲租賃合同范本
- 2024補充協(xié)議范本:專業(yè)修訂下載
- 贈送貓咪合同范本
- 員工食堂合同范本
- 私人打井合同范本
- 齊齊哈爾大學(xué)《嵌入式nux內(nèi)核分析與設(shè)計》2023-2024學(xué)年期末試卷
- 齊齊哈爾大學(xué)《科學(xué)技術(shù)哲學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024屆廣東省佛山市順德區(qū)高三第二次模擬考試卷數(shù)學(xué)試題
- 齊齊哈爾大學(xué)《初等數(shù)學(xué)研究》2022-2023學(xué)年第一學(xué)期期末試卷
- 家具養(yǎng)護合同范本
- 在線網(wǎng)課知道智慧《電路(1)(山大)》單元測試考核答案
- 不履行合同義務(wù)催告函范文
- 小學(xué)二年級上冊數(shù)學(xué)-數(shù)角的個數(shù)專項練習(xí)
- 項目目標(biāo)成本測算書樣表
- 家長會課件:小學(xué)四年級數(shù)學(xué)期中家長會課件
- 職業(yè)生涯規(guī)劃概述課件
- 九年級英語《Unit 6 When was it invented》說課稿
- 馬渭麗《月光下的中國》
- 2024屆高考英語復(fù)習(xí)語法填空課件
- 原地8字舞龍課課件高一上學(xué)期體育與健康人教版
- 醫(yī)院感染管理培訓(xùn)課件消毒劑的選擇與使用
評論
0/150
提交評論