大數(shù)據(jù)項目之電商數(shù)倉即席查詢數(shù)據(jù)倉庫_第1頁
大數(shù)據(jù)項目之電商數(shù)倉即席查詢數(shù)據(jù)倉庫_第2頁
大數(shù)據(jù)項目之電商數(shù)倉即席查詢數(shù)據(jù)倉庫_第3頁
大數(shù)據(jù)項目之電商數(shù)倉即席查詢數(shù)據(jù)倉庫_第4頁
大數(shù)據(jù)項目之電商數(shù)倉即席查詢數(shù)據(jù)倉庫_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論