???????? 最近在跟一位粉絲聊天,聊起來了做離線數(shù)倉時(shí)該用那些技術(shù)棧编饺。于是根據(jù)我的經(jīng)驗(yàn)和參考一些資料于就有本篇文章。在這里我會(huì)分享三個(gè)案例响驴,僅供參考反肋。
案例一、小型公司
???????? 首先我們要明白一點(diǎn)小型公司人員并不多其次服務(wù)器的配置有不是很高踏施,這時(shí)如果要做數(shù)倉使用到的大數(shù)據(jù)組件就不可能了石蔗,那我們就使用傳統(tǒng)數(shù)據(jù)庫來進(jìn)行講解。
1.1 技術(shù)選型
???????? ?首先公司在選擇一個(gè)技術(shù)時(shí)需要考慮成本的畅形,比如人員的安排养距,公司的員工對(duì)大數(shù)據(jù)的組件都不是很了解,如果選擇大數(shù)據(jù)的組件學(xué)習(xí)成本較高日熬,可以還會(huì)找一批大數(shù)據(jù)的員工進(jìn)來開發(fā)棍厌,提高了項(xiàng)目的成本,由于數(shù)據(jù)量也不是很高1年也就幾百萬的數(shù)據(jù)量竖席,目前市場(chǎng)上的數(shù)據(jù)庫也是支持存儲(chǔ)的耘纱,MySQL
、oracle
毕荐,SQL server
該選擇那個(gè)一個(gè)那束析?
MySQL、oracle憎亚、SQL server 對(duì)比
MySQL優(yōu)缺點(diǎn)優(yōu)
- 它使用的核心線程是完全多線程员寇,支持多處理器。
- 有多種列類型:1第美、2蝶锋、3、4什往、和8字節(jié)長(zhǎng)度自有符號(hào)/無符號(hào)整數(shù)扳缕、FLOAT、DOUBLE、CHAR躯舔、VARCHAR贡必、TEXT、BLOB庸毫、DATE、TIME衫樊、DATETIME飒赃、 TIMESTAMP、YEAR科侈、和ENUM類型载佳。
- 它通過一個(gè)高度優(yōu)化的類庫實(shí)現(xiàn)SQL函數(shù)庫并像他們能達(dá)到的一樣快速,通常在查詢初始化后不該有任何內(nèi)存分配臀栈。沒有內(nèi)存漏洞蔫慧。
- 全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函數(shù)(COUNT()权薯、COUNT(DISTINCT)姑躲、AVG()、STD()盟蚣、SUM()黍析、MAX()和MIN())。你可以在同一查詢中混來自不同數(shù)據(jù)庫的表屎开。
- 支持ANSI SQL的LEFT 0UTER JOIN和ODBC阐枣。
- 所有列都有缺省值。你可以用INSERT插入一個(gè)表列的子集奄抽,那些沒用明確給定值的列設(shè)置為他們的決省值蔼两。
- MySQL可以工作在不同的平臺(tái)上。支持C逞度、C++额划、Java、Perl档泽、PHP锁孟、Python和TCL API。
- 支持索引創(chuàng)建
缺
- MySQL最大的缺點(diǎn)是其安全系統(tǒng)茁瘦,主要是復(fù)雜而非標(biāo)準(zhǔn)品抽,另外只有到調(diào)用mysqladmin來重讀用戶權(quán)限時(shí)才發(fā)生改變。
- MySQL的另一個(gè)主要的缺陷之一是缺乏標(biāo)準(zhǔn)的RI(Referential Integrity-RI)機(jī)制甜熔;Rl限制的缺乏(在給定字段域上的一種固定的范圍限制)可以通過大量的數(shù)據(jù)類型來補(bǔ)償圆恤。
- MySQL沒有一種存儲(chǔ)過程(Stored Procedure)語言,這是對(duì)習(xí)慣于企業(yè)級(jí)數(shù)據(jù)庫的程序員的最大限制。
- MySQL不支持熱備份盆昙。
- MySQL的價(jià)格隨平臺(tái)和安裝方式變化羽历。Linux的MySQL如果由用戶自己或系統(tǒng)管理員而不是第三方安裝則是免費(fèi)的,第三方案則必須付許可費(fèi)淡喜。Unix或Linux 自行安裝 免費(fèi) 秕磷、Unix或Linux 第三方安裝 200美元,
oraclet優(yōu)缺點(diǎn)
優(yōu)
- 開放性:oracle 能所有主流平臺(tái)上運(yùn)行(包括 windows)完全支持所有工業(yè)標(biāo)準(zhǔn)采用完全開放策略使客戶選擇適合解決方案對(duì)開發(fā)商全力支持炼团;
- 可伸縮性,并行性:Oracle 并行服務(wù)器通過使組結(jié)點(diǎn)共享同簇工作來擴(kuò)展windownt能力提供高用性和高伸縮性簇解決方案windowsNT能滿足需要用戶把數(shù)據(jù)庫移UNIXOracle并行服務(wù)器對(duì)各種UNIX平臺(tái)集群機(jī)制都有著相當(dāng)高集成度澎嚣;
- 安全性:獲得最高認(rèn)證級(jí)別的ISO標(biāo)準(zhǔn)認(rèn)證。
- 性能:Oracle 性能高 保持開放平臺(tái)下TPC-D和TPC-C世界記錄瘟芝;
- 客戶端支持及應(yīng)用模式:Oracle 多層次網(wǎng)絡(luò)計(jì)算支持多種工業(yè)標(biāo)準(zhǔn)用ODBC易桃、JDBC、OCI等網(wǎng)絡(luò)客戶連接
- 使用風(fēng)險(xiǎn):Oracle 長(zhǎng)時(shí)間開發(fā)經(jīng)驗(yàn)完全向下兼容得廣泛應(yīng)用地風(fēng)險(xiǎn)低
缺
- 對(duì)硬件的要求很高锌俱;
- 價(jià)格比較昂貴晤郑;
- 管理維護(hù)麻煩一些;
- 操作比較復(fù)雜贸宏,需要技術(shù)含量較高造寝;
SQL Server優(yōu)缺點(diǎn)
優(yōu)
- 易用性、適合分布式組織的可伸縮性吭练、用于決策支持的數(shù)據(jù)倉庫功能匹舞、與許多其他服務(wù)器軟件緊密關(guān)聯(lián)的集成性、良好的性價(jià)比等线脚;
- 為數(shù)據(jù)管理與分析帶來了靈活性赐稽,允許單位在快速變化的環(huán)境中從容響應(yīng),從而獲得競(jìng)爭(zhēng)優(yōu)勢(shì)
缺
- SQL Server 只能windows上運(yùn)行沒有絲毫開放性操作系統(tǒng)系統(tǒng)穩(wěn)定對(duì)數(shù)據(jù)庫十分重要Windows9X系列產(chǎn)品偏重于桌面應(yīng)用NT server只適合小型企業(yè)而且windows平臺(tái)靠性安全性和伸縮性非常有限象unix樣久經(jīng)考驗(yàn)尤其處理大數(shù)據(jù)庫浑侥;
- SQL server 并行實(shí)施和共存模型并成熟難處理日益增多用戶數(shù)和數(shù)據(jù)卷伸縮性有限姊舵;
- 沒有獲得任何安全證書。
- SQL Server 多用戶時(shí)性能佳 寓落;客戶端支持及應(yīng)用模式:客戶端支持及應(yīng)用模式括丁。只支持C/S模式,SQL Server C/S結(jié)構(gòu)只支持windows客戶用ADO伶选、DAO史飞、OLEDB、ODBC連接
- SQL server 完全重寫代碼經(jīng)歷了長(zhǎng)期測(cè)試斷延遲許多功能需要時(shí)間來證明并十分兼容仰税;
小結(jié)?????????
? ? ? ? 根據(jù)開會(huì)和各位領(lǐng)導(dǎo)的決定使用oracle來做數(shù)倉构资,分別在oracle中構(gòu)構(gòu)建四層分別為 ods
、dwd
陨簇、dws
吐绵、ads
這里我就不介紹數(shù)倉分層概念了最后的整體架構(gòu)如下:數(shù)據(jù)庫:Oracle數(shù)據(jù)同步 :kettle數(shù)據(jù)展示:大屏展示,Superset
1.2 技術(shù)架構(gòu)
案例二、中型公司
???????? ?首先中型公司做離線數(shù)倉并不單純的做數(shù)倉己单,你將你數(shù)據(jù)存放在數(shù)倉中通報(bào)表的形式展示在大屏中唉窃,體現(xiàn)不出數(shù)倉的價(jià)值,可以通過這個(gè)些數(shù)據(jù)做一個(gè)用戶畫像
纹笼。我在這里舉一個(gè)不恰到的例子:比如數(shù)倉的中的數(shù)據(jù)沒有被利用起來纹份,我購買了一個(gè)商品在后臺(tái)報(bào)表中加上我剛剛下單的這一條數(shù)據(jù)(死數(shù)據(jù)),只是報(bào)表發(fā)生了改變但是對(duì)于公司而是價(jià)值不大廷痘,這時(shí)我們是不是可用基于數(shù)倉做一個(gè)用戶畫像,分析出這個(gè)用戶喜歡夠那類商品蔓涧,價(jià)格的區(qū)間是多少,這樣就可以做一個(gè)精準(zhǔn)推薦牍疏。廢話就不多少了直接開始。
2.1 技術(shù)選型
???????? 技術(shù)選型需要根據(jù)公司的需求以及公司的數(shù)據(jù)量等綜合的因素進(jìn)行選擇拨齐,可以使用Hive
鳞陨、HBase
等技術(shù)來做。那我們這里就使用Hive
詳細(xì)架構(gòu)請(qǐng)看下:
數(shù)據(jù)采集:Kettle瞻惋、sqoop厦滤、flume數(shù)據(jù)存儲(chǔ):HDFS、Hbase歼狼、Redis掏导、Kafka任務(wù)調(diào)度:Yarn計(jì)算引擎:Spark離線處理:Hive數(shù)據(jù)應(yīng)用層:kylin 、大屏展示羽峰、Superset
???????? 我拍在這里就有好多小伙伴不知道為什么這么選型趟咆,我就在這一一給講解下:
數(shù)據(jù)采集:
???????? kettle 一般處理一些數(shù)據(jù)量比較小的數(shù)據(jù),因?yàn)閷W(xué)習(xí)成本低梅屉,適合那些剛剛接觸ETL的員工值纱,并且還有豐富的組件,例如exec坯汤、Json虐唠、文本等信息錄入到數(shù)據(jù)庫中。
???????? sqoop主要將關(guān)系型數(shù)據(jù)同步到hive中惰聂,因?yàn)樗牡讓邮峭ㄟ^MapReduce的方式當(dāng)多量數(shù)據(jù)通過分布式方式效率也不會(huì)很慢疆偿。
???????? Flume 主要將前端產(chǎn)生的日志存到kafka中用來做一些點(diǎn)擊流操作。例如:分析用戶在這個(gè)頁面停留了多長(zhǎng)時(shí)間搓幌。求出頁面的TopN等信息杆故。
數(shù)據(jù)存儲(chǔ)
???????? ?HDFS 主要存儲(chǔ)一些要求時(shí)效不高的數(shù)據(jù),但是這些數(shù)據(jù)又不能被丟失場(chǎng)景溉愁,一般會(huì)結(jié)合Hive一起使用反番。????????
? ? ? ? ? Hbase 一般會(huì)將hive中的ADS層的一部分?jǐn)?shù)據(jù)存儲(chǔ)到Hbase中提供數(shù)據(jù)支撐。這一部分?jǐn)?shù)據(jù)一般要求時(shí)效性比較高。???????? ?
? ? ? ? ??Redis ?一般用于前端與數(shù)據(jù)庫之間的橋梁罢缸,前端來的請(qǐng)求先去Redis查篙贸,這樣就避免了數(shù)據(jù)庫高并出現(xiàn)宕機(jī)的現(xiàn)象。?????????
? ? ? ? ? ?kafka 主要存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)枫疆,一般設(shè)置保存7天爵川,場(chǎng)景不同。這里用于做點(diǎn)擊流息楔。
任務(wù)調(diào)度
???????? ?yarn 想必大家對(duì)它都不陌生主要用戶做資源調(diào)度了寝贡。
計(jì)算引擎
???????? Spark ?在本次項(xiàng)目中主要做數(shù)據(jù)分析,通過SparkSql 更快的提高分析效率值依,大大的節(jié)約了時(shí)間圃泡。
離線處理????????
Hive
這里起到了數(shù)據(jù)倉庫的作用 ,Hive在這里進(jìn)行了分層分別為ods
愿险、dwd
颇蜡、dws
、ads
每個(gè)層都有他自己的作用域辆亏。
2.2 技術(shù)架構(gòu)
案例三风秤、攜程機(jī)票數(shù)據(jù)倉庫技術(shù)棧
以下內(nèi)容來源于:https://www.sohu.com/a/403837625_411876
???????? 攜程機(jī)票部門的數(shù)據(jù)倉庫建設(shè)主要基于公司公共部門的大數(shù)據(jù)基礎(chǔ)環(huán)境及數(shù)據(jù)調(diào)度平臺(tái),輔以部分自運(yùn)維的開源存儲(chǔ)引擎和基于開源組件二次開發(fā)的數(shù)據(jù)同步工具和運(yùn)維工具扮叨。
3.1 當(dāng)前技術(shù)棧
生產(chǎn)環(huán)境的數(shù)據(jù)可以大致分成三類:
- 業(yè)務(wù)數(shù)據(jù)缤弦,主要存儲(chǔ)在MySQL和SQLServer,在這些關(guān)系型數(shù)據(jù)庫里面有數(shù)以萬計(jì)的表承接著各種生產(chǎn)服務(wù)的業(yè)務(wù)數(shù)據(jù)寫入彻磁;
- 基礎(chǔ)數(shù)據(jù)碍沐,也是存儲(chǔ)在MySQL和SQLServer中,生產(chǎn)應(yīng)用時(shí)一般會(huì)建立一層中心化緩存(如Redis)或者本地緩存衷蜓;
- 日志數(shù)據(jù)抢韭,這類數(shù)據(jù)的特點(diǎn)是”append only”,對(duì)已經(jīng)生成的數(shù)據(jù)不會(huì)有更新的操作恍箭,考慮到這類數(shù)據(jù)的高吞吐量刻恭,生產(chǎn)環(huán)境一般會(huì)用消息隊(duì)列Kafka暫存;
數(shù)據(jù)倉庫在實(shí)施數(shù)據(jù)同步時(shí)扯夭,會(huì)根據(jù)需求在實(shí)時(shí)鳍贾、近實(shí)時(shí)以及T+1天等不同的頻率執(zhí)行數(shù)據(jù)同步,并且在大數(shù)據(jù)環(huán)境會(huì)用不同的載體承接不同頻率同步過來的數(shù)據(jù)交洗。在攜程機(jī)票骑科,實(shí)時(shí)同步的目標(biāo)載體是ElasticSearch、CrateDB或者HBase构拳,近實(shí)時(shí)(一般T+1小時(shí))或者T+1天的目標(biāo)載體是Hive咆爽。
從生產(chǎn)的數(shù)據(jù)載體來講梁棠,主要包括DB和消息隊(duì)列,他們的數(shù)據(jù)同步方案主要是:
- 生產(chǎn)DB到Hive的同步使用taobao開源的DataX斗埂,DataX由網(wǎng)站運(yùn)營(yíng)中心DP團(tuán)隊(duì)做了很多擴(kuò)展開發(fā)符糊,目前支持了多種數(shù)據(jù)源之間的數(shù)據(jù)同步。實(shí)時(shí)同步的場(chǎng)景主要在MySQL呛凶,使用DBA部門使用Canal解析并寫入至消息隊(duì)列的bin log男娄。
- 從Kafka到Hive同步使用Camus,但是由于Camus的性能問題及消費(fèi)記錄和消費(fèi)過期較難監(jiān)控的問題漾稀,我們基于spark-sql-kafka開發(fā)了hamal模闲,用于新建的Kafka到Hive的同步;Kafka實(shí)時(shí)同步的載體主要是ElasticSearch或者CrateDB崭捍,主要通過Flink實(shí)施尸折。
- 生產(chǎn)數(shù)據(jù)被同步數(shù)據(jù)倉庫后,會(huì)在數(shù)倉內(nèi)完成數(shù)據(jù)清洗殷蛇、信息整合实夹、聚合計(jì)算等數(shù)據(jù)扭轉(zhuǎn)流程,最終數(shù)據(jù)出倉導(dǎo)入到其它載體晾咪,這一系列的流程調(diào)度由公司DP團(tuán)隊(duì)運(yùn)維的調(diào)度平臺(tái)Zeus完成收擦。
3.2 技術(shù)架構(gòu)
小結(jié)
???????? 一套完整的數(shù)據(jù)倉庫實(shí)施方案應(yīng)該包括但不局限于上面介紹的數(shù)據(jù)同步方案贮配、數(shù)據(jù)存儲(chǔ)方案谍倦、數(shù)據(jù)規(guī)范、元數(shù)據(jù)建設(shè)泪勒、數(shù)據(jù)質(zhì)量體系昼蛀、運(yùn)維工具等,每個(gè)實(shí)施團(tuán)隊(duì)?wèi)?yīng)該根據(jù)面臨的實(shí)際情況選擇針對(duì)每個(gè)點(diǎn)的具體技術(shù)方案圆存。我在這里為大家提供大數(shù)據(jù)的資料
需要的朋友可以去下面GitHub去下載叼旋,信自己,努力和汗水總會(huì)能得到回報(bào)的沦辙。我是大數(shù)據(jù)老哥夫植,我們下期見~~~
資源獲取 獲取Flink面試題,Spark面試題油讯,程序員必備軟件详民,hive面試題,Hadoop面試題陌兑,Docker面試題沈跨,簡(jiǎn)歷模板等資源請(qǐng)去GitHub自行下載 https://github.com/lhh2002/Framework-Of-BigDataGitee 自行下載 ?https://gitee.com/li_hey_hey/dashboard/projects