大數據知識梳理(整理中。。。)
一、大數據概述
大數據的特征(4V):
1、Volume,數據量大
2、Variety,數據類型多
大數據由結構化和非結構化數據組成:
10%的結構化數據,存儲在數據庫中;
90%的非結構化數據,與人類信息密切相關。
3、Velocity,處理速度快
4、Value,價值密度低
大數據的關鍵技術:
1、分布式存儲
分布式數據庫
分布式文件系統
2、分布式處理
分布式並行處理技術MapReduce
大數據的計算模式:不同的計算模式需要使用不同的產品
1、批處理模式:一堆數據一起做批量處理,不能滿足實時性要求。
如MapReduce,Spark(實時性比MapReduce好,可以做迭代計算,MapReduce不能)
2、流計算:針對流數據(日志流、用戶點擊流)的實時計算,需要實時處理。只能用流計算框架做。
流計算代表產品:S4+Storm+Flume
3、圖計算:如社交網絡數據,地理信息數據等。MapReduce也能處理,但效率不高。
代表軟件:Google Pregel
4、查詢分析計算:交互式查詢,要求實時性高
代表產品:Google Dremel、Hive、Cassandra、Impala
雲計算
雲計算,通過網絡以服務的方式為用戶提供非常廉價的IT資源。
兩個特征:
1、解決了分布式存儲和分布式處理問題
2、虛擬化和多租戶
三種雲服務:
IaaS:面向網絡架構師
PaaS:面向應用開發者
SaaS:面向用戶
二、大數據處理架構Hadoop
Hadoop兩大核心:
1、分布式文件系統HDFS:解決分布式存儲
2、分布式並行框架MapReduce:解決分布式處理
Hadoop 2.0中,
1、HDFS新技術(原來可擴展性不好):NN Federation,多個名稱節點,分區管理(不能解決單點失效問題,彼此聯盟關系,非備份關系,需要為每個名稱節點部署備份節點);HA(高可用性),熱備份的NameNode,防止單點失效。
2、MapReduce分出了YARN,負責資源調度管理(MapReduce1.0既是計算框架,也是資源調度管理框架,MapReduce2.0是純粹的計算框架)。YARN框架可以支持MapReduce、Storm、Spark等。
Hadoop項目結構:
Linux基礎知識:
1、Shell:命令解析器,接收用戶命令,然后調用相應的應用程序。
2、sudo:Ubuntu中一種權限管理機制,可以授權給一些普通用戶去執行需要root權限執行的操作。
3、輸入密碼:終端不會顯示你當前輸入的密碼。
4、輸入法中英文切換:“shift”鍵
5、復制粘貼快捷鍵:快捷鍵需要加上Shift,如Ctrl+Shift+V
三、分布式文件系統HDFS(Hadoop Distributed File System)
主節點(一個):承擔數據目錄(元數據)服務
從節點(多個):完成數據的存儲任務
HDFS實現目標:
1、兼容廉價的硬件設備
2、實現流數據讀寫
3、支持大數據集
4、支持簡單的文件模型
5、強大的跨平台兼容性
HDFS自身的局限性:
1、不適合低延遲數據訪問,實時性不高
2、無法高效儲存大量小文件
3、不支持多用戶寫入及任意修改文件
塊(HDFS的核心概念):
為了分攤磁盤讀寫開銷,也就是在大量數據間分攤磁盤尋址的開銷;
HDFS的一個塊要比普通文件系統的塊大很多(普通文件系統的塊一般幾千個字節,而HDFS默認64MB,可設置為128MB)
好處:
1、支持大規模文件存儲,將文件切割成塊,塊可以分布地存儲在不同機器上,突破單機存儲容量的上限
2、簡化系統設計,塊的大小是固定的
3、適合數據備份
HDFS兩大組件:
1、名稱節點(主節點,NameNode):整個HDFS集群的管家,負責元數據的存儲,相當於數據目錄
元數據包含:文件是什么;文件被分成多少塊;每個塊和文件是怎么映射的;每個塊被存儲在哪個服務器上面
包含兩個核心數據結構:
(1)FsImage:保存系統文件樹
文件的復制等級、修改和訪問時間、訪問權限、塊大小以及組成文件的塊
(2)EditLog:記錄對數據進行的諸如創建、刪除、重命名等操作
運作方式:
第二名稱節點:
(1)解決EditLog不斷增大的問題
(2)可以當做名稱節點的冷備份
2、數據節點(DataNode):存、取實際數據
HDFS命名空間:目錄-文件-塊
訪問HDFS文件系統:/+目錄名稱,如/usr/shares
HDFS體系結構的局限性:1.0版本
1、命名空間限制:名稱節點是保存在內存中的,因此,名稱節點能容納的對象(文件、塊)的個數會受到空間大小限制
2、性能的瓶頸:整個分布式文件的吞吐量,受限於單個名稱節點的吞吐量
3、隔離問題:由於集群中只有一個名稱節點,只有一個命名空間,因此無法對不同應用程序進行隔離
4、集群的可用性:單點故障,一旦這個唯一的名稱節點發生故障,會導致整個集群變得不可用。第二名稱節點是冷備的。2.0版本設置兩個名稱節點,並進行分區管理,設置熱備(HDFS HA)。
HDFS中數據以塊的方式冗余存儲,一般冗余因子是3,好處:
1、加快數據傳輸速度
2、容易檢查數據錯誤
3、保證數據可靠性
Shell命令:
啟動hadoop
./bin/hadoop fs:查看fs總共支持哪些命令
./bin/hadoop fs -help put:查看put命令的幫助
./bin/hadoop fs -ls:顯示指定文件的詳細信息
./bin/hadoop fs -mkdir:創建相關文件夾
./bin/hadoop fs -cat:指定文件內容輸出到標准輸出
./bin/hadoop fs -cp 本地文件 HDFS:將本地文件上傳到HDFS中
瀏覽器中查看HDFS信息:http://localhost:50070
利用Java API與HDFS進行交互(編程方式)
安裝和配置Eclipse
四、分布式數據庫HBase
HBase是BigTable(一個分布式存儲系統,為了滿足互聯網搜索引擎的需求)的開源實現,主要存儲非結構化和半結構化的松散數據。
Hadoop可以解決大規模數據的離線批量處理問題,但是Hadoop MapReduce框架無法滿足實時處理,HBase可以高擴展,低寫入/查詢延遲。
HBase與關系數據庫的對比:
1、數據類型。關系數據庫具有豐富的數據類型,HBase采用了簡單的數據模型,存儲為未經解釋的字符串;
2、數據操作。關系數據庫包含豐富的操作,涉及復雜的多表連接。HBase只有簡單的插入、查詢、刪除、清空等;
3、存儲模式。關系數據庫基於行模式存儲,HBase基於列存儲。
4、數據索引。關系數據庫可對不同列構建多個索引,HBase只有一個索引——行鍵;
5、數據維護。關系數據庫更新操作時會替換舊值,HBase更新操作時不會刪除舊版本,而是生成一個新的版本(HBase借助底層HDFS文件系統進行存儲數據。與HDFS只允許追加,不允許修改的特性相關);
6、可伸縮性。關系數據庫很難實現橫向擴展,HBase分布式數據庫能輕易通過在集群中增加或減少硬件數量實現性能的伸縮。
HBase是一個稀疏、多維度、排序的映射表,這張表的索引是行鍵、列族、列限定符(列)和時間戳。
列族支持動態擴展,可以輕易添加一個列族或列,無需預先定義列的數量和類型,所有列均以字符串形式存儲。
HBase中需要根據行鍵、列族、列限定符和時間戳來確定一個單元格,可以視為一個“四維坐標”,即[行鍵,列族,列限定符,時間戳]
HBase可以理解為鍵-值數據庫,列族數據庫。
HBase的實現包含三個主要的功能組件:
1、庫函數:鏈接到每個客戶端。客戶端並不依賴於Master,而是通過Zookeeper獲得Region位置信息(Master負載很小)。
2、一個Master主服務器,管家的角色,負責管理和維護HBase表的分區信息,維護Region服務器列表,分配Region,負載均衡
3、許多個Region服務器:一個大表會被分成很多個Region(分區),負責存儲和維護分配給自己的Region,處理來自客戶端的讀寫請求。
Region服務器中,許多個Region共用一個Hlog(日志,保證系統出錯時進行恢復),每個Region中按照列族切分成一個個Store(列族),先寫到MemStore(緩存),周期性寫到StoreFile(會有多個)中。StoreFile借助HDFS存儲(HDFS中的HFile)。
StoreFile的合並:StoreFile數量太多,影響查找速度,調用Store.compact()把多個合並成一個,只有數量達到一個閾值才啟動合並。
當單個StoreFile過大時,又觸發分裂操作,1個父Region被分裂成兩個子Region。
三級尋址過程:
Zookeeper記錄了-ROOT-表的位置信息;
-ROOT-表,又叫根數據表,記錄.META.表的Region位置信息,-ROOT-表只能有一個Region;
.META.表,又叫元數據表,記錄了用戶數據表的Region位置信息,當HBase表很大時,.META.表分裂成多個Region。.META.表的全部Region都會被保存在內存中。
在HBase之上構建SQL引擎,兩種方案:1、Hive整合HBase,2、Phoenix
啟動關閉Hadoop和HBase的順序一定是:
啟動Hadoop——啟動HBase——關閉HBase——關閉Hadoop
Shell命令:
create:創建表,如create 'tempTable','f1','f2','f3'
describe:查看表的基本信息,如describe 'student'
list:列出HBase中所有的表信息
put:向表、行、列指定的單元格添加數據,一次只能為一個表的一行數據的一個列添加一個數據。
如put 'tempTable','r1','f1:c1','hello,dblab',向r1行、列族f1、列c1的單元格添加數據hello,dblab(列c1不用事先定義),時 間戳自動添加,也可自己添加
delete:刪除一個數據,是put的反向操作,如delete 'student','95001','Ssex'
deleteall:刪除一行數據,如delete 'student','95001'
get:通過表名、行、列、時間戳、時間范圍和版本號來獲得相應單元格的值。
如get 'tempTable','r1',{COLUMN=>'f1:c1'}
scan:瀏覽表的相關信息,如scan 'tempTable'
enable/disable:使表有效或無效(刪除表之前必須使表無效),如disable 'tempTable'
drop:刪除表
查詢表的歷史數據:
(1)創建表時,指定保存的版本數:
create 'teacher',{NAME=>'username',VERSIONS=>5}
(2)插入數據然后更新數據,使其產生歷史版本數據
- put 'teacher','91001','username','Mary'
- put 'teacher','91001','username','Mary1'
- put 'teacher','91001','username','Mary2'
- put 'teacher','91001','username','Mary3'
- put 'teacher','91001','username','Mary4'
- put 'teacher','91001','username','Mary5'
(3)查詢時,指定查詢的歷史版本數。默認會查詢出最新的數據。(有效取值為1到5)
get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5}
查詢出Mary5、Mary4、Mary3、Mary2、Mary1
JAVA編程
五、NoSQL數據庫
NoSQL興起的原因:
1、關系數據庫無法滿足Web2.0的需求:
(1)無法滿足海量數據的管理需求;
(2)無法滿足數據高並發的需求;
(3)無法滿足高可擴展性和高可用性的需求。
2、“One size fits all”模式很難適用於截然不同的業務場景
Hadoop針對數據分析(批處理)
MongoDB、Redis等針對在線業務
3、關系數據庫的關鍵特性:事務機制和高效查詢機制,在Web2.0時代不需要。
NoSQL數據庫通常包括:
1、鍵值數據庫:鍵/值對,鍵是一個字符串對象,值是任意類型的數據
應用:涉及頻繁讀寫、擁有簡單數據模型的應用。
鍵值數據庫只能通過鍵,而不能通過值進行查詢。
鍵值數據庫成為理想的緩沖層解決方案(在底層數據庫之上,存儲經常訪問的數據)。
2、列族數據庫
應用:分布式數據存儲與管理
3、文檔數據庫:本質是鍵值數據庫,值是版本化的文檔(XML文檔、HTML文檔和JSON文檔)
應用:存儲、索引並管理面向文檔的數據或者類似的半結構化數據
缺點:缺乏統一的查詢語法
MongoDB是一個基於分布式文件存儲的開源數據庫系統,文檔類似於JSON對象。
可以設置任何屬性的索引來實現更快的排序。
服務端:mongod,客戶端:mongo
使用MongoDB shell訪問MongoDB
創建數據庫:use DATABASE_NAME
查看所有數據庫:show dbs
創建集合:在插入數據的時候,MongoDB會自動創建對應的集合
插入文檔:insert()或save(),語法如下:db.COLLECTION_NAME.insert(document),db是數據庫名稱
使用JAVA程序訪問MongoDB
4、圖形數據庫:圖結構的方式存儲信息
應用:用於處理具有高度相互關聯關系的數據,適合於社交網絡、模式識別、依賴分析、推薦系統以及路徑尋找等問題
NoSQL的三大基石:
1、CAP(Consistency,一致性,Availability,可用性,Tolerance of Network Partition,分區容忍性)
最多只能同時實現兩個
2、最終一致性
3、BASE(Basically Available,Soft-state,Eventual consistency)
基本可用:一個分布式系統一部分發生問題不可用時,其他部分仍然可以正常使用,允許分區失敗的情形出現;
軟狀態:狀態可以有一段時間不同步,具有一定的滯后性
最終一致性:強一致性,當執行完一次更新操作后,后續的讀操作可以保證讀到更新后的最新數據;反之,如果不能保證后續讀到的都是更新后的最新數據,就是弱一致性。最終一致性是弱一致性的一種特例,允許暫時讀不到更新后的數據,但是經過一段時間之后,必須讀到更新后的數據。
六、雲數據庫
雲計算是雲數據庫興起的基礎,雲數據庫是部署和虛擬化在雲計算環境中的數據庫。
七、MapReduce分布式並行編程框架
MapReduce將復雜的、運行於大規模集群上的並行計算過程高度地抽象成兩個函數:Map和Reduce
MapReduce的理念:
1、采用“分而治之”的策略,存儲在分布式文件系統中的大規模數據集被切分成許多分片(split,邏輯上的切分,不是物理上的),分別生成Map任務進行並行處理。
理想的分片大小是一個HDFS塊
2、計算向數據靠攏。因為移動數據需要大量的花銷。
采用了Master/Slave架構,包括一個Master和若干個Slave。Master上運行JobTracker(作業跟蹤器,負責資源監控和作業調度),Slave上運行TaskTracker(分布在不同的機器上,接收JobTracker發送的作業處理指令,完成具體的任務處理)。
MapReduce體系結構主要由四個部分組成:
1、Client(客戶端)
2、JobTracker(作業跟蹤器)
3、TaskTracker
4、Task
Task分為Map Task和Reduce Task兩種,均由TaskTracker啟動。一台機器上可以同時執行兩種任務。
數據的來源是分布式文件系統HDFS,經過中間的Map、Reduce處理后,最終寫入分布式文件系統HDFS中。
HDFS為MapReduce提供底層存儲。
1、不同的Map任務、Reduce任務之間不會進行通信
2、用戶不能顯式從一台機器向另一台機器發送消息,所有的數據交換都是通過MapReduce框架自身去實現的,不需要用戶參與
Map任務的數量:每個split創建一個Map任務
Reduce任務的數量:取決於集群中可用Reduce任務槽(slot)的數目,通常設置比reduce任務槽數目稍微小一些的reduce任務個數(預留一些系統資源)。
MapReduce應用:
1、關系代數運算(選擇、投影、並、交、差、連接)
2、分組與聚合運算
3、矩陣-向量乘法
4、矩陣乘法
Hadoop中執行MapReduce任務的幾種方式:
1、Hadoop jar
2、Pig
3、Hive
4、Python
5、Shell腳本
八、基於Hadoop的數據倉庫Hive
數據倉庫是一個面向主題的、集成的、相對穩定的、反映歷史變化的數據集合,用於支持管理決策。
數據倉庫相對於數據庫,數據不會頻繁發生變化,比較穩定;存取大量歷史數據。
Hive是一個構建於Hadoop頂層的數據倉庫工具,支持大規模數據存儲、分析,具有良好的可擴展性。
Hive可以看作是用戶編程接口,本身不存儲和處理數據,依賴分布式文件系統HDFS存儲數據,依賴分布式並行計算模型MapReduce處理數據。Hive不支持事務。
定義了類似SQL的查詢語言——HiveQL,用戶編寫HiveQL語句運行MapReduce任務。查詢存儲在Hadoop集群中的數據。
Hive特點:
1、采用批處理方式處理海量數據(MapReduce)
2、提供適合數據倉庫操作的工具
在某些場景下Pig可以作為Hive的替代工具,Pig適用於實時交互性的分析,用於ETL過程,Hive適用於大規模海量數據的批處理分析。
HBase提供數據的實時訪問(Hive時延較高)。
Hive系統架構:
1、用戶接口模塊
2、驅動模塊(Driver),負責把HiveQL語句轉換成一系列MapReduce作業
3、元數據存儲模塊,是一個獨立的關系型數據庫
Hive HA(High Availability),解決Hive不穩定的問題。
由多個Hive實例進行管理,這些Hive實例被納入到一個資源池中,並由HAProxy提供一個統一的對外接口。
Impala,實時交互式查詢
提供SQL語句,查詢存儲在Hadoop的HDFS和HBase上的PB級大數據,在性能上比Hive高3~30倍(Hvie時延高)。
Impala的運行依賴於Hive的元數據。不用轉換成MapReduce任務,直接與HDFS和HBase進行交互查詢,查詢實時性高。
Impala和Hive一樣,構建在HDFS和HBase之上,采用相同的SQL語法、ODBC驅動程序和用戶接口。
一個Hadoop平台上,可以統一部署Hive和Impala等分析工具,同時支持批處理和實時查詢。
不同點:
1、Hive適合於長時間的批處理查詢分析,Impala適合於實時交互式SQL查詢;
2、Hive依賴於MapReduce計算框架,Impala直接分發執行計划到各個Impalad執行查詢;
3、Hive在執行過程中,如果內存放不下所有數據,會使用外存,保證查詢能順利執行,Impala不會利用外存,所以處理查詢時會受到一定的限制。
相同點:
1、使用相同的存儲數據池,都支持把數據存儲於HDFS和HBase中;
2、使用相同的元數據;
3、對SQL的解釋處理比較相似,都是通過詞法分析生成執行計划。
Hive和Impala配合使用效果最佳,先使用Hive進行數據轉換處理,之后使用Impala在處理后的數據集上進行快速的數據分析。
1、創建數據庫:create database hive;
如果已經存在,會拋出異常,下面的語句不拋出異常:create database if not exists hive;
2、創建表
use hive;
create table if not exists usr(id bigint,name string,age int) --沒有分號
location '/usr/local/hive/warehouse/hive/usr';指定存儲路徑
3、創建視圖
create view little_usr as select id,age from usr;
4、查看所有數據庫:show databases;
查看以h開頭的所有數據庫:show databases like 'h.*';
查看所有表和視圖:use hive; show tables;
查看數據庫hive中以u開頭的所有表和視圖:show tables in hive like ‘u.*’;
5、load:向表中裝載數據
把目錄‘/usr/local/data’下的數據文件中的數據裝載進usr表,並覆蓋原有數據
load data local inpath ‘/usr/local/data’ overwrite into table usr;
把目錄‘/usr/local/data’下的數據文件中的數據裝載進usr表, 不覆蓋原有數據
load data local inpath ‘/usr/local/data’ into table usr;
把分布式文件系統目錄'hdfs://master_server/usr/local/data’下的數據文件數據裝載進usr表,並覆蓋原有數據
load data inpath ‘hdfs://master_server/usr/local/data’ overwrite into table usr;
6、insert:向表中插入數據或從表中導出數據
向表usr1中插入來自usr表的數據並覆蓋原有數據
insert overwrite table usr1 select * from usr where age=10;
向表usr1中插入來自usr表的數據並追加在原有數據后
insert into table usr1 select * from usr where age=10;
九、Spark
Spark是基於內存的大數據並行計算框架(Hadoop是基於磁盤的),可用於構建大型的、低延遲的數據分析應用程序。
主要特點:
1、運行速度快。使用DAG(有向無環圖)執行引擎,以支持循環數據流與內存計算;
2、容易使用。支持使用Scala、Java、Python和R語言進行編程,可以通過Spark Shell(支持Scala和Python)進行交互式編程;
3、通用性。提供了完整而強大的技術棧,包括SQL查詢、流式計算、機器學習和圖算法組件;
4、運行模式多源。可運行於獨立的集群模式中,可運行於Hadoop中,可運行於Amazon EC2等雲環境中,並且可以訪問HDFS、HBase、Hive等多種數據源。
Scala
Scala是一門多范式編程語言(集成了面向對象和函數式編程),運行於JAVA平台(JVM,Java虛擬機),並兼容現有的JAVA程序。Scala是Spark的主要編程語言。提供了REPL(交互式解釋器),提高程序開發效率。
特性:
1、具備強大的並發性,支持函數式編程,可以更好地支持分布式系統;
2、語法簡潔,能提供優雅的API;
3、兼容JAVA,運行速度快,且能融合到Hadoop生態圈中。
Hadoop存在的一些問題:1、表達能力有限;2、磁盤IO開銷大;3、延遲高
相對於Hadoop,Spark主要優點:
1、Spark的計算模式也屬於MapReduce,但不局限於Map和Reduce操作,還提供了多種數據集操作類型,編程模型比Hadoop MapReduce更靈活;
2、Spark提供了內存計算,可將中間結果放到內存中,對於迭代計算效率更高;
3、Spark基於DAG的任務調度執行機制,要由於Hadoop MapReduce的迭代執行機制。
實際應用中,大數據處理主要包括三個類型:
1、復雜的批量數據處理:時間跨度在數十分鍾到數小時之間,可用MapReduce
2、基於歷史數據的交互式查詢:時間跨度在數十秒到數分鍾之間,可用Impala
3、基於實時數據流的數據處理:時間跨度在數百毫秒到數秒之間,可用Storm
Spark生態系統:Spark的設計遵循“一個軟件棧滿足不同應用場景”的理念,能同時支持批處理、交互式查詢和流數據處理。
既能夠提供內存計算框架,也可以支持SQL即時查詢、實時流式計算、機器學習和圖計算等
可以部署在資源管理器YARN之上,提供一站式的大數據解決方案。
Spark的生態系統主要包含Spark Core(基於內存的計算)、Spark SQL(交互式SQL查詢)、Spark Streaming(流計算)、MLLib(機器學習、數據挖掘)和GraphX(圖計算)等組件。
Spark采用RDD(彈性分布式數據集)實現高效計算的原因:
1、高效的容錯性
RDD:血緣關系、重新計算丟失分區、無需回滾系統、重算過程在不同節點之間並行、只記錄粗粒度的操作
2、中間結果持久化到內存,數據在內存中的多個RDD操作之間進行傳遞,避免了不必要的讀寫磁盤開銷
3、存放的數據可以是JAVA對象,避免了不必要的對象序列化和反序列化。
Shark,即Hive on Spark,通過Hive的HiveQL解析,把HiveQL翻譯成Spark上的RDD操作。
與Hive的區別是:Hive是轉化成MapReduce程序,Shark是轉化成Spark程序。
Shark的設計有兩個問題:
1、執行計划優化完全依賴於Hive,不方便添加新的優化策略;
2、因為Spark是線程級並行,而MapReduce是進程級並行,因此,Spark在兼容Hive的實現上存在線程安全問題,導致Shark不得不使用另外一套獨立維護的打了補丁的Hive源碼分支。
因此,Shark的基礎上開發了Spark SQL。
Spark SQL在Hive兼容層面僅依賴HiveQL解析和Hive元數據,剩下的工作由Spark SQL自己完成。
Spark SQL目前支持Scala、Java、Python三種語言,支持SQL-92規范。
用Spark架構具有以下優點:
1、實現一鍵式安裝和配置、線程級別的任務監控和告警
2、降低硬件集群、軟件維護、任務監控和應用開發難度
3、便於做成統一的硬件、計算平台資源池
Spark Streaming無法實現毫秒級的流計算,仍然需要采用流計算框架,如Storm。
若需要使用HDFS中的文件,則在使用Spark前需要啟動Hadoop。
Spark RDD支持兩種類型的操作:
1、動作(action):在數據集上進行運算,返回計算值
2、轉換(transformation):基於現有的數據集創建一個新的數據集,返回RDD
也可以在同一條代碼中同時使用多個API,連續進行運算,稱為鏈式操作。不僅使Spark代碼更加簡潔,也優化了計算過程。
Spark基於整個操作鏈,僅存儲、計算所需的數據,提升了運行效率。
十、流計算
靜態數據:如存放在數據倉庫中的大量歷史數據。計算模式:批處理
流數據:數據以大量、快遞、時變的流形式持續到達,如PM2.5檢測、電子商務網站用戶點擊流。計算模式:實時計算
大數據分布式系統下典型的計算框架:
1、Hadoop,批處理
2、Spark,實時批處理
3、Storm,流計算
流計算:實時獲取來自不同數據源的海量數據,經過實時分析處理,獲得有價值的信息。
基本理念:數據的價值隨着時間的流逝而降低,如用戶點擊流,當事件出現時就應該立即進行處理,而不是緩存起來進行批量處理。
流計算系統的需求:高性能、海量式、實時性、分布式、易用性、可靠性。
流計算的處理流程的三個階段:
1、數據實時采集
采集多個數據源的海量數據,需要保證實時性、低延遲與穩定可靠
2、數據實時計算
3、實時查詢服務
不斷更新結果,並將用戶所需的結果實時推送給用戶。
流計算適合於需要處理持續到達的流數據、對數據處理有較高實時性要求的場景。
開源 流計算框架Storm
Storm框架可以方便地與數據庫系統進行整合,開發出強大的實時計算系統。
Storm運行任務的方式與Hadoop類似,Hadoop運行的是MapReduce作業,Storm運行的是“Topology”。不同點:MapReduce作業最終會完成計算並結束運行,而Topology將持續處理消息,直到人為終止。
Spark Streaming的基本原理是將實時輸入數據流以時間片(秒級)為單位進行拆分,然后經Spark引擎以類似批處理的方式處理每個時間片數據。
Spark Streaming最主要的抽象是DStream(Discretized Stream,離散化數據流),表示連續不斷的數據流。
在內部實現上,Spark Streaming的輸入數據按照時間片分成一段一段的DStream,每一段數據轉換為Spark中的RDD,並且對DStream的操作都最終轉變為相應的RDD操作。
Spark Streaming與Storm的對比:
1、Spark Streaming無法實現毫秒級的流計算,Storm可以;
2、Spark Streaming構建在Spark上,RDD數據集更容易做高效的容錯處理;
3、Spark Streaming采用的小批量處理的方式,使得它可以同時兼容批量和實時數據處理的邏輯和算法,因此,方便了一些需要歷史數據和實時數據聯合分析的特定應用場合。
十一、圖計算
許多大數據都是以大規模圖或網絡的形式呈現,非圖結構的大數據也會轉換為圖模型后進行分析。
圖數據結構很好地表達了數據之間的關聯性。
針對大型圖的計算,軟件主要包括兩種:
1、基於遍歷算法的、實時的圖數據庫,如Neo4j、OrientDB、DEX和Infinite Graph
2、以圖頂點為中心的、基於消息傳遞批處理的並行引擎,如GoldenOrb、Giraph、Pregel和Hama。主要是基於BSP模型(Bulk Synchronous Parallel Computing Model,又稱“大同步”模型,計算過程是一系列迭代計算)實現的並行圖處理系統。
Prege是一種基於BSP模型實現的並行圖處理系統。
Prege作為分布式圖計算的計算框架,主要用於圖遍歷、最短路徑、PageRank計算等。