大数据简介:从数据到大数据,数据技术工具的演变
最近在看大數據相關的書和資料,順便梳理下筆記,于是有了本文
本文將用4張邏輯圖為主線,簡單介紹一個產品從“小數據”演化為“大數據”的過程,及可能用到的工具。
(以下內容主要來自書籍和網絡查詢資料,如有錯誤,還請指正)
↓↓↓本文核心邏輯↓↓↓
↓↓↓本文目錄↓↓↓
?
1.一個簡陋版互聯技術架構
?
假設我們要搭建一個小網站,在不使用成熟SaaS產品的前提下,我們的產品里面最少要有以下兩個部分:
客戶端:可以是APP,小程序,甚至是一個Web網站,作為入口給我們的用戶訪問。
服務端:服務端包括應用服務器和數據庫,應用服務器用來部署應用端程序,處理前端請求,并進行服務響應;數據庫用來存儲數據,服務器通過專門與數據庫交互的程序對數據庫進行讀寫操作(如:SQL)?
?
1.1我們是如何與技術系統交互的?
假設一個場景:
張三打開了一個了一個小網站,打開后出現了登錄界面
張三輸入自己的賬號和密碼之后點擊“登錄”
這時客戶端會發送給服務端一個請求 ,查詢查詢一下數據庫里有沒有張三的賬號信息
如果數據庫有的話張三就能登錄成功,可以使用小網站了
如果數據庫沒有張三的賬號信息的話可能就會引導張三先進行注冊
注冊成功后數據庫中的用戶表中就會新增一條張三的信息
張三就能愉快的使用小網站了
?
我們通過客戶端入口與這個系統交互,我們通過操作客戶端界面,對服務端進行請求拉取服務器&數據庫中的信息,給予我們反饋。
?
1.2服務器與數據庫有什么區別?
?
一般我們常稱為“服務器”的全稱叫“應用服務器”,數據庫全稱叫“數據庫服務器”,它們都是服務器,只是由于應用環境的不同,需要的性能不同做了區分。
數據庫服務器的處理器性能要求比較高,因為其要進行頻繁的操作,內存要求大,加快數據存取速度,應用服務器相對而言要求低一些。
?
1.3常用數據庫有哪些?
常用數據庫主要有“關系型數據庫”和“非關系型數據庫”
——關系型數據庫:折射現實中的實體關系,將現實中的實體關系拆分維度,通過關系模型表達出來(表及表與表之間的關系),常用的有MySQL(開源數據庫),SQL Server(微軟家的),Oracle(甲骨文家的,有完善的數據管理功能可以實現數據倉庫操作) ?
——非關系型數據庫:一種相對松散且可以不按嚴格結構規范進行存儲的數據庫,一邊叫NoSQL(常用的有mongoDB , CouchDB,在MongoDB中使用鍵值對的方式表示和存儲數據,鍵值類似關系型數據庫表中的字段名對應的值,在MngoDB中,使用JSON格式的數據進行數據表示和存儲)
?
2.隨著用戶增長技術架構的升級
小網站的用戶逐漸越來越多,小網站變成了大網站,單個服務器的負載很快就到了極限,這時就需要增加多臺服務器,組成服務器組,同時引入負載均衡服務器,對流量進行動態分配。
由于數據是互聯網產品的核心資產,為了保證系統數據的安全性,還需要增加數據備份服務器,多臺數據庫服務器同時運行,這樣哪怕一個數據庫出問題了,也不會影響業務正常運轉。
?
3.數據倉庫的誕生
?
隨著產品用戶量越來越大,市場競爭也更加激烈,迫切需要更加準確的戰略決策信息,數據庫中的數據雖然對于產品的運營非常有用,但由于結構復雜,數據臟亂,難以理解,確少歷史,大規模查詢等問題對商業決策和目標制定的作用甚微。
?
在更好的發揮數據價值,1990數據倉庫之父比爾·恩門(Bill Inmon)提出了“數據倉庫”的概念,構建一種對歷史數據進行存儲和分析的數據系統,支撐企業的商業分析與戰略決策。
?
3.1數據倉庫的實現原理是什么?
數據倉庫的數據來源通常是歷史業務數據(訂單數據,商品數據,用戶數據,操作日志,行為數據……)這些數據統一匯總存儲至企業數據倉庫,通過對倉庫里的綜合數據進行有目的的分析支撐業務決策。
?
3.2數據庫與數據倉庫有什么區別?
數據庫是對實時數據進行存儲和事務性處理的系統,而數據倉庫則是為了分析而設計。
?
3.3數據倉庫與大數據倉庫有什么區別?
數據倉庫與大數據倉庫的區別:大數據=海量數據+處理技術+平臺工具+場景應用,數據倉庫是一個數據開發過程,其區別主要體現在商業價值,處理對象,生產工具,三個方面。
——商業價值:都是業務驅動的,有明確的業務場景需求,通過海量數據分析為業務提供決策依據,“傳統數倉”出現更早,場景單一保守(報表,BI);而大數據技術更成熟成本更低,應用場景更多(用戶畫像,推薦,風控,搜索……)?
——處理對象:都是對數據進行獲取,加工,管理,治理,應用處理,但大數據處理數據類型更多樣化,傳統數倉基本只擅長處理結構化和半結構化的數據。?
——生產工具:“傳統數倉”一般采購國外知名廠商成熟方案,價格昂貴可拓展性差,“大數據”則有成套的開源技術——建設方法:大數據技術沿用了“傳統數倉的數據建設理論,但由于在處理技術上新增了非結構化數據,生產工具上新增了流式計算(比實時計算要稍微遲鈍些,但比離線計算又實時的多)
?
4.大數據技術架構
4.1什么是大數據?
一種規模大到在獲取、存儲、管理、分析方面大大超出了傳統數據庫軟件工具能力范圍的數據集合,具有海量的數據規模(一般以TB為起始單位)、快速的數據流轉、多樣的數據類型和價值密度低四大特征。
根據“海量的數據規模”,“快速的數據流轉”,“多樣的數據類型”,“價值密度低”去看,符合這些特點的大都是平臺型公司,有海量用戶產生內容。
Facebook基礎設施工程副總裁杰·帕里克(Jay Parikh)曾透露,Facebook每天處理的數據量多達500TB(1TB=1000GB)。
?
4.2什么是分布式計算?
看完上面,你可能會想,像Facebook每天500TB的數據量要用什么樣的技術才能處理呢?
這就要引入“分布式計算”了,既然單個數據庫的計算能力有限,那我們就把大量的數據分割成多個小塊,由多臺計算機分工完成,然后將結果匯總,這些執行分布式計算的計算機叫做集群。
如果還不理解的話我們舉個栗子:
假期要結束了張三還有有10份作業沒寫,他找了5個同學,每個同學寫2份,最后匯總給張三。
大數據時代存儲計算的經典模型,Apache基金會名下的Hadhoop系統,核心就是采用的分布式計算架構,也是Yahoo、IBM、Facebook、亞馬遜、阿里巴巴、華為、百度、騰訊等公司,都采用技術架構。(下方邏輯圖中黃框部分都是Hadoop生態的成員)
?
4.3大數據架構與模塊主要有哪些?
大數據架構主要可以分為:數據采集,數據存儲,計算查詢,數據服務,數據應用5個環節。
——數據采集:通過采集工具把結構化數據進行采集,分發,校驗,清洗轉換;非結構化數據通過爬取,分詞,信息抽取,文本分類,存入數據倉庫中。
——數據存儲:一般分3層,最底層的式ODS(操作數據)層,直接存放業務系統抽取過來的數據,將不同業務系統中的數據匯聚在一起;中間是DW(數據倉庫)層,存放按照主題建立的各種數據模型;最上層是DM(數據集市)層,基于DW層上的基礎數據整合匯總成分析某一個主題域的報表數據。
——計算查詢:根據具體的需求選擇對應的解決方案,離線,非實時,靜態數據的可以用批處理方案;非離線,實時,動態數據,低延遲的場景可用流處理方案。
——數據服務:通過API把數倉中海量的數據高效便捷的開放出去支撐業務,發揮數據價值。
——數據應用:基于數據倉庫中結構清晰的數據高效的構建BI系統支撐業務決策;根據海量的數據構建以標簽樹為核心的用戶畫像系統,為個性化推薦,搜索,等業務模塊提供支撐。
?
4.4大數據采集模塊
一般應用于公司日志平臺,將數據緩存在某個地方,供后續的計算流程進行使用 針對不同數據源(APP,服務器,日志,業務表,各種API接口,數據文件……)有各自的采集方式 ?目前市面上針對日志采集的有 Flume, Logstash,Kafka……
?
——Flume:是一款 Cloudera 開發的實時采集日志引擎,主打高并發,高速度,分布式海量日志采集,支持在日志系統中定制各類數據發送,支持對數據簡單處理并寫給各種數據接受方,主要特點:
-
側重數據傳輸,有內部機制確保不會丟數據,用于重要日志場景?
-
由java開發,沒有豐富的插件,主要靠二次開發
-
配置繁瑣,對外暴露監控端口有數據?最初定位是把數據傳入HDFS中,跟側重于 數據傳輸和安全,需要更多二次開發配置
?
——Logstash:是 Elastic旗下的一個開源數據收集引擎,可動態的統一不同的數據源的數據至目的地,搭配 ElasticSearch 進行分析,Kibana 進行頁面展示,主要特點:
-
內部沒有一個persist queue(存留隊列),異常情況可能會丟失部分數據?
-
由ruby編寫,需要ruby環境,插件很多?
-
配置簡單,偏重數據前期處理,分析方便?側重對日志數據進行預處理為后續解析做鋪墊,搭配ELK技術棧使用簡單。
?
——Kafka:最初是由領英開發,2012 年開源由Apache Incubato孵化出站?以為處理實時數據提供一個統一,高吞吐,低延遲的平臺 適合作為企業級基礎設施來處理流式數據?(本質是:按照分布式事務日志架構的大規模發布/訂閱消息隊列)
?
——Sqoop:與上面的日志采集工具不同,Sqoop的主要功能是為 Hadoop 提供了方便的 RDBMS(關系型數據庫)數據導入功能,使得傳統數據庫數據向 HBase 中遷移變的非常方便
?
?
4.5大數據存儲&資源管理模塊
在數據量小的時候一般用單機數據庫(如:MySQL) 但當數據量大到一定程度就必須采用分布式系統了,Apache基金會名下的Hadhoop系統是大數據時代存儲計算的經典模型。
?
——HDFS?:是 Hadoop里的分布式文件系統,為HBase 和 Hive提供了高可靠性的底層存儲支持
?
——HBase:是Hadoop數據庫,作為基于非關系型數據庫運行在HDFS上,具備HDFS缺乏的隨機讀寫能力,比較適合實時分析。
?
——Yarn:是一種新的 Hadoop 資源管理器,它是一個通用資源管理系統,可為上層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共享等方面帶來了巨大好處。
?
4.6大數據計算查詢模塊
這里首先要介紹一下批處理和流處理的區別:
批計算:離線場景,靜態數據,非實時,高延遲(場景:數據分析,離線報表……)?
流計算:實時場景,動態數據,實時,低延遲(場景:實時推薦,業務監控……)?
?
大數據常用的計算查詢引擎主要有:Hive,Spark,Presto,Presto,Kylin,Druid
?
?
——Hive:是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行。其優點是學習成本低
?
——Spark:?Spark 則是加州大學伯克利分校AMP實驗室所開源的專門用于大數據量下的迭代式計算.是為了跟?Hadoop 配合。
批處理模式下的類Hadoop MapReduce的通用并行框架,?,Spark 與 MapReduce 不同,它將數據處理工作全部在內存中進行,提高計算性能;
流處理模式下,Spark 主要通過 Spark Streaming 實現了一種叫做微批(Micro-batch)的概念可以將數據流視作一系列非常小的“批”,借此即可通過批處理引擎的原生語義進行處理。
Spark適合多樣化工作負載處理任務的場景,在批處理方面適合眾數吞吐率而非延遲的工作負載。SparkSQL兼容可以把Hive作為數據源spark作為計算引擎。
?
——Presto:由 Facebook 開源,是一個分布式數據查詢框架,原生集成了 Hive、 Hbase 和關系型數據庫。但背后的執行模式跟Spark類似,所有的處理都在內存中完成,大部分場景下要比 Hive 快一個數量級。
?
——Kylin:Cube 預計算技術是其核心,基本思路是預先對數據作多維索引,查詢時只掃描索引而不訪問原始數據從而提速。劣勢在于每次增減維度必須對 Cube 進行歷史數據重算追溯,非常消耗時間。
?
——Druid:由 MetaMarket 開源,是一個分布式、面向列式存儲的準實時分析數據存儲系統,延遲性最細顆粒度可到 5 分鐘。它能夠在高并發環境下,保證海量數據查詢分析性能,同時又提供海量實時數據的查詢、分析與可視化功能。
?
3.7數據可視化模塊
?
3.7.1可視化框架
開源可視化框架: 業界比較有名的式Superset和Metabase?
Superset的方案更加完善,支持聚合不同數據源形成對應的指標,再通過豐富的圖表類型進行可視化,在時間序列分析上比較出色,與Druid深度集成,可快速解析大規模數據集,但不支持分組管理和圖表下鉆及聯動功能,權限管理不友好。
?
Metabase比較重視非技術人員的使用體驗,界面更加美觀,權限管理上做的比較完善,無需賬號也可以對外共享圖表和數據內容,但在時間序列分析上 不支持不同日期對比,還需要自動逸SQL實現,每次查詢只能針對一個數據庫,操作比較繁瑣。
?
3.7.2可視化軟件:
商用軟件主流的主要有:PowerBI , Tableau,FineBI
?
| 軟件 | 上手難度 | 自由度 | 價格 |
| PowerBI? | 高 | 高 | ¥780/人/年 |
| Tableau | 中 | 低 | ¥60000+/人/年 |
| FineBI | 中 | 低 | 幾十萬/永久 |
?
——Tableau:操作簡單,可視化,基本所有的功能都可以拖拽實現,但價格貴,且數據清洗功能一般,需要有較好的數據倉庫支持?
——FineBI:操作簡單,與Tableau類似,但數據清洗能力比Tableau要好,付費方式采用按功能模塊收費,永久買斷。
——PowerBI?:可以做復雜報表,篩選、計算邏輯清晰,可自定義,但很多功能要用DAX編程序,托拉拽能實現的功能很有限,不易入門。
【參考資料】
《產品經理必懂得技術那點事兒》作者唐韌
《大數據架構商業之路》作者黃申
深入淺出大數據:到底什么是Hadoop?:https://mp.weixin.qq.com/s/cTJ_j1s2oUHPZEh1TdfFUg
一篇文章讀懂大數據中臺架構:https://mp.weixin.qq.com/s/3dktekrWZKmEuVGhQuPfsQ
總結
以上是生活随笔為你收集整理的大数据简介:从数据到大数据,数据技术工具的演变的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打包后图片不显示问题
- 下一篇: 河北科技大学电子商务L122班级介绍