大數據平台技術復習


1. 大數據技術概述

本文由本人學習過程中總結,難免有紕漏,歡迎交流學習

1.1雲計算、物聯網、大數據與人工智能

雲計算使計算機系統資源,特別是存儲和計算能力,在不需要用戶直接主動管理 的情況下隨需應變。這個術語通常用於描述Internet上許多用戶可用的數據中心。

並行計算

同時使用多種計算資源解決計算問題的過程

分布式計算

將需要巨大計算能力的問題分成許多小部分進行處理,最后綜合結果

網格計算

在動態、多機構參與的虛擬組織中協同共享資源和求解問題

服務對象

混合雲
公有雲
私有雲

服務層次

IaaS 基礎設施層 基礎設施即服務
PaaS 平台層 平台即服務
SaaS 應用層 軟件即服務

物聯網

物聯網(IoT)是關於設備的網絡(例如車輛和家用電子設備等),其中包含電子產 品、軟件、傳感器、執行器,以及提供設備連接、交互和交換數據的網絡連接。

大數據

大數據是無法在可容忍的時間內用傳統信息技術和軟硬件工具對其進行獲取、管 理和處理的巨量數據集合。具有海量性、多樣性、時效性及可變性等特征,需要 可伸縮的計算體系結構以支持其存儲、處理和分析。

Volume:體量大 Variety:樣式多 Velocity:速度快 Valueless:價值密度低

人工智能

人工智能:系統能夠正確地解釋外部數據,從這些數據中學習,並通過靈活的適 應利用這些學習來實現特定的目標和任務。

發展階段
計算智能
感知智能
認知智能

1.2雲計算、物聯網、大數據與人工智能的關系

雲計算為大數據提供了技術基礎

大數據為雲計算提供用武之地

物聯網是大數據的重要來源

大數據技術為物聯網數據分析提供支撐

雲計算為物聯網提供海量數據存儲能力

物聯網為雲計算技術提供了廣闊的應用空間

簡單總結:通過物聯網產生、收集海量的數據存儲於雲平台,再通過大數據分析,甚至更高形式的人工智能為人類的生產活動,生活所需提供更好的服務。

1.3大數據系統構建

​ 大數據平台構建的前提條件
​ 過程
​ 集成管理
​ 基礎分析
​ 智能分析
​ 功能模塊設計
​ 數據可視化子系統
​ 數據分析與服務子系統
​ 數據存儲與管理子系統
​ 數據交互子系統
​ 技術架構設計
​ 架構圖
​ 數據交互技術架構
​ 數據存儲技術架構
​ 數據計算技術架構
​ 主要問題
​ 不同場景下的技術框架選型

2.Hadoop大數據處理架構

2.1Hadoop Common

Hadoop集群的節點類型

▫ Hadoop框架中最核心的設計是為海量數據提供存儲的HDFS和對數 據進行計算的MapReduce

▫ MapReduce的作業主要包括:(1)從磁盤或從網絡讀取數據,即 IO密集工作;(2)計算數據,即CPU密集工作

▫ Hadoop集群的整體性能取決於CPU、內存、網絡以及存儲之間的 性能平衡。因此運營團隊在選擇機器配置時要針對不同的工作節點 選擇合適硬件類型

• Hadoop集群的節點類型

• 基本的Hadoop集群中的節點主要有

NameNode:負責協調集群中的數據存儲
DataNode:存儲被拆分的數據塊
JobTracker:協調數據計算任務
TaskTracker:負責執行由JobTracker指派的任務
SecondaryNameNode:幫助NameNode收集文件系統運行的狀態 信息

2.2Hadoop特點

Hadoop 是一個能夠讓用戶輕松架構和使用的分布式計算平台。用戶可以輕松地在 Hadoop 上開發和運行處理海量數據的應用程序。它主要有以下幾個優點:

⒈高可靠性。Hadoop 按位存儲和處理數據的能力值得人們信賴。

⒉高擴展性。Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以千計的節點中。

⒊高效性。Hadoop 能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

⒋高容錯性。Hadoop 能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分配。

Hadoop 帶有用 Java 語言編寫的框架,因此運行在 Linux 生產平台上是非常理想的。Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

2.3HDFS組件

Application Master

•為應用程序申請資源,並分配給內部任務

•任務調度、監控與容錯

Resource Manager
Scheduler
Applications Manager

Node Manager
資源管理單元
Container
工作流程
Zookeeper
集群管理的基本作用
架構
ZNode
Kafka
功能組件
Producer
Broker
Topic
Consumer Group
Consumer

MapReduce

MapReduce 1.0的缺陷

(1)存在單點故障

(2)JobTracker“大包大攬”導 致任務過重(任務多時內存開銷 大,上限4000節點)

(3)容易出現內存溢出(分配 資源只考慮MapReduce任務數, 不考慮CPU、內存)

(4)資源划分不合理(強制划分為slot ,包括Map slot和Reduce slot)

YARN

純粹的資源管理調度框架

被剝離了資源管理調度功能的MapReduce 框架就變成了MapReduce2.0,它是運行在YARN之上的一個純粹的計算框架,不再自己 負責資源調度管理服務, 而是由YARN為其提供資源 管理調度服務

YARN的優勢 :

• 大大減少了承擔中心服務功能的ResourceManager的資源消耗

• YARN中的資源管理比MapReduce1.0更加高效

• YARN為這些計算框架提供統一的資源調度管理服務,並且能夠根據各種計算框架的負載需求調整各自占用的資源,實現集群資源共享 和資源彈性收縮;可以實現一個集群上的不同應用負載混搭,有效提 高了集群的利用率;不同計算框架可以共享底層存儲,避免了數據集跨集群移動

2.4Hadoop的安裝部署

​ 安裝方式
​ 安裝流程與主要命令
​ 分布式模式
​ 單機模式
​ 偽分布式模式
​ core-site.xml配置
​ hdfs-site.xml配置

3.HDFS分布式文件存儲

3.1HDFS

HDFS是一種典型的主從式的分布式文件系統

分布式文件系統概述

• 在獲取了海量的數據之后,采用何種方式進行高效存儲是進行 大數據分析的基礎

• 基於分布式硬件集群,並采用特定的分布式文件系統對海量數 據(尤其是原生數據)進行存儲

• 分布式文件系統把文件分布存儲到多個計算機節點上,成千上 萬的計算機節點構成計算機集群

塊:HDFS 以塊(默認 64MB)作為存儲單位

①支持大規模文件存儲:一個大規模文件可被分拆成若干個文件塊,不同的文件塊可以被分發到不同的節點上。因此,一個文件的大小不會受到單個節點的存儲容量的限制。
②簡化系統設計:元數據無需和文件塊一起存儲。
③適合數據備份:每個文件塊都可冗余存儲到多個節點上,大大提高了系統的容錯性和可用性。

3.2架構

NameNode

NameNode負責管理分布式文件系統的命名空間(Namespace) ,保存了兩個核心的數據結構,即FsImage和EditLog

• 在名稱節點啟動時,它會將FsImage文件中的內容加載到內存 中,之后再執行EditLog文件中的各項操作,使得內存中的元數 據和實際的同步,存在內存中的元數據支持客戶端的讀操作。

• 一旦在內存中成功建立文件系統元數據的映射,則創建一個新 的FsImage文件和一個空的EditLog文件

•名稱節點啟動之后,HDFS中的更新操作會重新寫到EditLog文件 中,因為FsImage文件一般都很大(GB級別的很常見),如果所 有的更新操作都往FsImage文件中添加,這樣會導致系統運行的 十分緩慢,但是,如果往EditLog文件里面寫就不會這樣,因為 EditLog 要小很多。每次執行寫操作之后,且在向客戶端發送成 功代碼之前,edits文件都需要同步更新

​ Editlog
​ FsImage

主要功能特性

存儲元數據

元數據保存在內存中

保存文件,block,datanode這間的映射關系

DataNode

​ HDFS Block
​ 64MB
​ 128MB

主要功能特性

​ 功能:
存儲文件內容
文件內容保存在磁盤
維護了block id 到datanode本地文件的映射關系
特性:
支持大規模文件存儲
簡化系統設計
適合數據備份

SecondaryNameNode

主要作用

克服:

  1. 當 NameNode 運行了很長時間后,edit logs 文件會變得很大。
  2. NameNode 的重啟會花費很長時間,因為有很多改動 [筆者注:在 edit logs 中] 要合並到 fsimage 文件上。
  3. 如果 NameNode 掛掉了,那我們就丟失了很多改動因為此時的 fsimage 文件非常舊。
運行機制

首先,它定時到 NameNode 去獲取 edit logs,並更新到 fsimage 上。[筆者注:Secondary NameNode 自己的 fsimage]
一旦它有了新的 fsimage 文件,它將其拷貝回 NameNode 中。
NameNode 在下次重啟時會使用這個新的 fsimage 文件,從而減少重啟的時間。

3.3數據存取過程

數據存儲

• 第一個副本:放置在上傳文件的數據節點;如果是集群外提交,則隨 機挑選一台磁盤不太滿、CPU不太忙的節點

• 第二個副本:放置在與第一個副本不同的機架的節點上 • 第三個副本:與第一個副本相同機架的其他節點上

• 更多副本:隨機節點

被存放在數據節點A和B上。這種多副本方式具有以下幾個優點:

(1)加快數據傳輸速度 (2)容易檢查數據錯誤 (3)保證數據可靠性

• 數據讀取

• HDFS提供了一個API可以確定一個數據節點所屬的機架ID,客 戶端也可以調用API獲取自己所屬的機架ID

• 當客戶端讀取數據時,從名稱節點獲得數據塊不同副本的存放位 置列表,列表中包含了副本所在的數據節點,可以調用API來確 定客戶端和這些數據節點所屬的機架ID,當發現某個數據塊副本 對應的機架ID和客戶端對應的機架ID相同時,就優先選擇該副本 讀取數據,如果沒有發現,就隨機選擇一個副本讀取數據

3.4優點與局限性

​ 優點
​ 支持流數據讀寫
​ 支持廉價設備
​ 支持大數據集
​ 文件模型簡單
​ 跨平台支持
​ 局限性
​ 不適合低延遲數據訪問
​ 無法高效存儲小文件
​ 不支持多用戶寫入及任意文件修改
​ 命名空間限制
​ 數據隔離問題
​ 性能瓶頸
​ 集群的可用性
​ 單點故障

4. NoSQL與HBase分布式數據庫

4.1常見NoSql

鍵值數據庫、列族數據庫、文檔數據庫、圖形數據庫

三大基石

CAP、BASE 和最終一致性

文檔數據庫

存儲、索引並管理面向文檔的數據或者類似的半結構化數據 比如,用於后台具有大量讀寫操作的網站、使用JSON數據結構 的應用、使用嵌套結構等非規范化數據的應用程序

優點

性能好(高並發),靈活性高,復雜性低,數據結構靈活 提供嵌入式文檔功能,將經常查詢的數據存儲在同一個文檔中 既可以根據鍵來構建索引,也可以根據內容構建索引

缺點

缺乏統一的查詢語法

​ MongoDB
​ CouchDB
​ ...

圖數據庫

專門用於處理具有高度相互關聯關系的數據,比較適合於社交網 絡、模式識別、依賴分析、推薦系統以及路徑尋找等問題

優點

靈活性高,支持復雜的圖算法,可用於構建復雜的關系圖譜

缺點

復雜性高,只能支持一定的數據規模

Neo4j
Infinite Graph

列族數據庫

典型應用

分布式數據存儲與管理 數據在地理上分布於多個數據中心的應用程序 可以容忍副本中存在短期不一致情況的應用程序 擁有動態字段的應用程序 擁有潛在大量數據的應用程序,大到幾百TB的數據

優點

查找速度快,可擴展性強,容易進行分布式擴展,復雜性低

缺點

功能較少,大都不支持強事務一致性

​ BigTable
​ HBase
​ Cassandra
​ ...

鍵值數據庫

鍵是一個字符串對象 值可以是任意類型的數據,比如整型、字符型、數組、列表、集合等

涉及頻繁讀寫、擁有簡單數據模型的應用

內容緩存,比如會話、配置文件、參數、購物車等

存儲配置和用戶數據信息的移動應用

擴展性好,靈活性好,大量寫操作時性能高

無法存儲結構化信息,條件查詢效率較低

​ Redis
​ Memcached
​ ...

4.2NoSQL關系數據庫應用

關系數據庫的優劣勢

▫ 優勢:以完善的關系代數理論作為基礎,有嚴格的標准,支持事務ACID四性,借助索引機制可以實現高效的查詢,技術成熟,有專業公司的技術支持

▫ 劣勢:可擴展性較差,無法較好支持海量數據存儲,數據模過於死板、無法較好支持Web2.0應用,事務機制影響了系 統的整體性能等

• NoSQL數據庫的優劣勢

▫ 優勢:可以支持超大規模數據存儲,靈活的數據模型可以很 好地支持Web2.0應用,具有強大的橫向擴展能力等

▫ 劣勢:缺乏數學理論基礎,復雜查詢性能不高,大都不能實現事務強一致性,很難實現數據完整性,技術尚不成熟,缺乏專業團隊的技術支持,維護較困難等

• 關系數據庫和NoSQL數據庫各有優缺點,彼此無法取代
• 關系數據庫應用場景:電信、銀行等領域的關鍵業務系統 ,需要保證強事務一致性
• NoSQL數據庫應用場景:互聯網企業、傳統企業的非關鍵 業務(比如數據分析)
• 關系數據庫和NoSQL數據庫各有優缺點,彼此無法取代
• 關系數據庫應用場景:電信、銀行等領域的關鍵業務系統 ,需要保證強事務一致性
• NoSQL數據庫應用場景:互聯網企業、傳統企業的非關鍵 業務(比如數據分析)

4.3HBase 的體系架構組成

(1) 客戶端:包含訪問 HBase 的接口,同時在緩存中維護着已訪問過的 Region 位置信息,以加快后續數據訪問過程。
(2) Zookeeper 服務器
①Zookeeper 是一個很好的集群管理工具,被大量用於分布式計算,提供配置維護、域名服務、分布式同步、組服務等。
②Zookeeper 可以幫助選舉出一個 Master 作為集群的總管,並保證在任何時刻總有唯一一個 Master 在運行,這就避免了 Master 的 “單點失效” 問題。
③Master 通過 Zookeeper 隨時感知各個 Region 服務器的工作狀態。
④每個 Region 服務器都需要到 Zookeeper 中進行注冊,Zookeeper 實時監控每個 Region 服務器的狀態並通知給 Master。
⑤Zookeeper 保存了 - ROOT - 表的地址;客戶端通過訪問 Zookeeper 獲得 - ROOT - 表的地址,通過 “三級尋址” 找到所需要的數據。
(3) 主服務器 Master 主要負責表和 Region 的管理工作
(4) Region 服務器是 Hbase 中最核心的模塊,負責維護分配給自己的 Region,並響應用戶的讀寫請求。

4.4Region 服務器工作原理

①Region 服務器內部管理了一系列 Region 對象和一個 HLog 文件(存儲在磁盤上,記錄所有的更新操作)
②每個 Region 對象由多個 Store 組成
③每個 Store 對應表中的一個列族的存儲
④每個 Store 又包含一個 MemStore 和多個 StoreFile
⑤MemStore 是內存中的緩存,保存最近更新的數據
⑥StoreFile 是磁盤文件,B 樹結構,方便快速讀取
⑦StoreFile 在底層的實現方式是 HDFS 文件系統的 HFile(HFile 數據塊采用壓縮方式存儲)

  1. 寫數據
    (1) 用戶寫入數據時,被分配到相應 Region 服務器去執行
    (2) 用戶數據首先被寫入到 MemStore 和 Hlog 中
    (3) 只有當操作寫入 Hlog 之后,commit () 調用才會將其返回給客戶端

  2. 讀數據
    當用戶讀取數據時,Region 服務器首先訪問 MemStore 緩存,如果找不到,再去磁盤上面的 StoreFile 中尋找

  3. 刷新緩存
    (1) 系統周期性把 MemStore 緩存里的內容刷寫到磁盤的 StoreFile 文件中。然后,清空緩存,並在 Hlog 里面寫入一個標記;
    (2) 每次刷寫都生成一新的 StoreFile 文件。因此,每個 Store 包含多個 StoreFile 文件;
    (3) 每個 Region 服務器都有一自己的 HLog 文件,每次啟動都檢查該文件,確認最近一次執行緩存刷新操作后是否發生新寫入操作;
    (4) 如發現更新,則先寫入 MemStore,再刷寫到 StoreFile;
    (5) 最后刪除舊的 Hlog 文件,並開始為用戶提供服務。

4.5HBase表結構操作命令

HBase 是一個稀疏、多維度、排序的映射表,這張表的索引是行鍵、列族、列限定符和時間戳
HBase 中根據行鍵、列族、列限定符和時間戳來確定一個單元格,因此可以視為一個 “四維坐標”,即 [行鍵,列 族,列限定符,時間戳]
行鍵:每個行由行鍵 (Row Key) 來標識。
列族:一表被分組成許多列族的集合,是基本的訪問控制單元。
列限定符:列族里的數據通過列限定符(或列)來定位。
時間戳:每個單元格都保存同一份數據的多個版本,該版本用時間戳進行索引。

HBase操作命令

​ 集群部署與啟動
​ 創建表
​ create
​ 全表數據查詢
​ scan
​ 表單元數據查詢
​ get
​ 已創建表信息查詢
​ list
​ 數據添加
​ put
​ 刪除表
​ enable/disable
​ drop

4.6HBase應用方案

Ganglia是UC Berkeley發起的一個開源集群監視項目,用於監控系統性能

OpenTSDB可以從大規模的 集群(包括集群中的網絡 設備、操作系統、應用程 序)中獲取相應的 metrics並進行存儲、索 引以及服務,從而使得這 些數據更容易讓人理解, 如web化,圖形化等

Ambari 的作用就 是創建、管理、監 視 Hadoop 的集群

5. MapReduce計算模型

5.1MapReduce設計思想

為什么需要MapReduce:

• 計算問題簡單,但求解困難

• 待處理數據量巨大(TB/PB級),只有分布在分布式集群節

點上並行計算才能在可接受的時間內完成

傳統並行計算框架

共享式(共享內存/共享存儲),容錯性差

刀片服務器、高速網、SAN,價格貴,擴展性差

實時、細粒度計算、計算密集型

MapReduce

非共享式,容錯性好

普通PC機,便宜,擴展性好

簡單

批處理、非實時、數據密

集型

Moving computing instead of moving data

MapReduce設計的一個理念就是“計算向數據靠攏”,而

不是“數據向計算靠攏”

分治思想

MapReduce采用“分而治之”策略,一個存儲在分布式文 件系統中的大規模數據集,會被切分成許多獨立的分片( split),這些分片可以被多個Map任務並行處理

5.2編程模型

開發者需編寫 兩個主要函數

Map: (in_key, in_value)→{(keyj, valuej) | j = 1...k}

Reduce: (key, [value1,...,valuem])→(key, final_value)

Map輸入參數:in_key和in_value,它指明了Map需要處理的原始數據

Map輸出結果:一組<key,value>對,這是經過Map操作后所產生的中間結果

Reduce輸入參數:(key, [value1,...,valuem])

Reduce工作:對這些對應相同key的value值進行歸並處理

Reduce輸出結果:(key, final_value),所有Reduce的結果並在一起就是最 終結果

5.3架構

​ JobTracker
​ TaskTracker
​ Client
​ Task

5.4MapReduce計算方法

5.4.1wordcount:

input---->map-----reduce------output

input:

會文件按行分割形成 <key,value>

這一步由 Mapreduce 框架自動完成,其中 key 是偏移量,包含了回車所占的字符數,value 是這一行的數據

map:

將分割好的 <key,value> 對交給用戶定義的 map 方法處理,形成新的 < key,value > 對

得到 map 方法輸出的 <key,value> 對后,Mapper 會將他們按照 key 值進行排序,得到 Mapper 的最終輸出結果

reduce:

Reducer 先對從 Mapper 接受的 <key,value> 對進行 shuffle 處理

然后再交給用戶自定義的 reduce 方法進行合並處理,再得到新的 <key,value> 對

最后將這個 <key,value> 對作為 wordcount 的結果輸出

5.4.2MapReduce

(1)第 1 個 MapReduce
map
找出每個用戶都是誰的好友,例如:
讀一行 A:B,C,D,F,E,O(A 的好友有這些,反過來拆開,這些人中的每一個都是 A 的好友)
輸出 <B,A> <C,A> <D,A> <F,A> <E,A> <O,A>
再讀一行 B:A,C,E,K
輸出 <A,B> <C,B> <E,B> <K,B>
……
reduce
key 相同的會分到一組,例如:
<C,A><C,B><C,E><C,F><C,G>…
Key:C
value: [ A, B, E, F, G ]
意義是:C 是這些用戶的好友。
遍歷 value 就可以得到:
A B 有共同好友 C
A E 有共同好友 C

B E 有共同好友 C
B F 有共同好友 C
輸出:
<A-B,C>
<A-E,C>
<A-F,C>
<A-G,C>
<B-E,C>
<B-F,C>

(2)第 2 個 MapReduce
對上一步的輸出結果進行計算。
map
讀出上一步的結果數據,組織成 key value 直接輸出
例如:
讀入一行 <A-B,C>
直接輸出 <A-B,C>
reduce
讀入數據,key 相同的在一組
<A-B,C><A-B,F><A-B,G>…
輸出:
A-B C,F,G,…
這樣就得出了兩個用戶間的共同好友列表

5.5MapReduce 中的 shuffle 過程

Shuffle 是指對 Map 輸出結果進行分區、排序、合並等處理並交給 Reduce 的過程,因此,Shuffle 過程又分為 Map 端的操作和 Reduce 端的操作
(1) Map 端的 Shuffle 過程
①輸入數據可以是文檔,也可以是二進制格式的。Map 任務接受 <key,value> 輸入,映射轉換為 < key,value > 輸出
(輸入數據和執行 Map 任務)
②Map 的輸出結果首先被寫入緩存,當緩存滿時,就啟動溢寫操作,把緩存中的數據寫入磁盤文件,並清空緩存
(寫入緩存)
③當啟動溢寫操作時,首先需要把緩存中的數據進行分區,然后對每個分區的數據進行排序(Sort)和合並(Combine),之后再寫入磁盤文件。每次溢寫操作會生成一個新的磁盤文件,隨着 Map 任務的執行,磁盤中就會生成多個溢寫文件
(溢寫(分區、排序和合並))
④在 Map 任務全部結束之前,這些溢寫文件會被歸並(Merge)成一個大的磁盤文件,然后通知相應的 Reduce 任務來領取屬於自己處理的數據
(文件歸並)

5.6Reduce 端的 Shuffle 過程

Reduce 任務從 Map 端的不同 Map 機器領回屬於自己處理的那部分數據,然后對數據進行歸並(Merge)后交給 Reduce 處理
①“領取” 數據
②歸並數據
③把數據輸入給 Reduce 任務

b. MapReduce 執行過程包括哪些
(1)MapReduce 框架使用 InputFormat 模塊做 Map 前的預處理,比如驗證輸入的格式是否符合輸入定義;然后,將輸入文件切分為邏輯上的多個 InputSplit(邏輯概念,並沒有實際切割)
(2)RecorderReader (RR) 處理 InputSplit 中的具體記錄,加載數據並轉換為合適的鍵值對,輸入給 Map 任務
(3)Map 任務根據用戶自定義映射規則,輸出一系列的 <key,value> 作為中間結果
(4)Shuffle(洗牌),通過排序(Sort)、合並(Combine)、歸並(Merge)等操作,將無序的 <key,value> 轉換為有序的 < key,value-list>
(5)Reduce 以一系列 <key,value-list> 中間結果作為輸入,執行用戶定義的邏輯,輸出結果給 OutputFormat 模塊
(6)OutputFormat 模塊會驗證輸出目錄是否已經存在以及輸出類型結果類型是否符合配置文件中的配置類型,如果都滿足,就輸出 Reduce 的結果到分布式文件系統

6. Spark分布式內存計算模型

6.1Spark特點:

• 運行速度快:使用DAG執行引擎以支持循環數據流與內存計算

• 容易使用:支持使用Scala、Java、Python和R語言進行編程,可以 通過Spark Shell進行交互式編程

• 通用性:Spark提供了完整而強大的技術棧,包括SQL查詢、流式 計算、機器學習和圖算法組件

• 運行模式多樣:可運行於獨立的集群模式中,可運行於Hadoop中 ,也可運行於Amazon EC2等雲環境中,並且可以訪問HDFS、 Cassandra、HBase、Hive等多種數據源

6.2RDD數據封裝

RDD:是Resillient Distributed Dataset(彈性分布式數據集 )的簡稱,是分布式內存的一個抽象概念,提供了一種高 度受限的共享內存模型

RDD 中的依賴關系分為窄依賴與寬依賴。

  1. 如果父 RDD 的一個分區只能被一個子 RDD 的一個分區使用就是窄依賴,否則就是寬依賴
  2. 從計算過程來看,窄依賴是數據以管道方式經一系列計算操作可以運行在了一個集群節點上;寬依賴則可能需要將數據通過跨節點傳遞后運行(如 groupByKey),有點類似於 MR 的 shuffle 過程
  3. 從失敗恢復來看,窄依賴的失敗恢復起來更高效,因為它只需找到父 RDD 的一個對應分區即可,而且可以在不同節點上並行計算做恢復;寬依賴則牽涉到父 RDD 的多個分區,恢復起來相對復雜些

RDD 操作的惰性機制
即在 RDD 的執行過程中,真正的計算發生在 RDD 的 “行動” 操作,對於 “行動” 之前的所有 “轉換” 操作,Spark 只是記錄下 “轉換” 操作應用的一些基礎數據集以及 RDD 生成的軌跡,即相互之間的依賴關系,而不會觸發真正的計算

6.3Spark作業

作業組成
ShuffleMapStage

ShuffleMapStage:不是最終的Stage,在它之后還有 其他Stage,所以,它的輸出一定需要經過Shuffle過程,並 作為后續Stage的輸入;這種Stage是以Shuffle為輸出邊界, 其輸入邊界可以是從外部獲取數據,也可以是另一個 ShuffleMapStage的輸出,其輸出可以是另一個Stage的開始; 在一個Job里可能有該類型的Stage,也可能沒有該類型 Stage;

Result Stage

ResultStage:最終的Stage,沒有輸出,而是直接產生 結果或存儲。這種Stage是直接輸出結果,其輸入邊界可以 是從外部獲取數據,也可以是另一個ShuffleMapStage的輸出。 在一個Job里必定有該類型Stage。
因此,一個Job含有一個或多個Stage,其中至少含有一個 ResultStage。

6.4Spark 的運行的流程

  1. 首先為應用構建起基本的運行環境,即由 Driver 創建一個 SparkContext,進行資源的申請、任務的分配和監控。

  2. 資源管理器為 Executor 分配資源,並啟動 Executor 進程。
    3.SparkContext 根據 RDD 的依賴關系構建 DAG 圖,DAG 圖提交給 DAGScheduler 解析成 Stage (TaskSet),把一個個 TaskSet 提交給底層調度器 TaskScheduler 處理,Executor 向 SparkContext 申請 Task,TaskScheduler 將 Task 發放給 Executor 運行,並提供應用程序代碼
    4.Task 在 Executor 上運行,把執行結果反饋給 TaskScheduler,然后反饋給 DAGScheduler,運行完畢后寫入數據並釋放所有資源

部署方式

Standalone

類似於MapReduce1.0,slot為資源分配單位

Spark on Mesos

和Spark有血緣關系,更好支持Mesos

Spark on YARN

Spark SQL Spark Streaming Mllib(machine learning) Graphx

Spark

YARN

HDFS

6.5Spark與MapReduce的異同

Hadoop MapReduce存在如下一些缺點

表達能力有限
僅存在Map和Reduce兩個算子,難以描述復雜計算過程

磁盤IO開銷大
每次作業均需要從磁盤讀取數據,中間結果同樣寫入磁盤

延遲高
MapReduce各個任務間涉及IO開銷,

存在延遲
前一個任務完成前,其它任務無法開展

相比於Hadoop MapReduce,Spark主要具有如下優點:
Spark的計算模式也屬於MapReduce,但不局限於Map和 Reduce操作,還提供了多種數據集操作類型,編程模型比 Hadoop MapReduce更靈活
Spark提供了內存計算,可將中間結果放到內存中,對於迭代 運算效率更高
Spark基於DAG的任務調度執行機制,要優於Hadoop MapReduce的迭代執行機制

6.6Spark 算子

Spark 的算子的分類

(1)Transformation 變換 / 轉換算子:這種變換並不觸發提交作業,完成作業中間過程處理。

     Transformation 操作是延遲計算的,也就是說從一個 RDD 轉換生成另一個 RDD 的轉換操作不是馬上執行,需要等到有 Action 操作的時候才會真正觸發運算。

reduceByKey, filter, groupByKey, map, flatmap

(2)Action 行動算子:這類算子會觸發 SparkContext 提交 Job 作業。

     Action 算子會觸發 Spark 提交作業(Job),並將數據輸出 Spark 系統。

​ reduce, collect, take ,

(1)Value 數據類型的 Transformation 算子,這種變換並不觸發提交作業,針對處理的數據項是 Value 型的數據。
(2)Key-Value 數據類型的 Transfromation 算子,這種變換並不觸發提交作業,針對處理的數據項是 Key-Value 型的數據對。

(3)Action 算子,這類算子會觸發 SparkContext 提交 Job 作業。

7. Storm流式數據計算模型

7.1Storm術語

①Storm:
一個免費的、開源的分布式實時計算系統;
Storm 可以簡單、高效、可靠地處理流數據,並支持多種編程語言;
可用於許多領域,如實時分析、在線機器學習、持續計算、遠程 RPC、數據提取加載轉換等;
Storm 框架可方便地與數據庫系統進行整合,從而開發出強大的實時計算系統。
②Tuple(元組):
Tuple 實質上是一個 <key,value> 形式的 Map 型數據結構;
在 Storm 中 Tuple 專業表述為 <Fields,Values> 是 Storm 中消息傳遞的基本單元。其中 Fileds 和 Value 兩個字段本身可以是任意復雜的數據結構,必須滿足可序列化這一基本條件。
③Streams:
(1) Stream 是 Storm 的實時處理功能的核心抽象體,是一個無限的 Tuple 序列,源源不斷的 Tuple 組成了 Stream。Stream 有源頭和處理流的水壩,Storm 源和水壩分別為 Spout 和 Bolt
(2) Spout 是流的源頭,通常從外部數據源讀取數據並轉化為 Tuple。然后轉發到各個 Bolt 中
(3) Bolt 是流處理節點,處理流向本 Bolt 的所有 Tuple,常見處理包括過濾、join、連接數據庫
(4) 頂點與頂點之間的數據流為 Stream,數據源為 Spout,流處理節點為 Bolt,稱由 Spout、Stream、Bolt 構成圖為 Topology
(5) Spout 可以將 Tuple 發射到一個或者多個 Bolt,同樣 Bolt 可以訂閱一個或多個 Spout。
Bolt 能訂閱一個或多個上層的 Bolt,即 Topology 可以有多個 Spout 和多層 Bolt。
④Spout:
Spout 表示整個 Topology 的 Stream 來源(HDFS、Hbase、JDBC 等),Storm 框架會不停的調用 Spout 里的 nextTuple () 來實時讀取輸入源中的數據,除非手動停止 Topology,否則永不停止。
⑤Bolts:
(1) Storm 將 Streams 的狀態轉換過程抽象為 Bolt。Bolt 即可以處理 Tuple,也可以將處理后的 Tuple 作為新的 Streams 發送給其他 Bolt;
(2) Bolt 可以執行過濾、函數操作、Join、操作數據庫等任何操作;
(3) Bolt 是一個被動的角色,其接口中有一個 execute (Tuple input) 方法,在接收到消息之后會調用此函數,用戶可在此方法中執行自己的處理邏輯
⑥Topology:
(1) Topology 由 Spout、Bolt、Stream 構成的 DAG 圖。是 Storm 中運行的一個實際應用程序,類似於 MapReduce 程序,MapReduce 作業有個時間期限,而一旦提交一個 Topology,除非手動將其停止,否則這個 Topology 永遠執行。
(2) Topology 里面的每一個組件都是並行運行的。

7.2典型應用場景

• 智能交通
• 個性化推薦系統
• 信貸風險監控與金融反欺詐

實時分析、在線機器學習、不停頓的計算、分布式 RPC

1、Flume用於收集日志信息; 2、結合數據傳輸功能可以把收集到的日志信息實時 傳輸到kafka集群,或保存到Hadoop hdfs中保存。 這里之所以選擇kafka集群是因為kafka集群具備緩沖 功能,可以防止數據采集速度和數據處理速度不匹配 導致數據丟失,這樣做可以提高可靠性。 3、使用storm實時處理數據; 4、保存storm處理的結果數據,當數據量不是特別巨 大時,可以使用MySQL存儲;當數據量特別巨大時 ,可以選擇hdfs存儲。

5、用於實時展示處理結果。

7.3Stream Groupings

(1) 用於告知 Topology 如何在兩個組件間(如 Spout 和 Bolt 之間,或者不同的 Bolt 之間)進行 Tuple 的傳送。
(2) 每一個 Spout 和 Bolt 都可有多個分布式任務,一個任務在什么時候、以什么方式發送 Tuple 是由 Storm Groupings 來決定的。

目前主要有以下六種方式:
ShuffleGrouping:隨機分組
FieldsGrouping:按照字段分組
AllGrouping:廣播發送
GlobalGrouping:全局分組
NonGrouping:不分組
DirectGrouping:直接分組

7.4Storm具有以下主要特點:

▫ 整合性:Storm可方便地與隊列系統和數據庫系統進行整合 ▫ 簡易的API:Storm的API在使用上即簡單又方便
▫ 可擴展性:Storm的並行特性使其可以運行在分布式集群中 ▫ 容錯性:Storm自動進行故障節點的重啟、任務的重新分配 ▫ 可靠的消息處理:Storm保證每個消息都能完整處理
▫ 支持各種編程語言:Storm支持使用各種編程語言定義任務 ▫ 快速部署:Storm可以快速進行部署和使用
▫ 免費、開源:Storm是一款開源框架,可以免費使用

7.5Kafka

Kafka是一種高吞吐量的分布式發布訂閱消息系統,它可以處理消費者規模的網站 中的所有動作流數據。Kafka的目的是通過並行加載機制來統一線上和離線的消息 處理,也是為了通過集群機來提供實時的消費

主要應用場景是:日志收集系統和消息系統。

7.6流式數據計算概念

​ 流式數據計算的特點及典型應用場景
​ 流式數據計算主要階段
​ 數據實時采集
​ 數據實時計算
​ 數據實時查詢
​ 流式數據計算、交互式計算、批處理計算的異同
Storm作業運行封裝
​ Topology
Storm數據封裝模型
​ Tuple
Storm計算模型
​ 架構
​ Zookeeper
​ Nimbus
​ Supervisor
​ Worker
​ 組件
​ Spout
​ Bolt

8. 數據分析與計算模型

8.1機器學習基本概念與任務

大數據分析主要依靠機器學習和大規模計算。機器學習包括監督學習、非監督學習、強化學習等,而監督學習又包括分類學習、回歸學習、排序學習、匹配學 習等。

分類是最常見的機器學習應用問題,比如垃圾郵件過濾、人臉檢測、用戶畫像、文本情感分析、網頁歸類等,本質上都是分類問題。分類學習也是 機器學習領域,研究最徹底、使用最廣泛的一個分支。

8.2Python語言基礎

​ 編程工具
​ Jupyter Notebook
​ Pycharm
​ 機器學習算法包
​ Numpy
​ Matplotlib
​ Pandas
​ Sklearn
​ Pytorch
​ Tensorflow

9.1大數據處理

大數據處理的第一個步驟就是數據抽取與集成。這是因為大數據處理的數據來源類型豐富,大數據處理的第一步是對數據進行抽取和集成,從中提取出關系和實體,經過關聯和聚合等操作,按照統一定義的格式對數據進行存儲。現有的數據抽取和集成方法有三種,分別是基於物化或 ETL 方法的引擎、基於聯邦數據庫或中間件方法的引擎、基於數據流方法的引擎。這些引擎都是很重要的。

大數據處理的第二個步驟就是數據分析。數據分析是大數據處理流程的核心步驟,通過數據抽取和集成環節,我們已經從異構的數據源中獲得了用於大數據處理的原始數據,用戶可以根據自己的需求對這些數據進行分析處理,比如數據挖掘、機器學習、數據統計等,數據分析可以用於決策支持、商業智能、推薦系統、預測系統等。通過數據分析我們能夠掌握數據中的信息。

大數據處理的第三個步驟就是數據解釋。大數據處理流程中用戶最關心的是數據處理的結果,正確的數據處理結果只有通過合適的展示方式才能被終端用戶正確理解,因此數據處理結果的展示非常重要,可視化和人機交互是數據解釋的主要技術。這個步驟能夠讓我們知道我們分析數據的結果。

使用可視化技術,可以將處理的結果通過圖形的方式直觀地呈現給用戶,標簽雲、歷史流、空間信息流等是常用的可視化技術,用戶可以根據自己的需求靈活地使用這些可視化技術。而人機交互技術可以引導用戶對數據進行逐步的分析,使用戶參與到數據分析的過程中,使用戶可以深刻地理解數據分析結果。這些都是我們所關注的內容。

9.2分析題

解決方案:

1)數據平台復制數據需要支持異構數據庫、大數據量、實時性、模塊化。

可以考慮初始化數據全量同步到 hdfs, 增量數據同步到 kafka。

2)復制數據放在 備份庫上。一定要減輕生產庫的壓力。

3)為了節約網絡資源,需要和備份數據庫放在同一個機房。、

4)需要建立數據控制流,方便數據校驗。 暫定校驗數據條數、數據數量合計。

目的是支持后續業務進行數據操作回查,實現數據校驗。特別是財務數據,可能需要下鑽

抽取憑證級的數據。

5)需要配置多個同步通道。可以快速將數據同步到數據庫,並支持增量同步的方式。

需要選取復制效率最高的產品。如可以支持多線程、多並發、特定數據格式、數據壓縮技術,

以及快速數據抽取和裝載技術。

9.3談談對 Hadoop 系統的組成及其基本工作原理的理解。

1.MapReduce 並行計算框架

MapReduce 並行計算框架是一個並行化程序執行系統。它提供了一個包含 Map 和 Reduce 兩階段的並行處理模型和過程,提供一個並行化編程模型和接口,讓程序員可以方便快速地編寫出大數據並行處理程序。MapReduce 以鍵值對數據輸入方式來處理數據,並能自動完成數據的划分和調度管理。在程序執行時,MapReduce 並行計算框架將負責調度和分配計算資源,划分和輸入輸出數據,調度程序的執行,監控程序的執行狀態,並負責程序執行時各計算節點的同步以及中間結果的收集整理。MapReduce 框架提供了一組完整的供程序員開發 MapReduce 應用程序的編程接口。

2.分布式文件系統 HDFS

HDFS(Hadoop Distributed File System)是一個類似於 GoogleGFS 的開源的分布式文件系統。它提供了一個可擴展、高可靠、高可用的大規模數據分布式存儲管理系統,基於物理上分布在各個數據存儲節點的本地 Linux 系統的文件系統,為上層應用程序提供了一個邏輯上成為整體的大規模數據存儲文件系統。與 GFS 類似,HDFS 采用多副本(默認為 3 個副本)數據冗余存儲機制,並提供了有效的數據出錯檢測和數據恢復機制,大大提高了數據存儲的可靠性。

3.分布式數據庫管理系統 HBase

為了克服 HDFS 難以管理結構化 / 半結構化海量數據的缺點,Hadoop 提供了一個大規模分布式數據庫管理和查詢系統 HBase。HBase 是一個建立在 HDFS 之上的分布式數據庫,它是一個分布式可擴展的 NoSQL 數據庫,提供了對結構化、半結構化甚至非結構化大數據的實時讀寫和隨機訪問能力。HBase 提供了一個基於行、列和時間戳的三維數據管理模型,HBase 中每張表的記錄數(行數)可以多達幾十億條甚至更多,每條記錄可以擁有多達上百萬的字段。

4.公共服務模塊 Common

Common 是一套為整個 Hadoop 系統提供底層支撐服務和常用工具的類庫和 API 編程接口,這些底層服務包括 Hadoop 抽象文件系統 FileSystem、遠程過程調用 RPC、系統配置工具 Configuration 以及序列化機制。在 0.20 及以前的版本中,Common 包含 HDFS、MapReduce 和其他公共的項目內容;從 0.21 版本開始,HDFS 和 MapReduce 被分離為獨立的子項目,其余部分內容構成 Hadoop Common。

5.數據序列化系統 Avro

Avro 是一個數據序列化系統,用於將數據結構或數據對象轉換成便於數據存儲和網絡傳輸的格式。Avro 提供了豐富的數據結構類型,快速可壓縮的二進制數據格式,存儲持久性數據的文件集,遠程調用 RPC 和簡單動態語言集成等功能。

6.分布式協調服務框架 Zookeeper

Zookeeper 是一個分布式協調服務框架,主要用於解決分布式環境中的一致性問題。Zookeeper 主要用於提供分布式應用中經常需要的系統可靠性維護、數據狀態同步、統一命名服務、分布式應用配置項管理等功能。Zookeeper 可用來在分布式環境下維護系統運行管理中的一些數據量不大的重要狀態數據,並提供監測數據狀態變化的機制,以此配合其他 Hadoop 子系統(如 HBase、Hama 等)或者用戶開發的應用系統,解決分布式環境下系統可靠性管理和數據狀態維護等問題。

7.分布式數據倉庫處理工具 Hive

Hive 是一個建立在 Hadoop 之上的數據倉庫,用於管理存儲於 HDFS 或 HBase 中的結構化 / 半結構化數據。它最早由 Facebook 開發並用於處理並分析大量的用戶及日志數據,2008 年 Facebook 將其貢獻給 Apache 成為 Hadoop 開源項目。為了便於熟悉 SQL 的傳統數據庫使用者使用 Hadoop 系統進行數據查詢分析,Hive 允許直接用類似 SQL 的 HiveQL 查詢語言作為編程接口編寫數據查詢分析程序,並提供數據倉庫所需要的數據抽取轉換、存儲管理和查詢分析功能,而 HiveQL 語句在底層實現時被轉換為相應的 MapReduce 程序加以執行。

8.數據流處理工具 Pig

Pig 是一個用來處理大規模數據集的平台,由 Yahoo! 貢獻給 Apache 成為開源項目。它簡化了使用 Hadoop 進行數據分析處理的難度,提供一個面向領域的高層抽象語言 Pig Latin,通過該語言,程序員可以將復雜的數據分析任務實現為 Pig 操作上的數據流腳本,這些腳本最終執行時將被系統自動轉換為 MapReduce 任務鏈,在 Hadoop 上加以執行。Yahoo! 有大量的 MapReduce 作業是通過 Pig 實現的。

9.鍵值對數據庫系統 Cassandra

Cassandra 是一套分布式的 K-V 型的數據庫系統,最初由 Facebook 開發,用於存儲郵箱等比較簡單的格式化數據,后 Facebook 將 Cassandra 貢獻出來成為 Hadoop 開源項目。Cassandra 以 Amazon 專有的完全分布式 Dynamo 為基礎,結合了 Google BigTable 基於列族(Column Family)的數據模型,提供了一套高度可擴展、最終一致、分布式的結構化鍵值存儲系統。它結合了 Dynamo 的分布技術和 Google 的 Bigtable 數據模型,更好地滿足了海量數據存儲的需求。同時,Cassandra 變更垂直擴展為水平擴展,相比其他典型的鍵值數據存儲模型,Cassandra 提供了更為豐富的功能。

10.日志數據處理系統 Chukwa

Chukwa 是一個由 Yahoo!貢獻的開源的數據收集系統,主要用於日志的收集和數據的監控,並與 MapReduce 協同處理數據。Chukwa 是一個基於 Hadoop 的大規模集群監控系統,繼承了 Hadoop 系統的可靠性,具有良好的適應性和擴展性。它使用 HDFS 來存儲數據,使用 MapReduce 來處理數據,同時還提供靈活強大的輔助工具用以分析、顯示、監視數據結果。

11.科學計算基礎工具庫 Hama

Hama 是一個基於 BSP 並行計算模型(Bulk Synchronous Parallel,大同步並行模型)的計算框架,主要提供一套支撐框架和工具,支持大規模科學計算或者具有復雜數據關聯性的圖計算。Hama 類似 Google 公司開發的 Pregel,Google 利用 Pregel 來實現圖遍歷(BFS)、最短路徑(SSSP)、PageRank 等計算。Hama 可以與 Hadoop 的 HDSF 進行完美的整合,利用 HDFS 對需要運行的任務和數據進行持久化存儲。由於 BSP 在並行化計算模型上的靈活性,Hama 框架可在大規模科學計算和圖計算方面得到較多應用,完成矩陣計算、排序計算、PageRank、BFS 等不同的大數據計算和處理任務。

12.數據分析挖掘工具庫 Mahout

Mahout 來源於 Apache Lucene 子項目,其主要目標是創建並提供經典的機器學習和數據挖掘並行化算法類庫,以便減輕需要使用這些算法進行數據分析挖掘的程序員的編程負擔,不需要自己再去實現這些算法。Mahout 現在已經包含了聚類、分類、推薦引擎、頻繁項集挖掘等廣泛使用的機器學習和數據挖掘算法。此外,它還提供了包含數據輸入輸出工具,以及與其他數據存儲管理系統進行數據集成的工具和構架。

13.關系數據交換工具 Sqoop

Sqoop 是 SQL-to-Hadoop 的縮寫,是一個在關系數據庫與 Hadoop 平台間進行快速批量數據交換的工具。它可以將一個關系數據庫中的數據批量導入 Hadoop 的 HDFS、HBase、Hive 中,也可以反過來將 Hadoop 平台中的數據導入關系數據庫中。Sqoop 充分利用了 Hadoop MapReduce 的並行化優點,整個數據交換過程基於 MapReduce 實現並行化的快速處理。

14.日志數據收集工具 Flume

Flume 是由 Cloudera 開發維護的一個分布式、高可靠、高可用、適合復雜環境下大規模日志數據采集的系統。它將數據從產生、傳輸、處理、輸出的過程抽象為數據流,並允許在數據源中定義數據發送方,從而支持收集基於各種不同傳輸協議的數據,並提供對日志數據進行簡單的數據過濾、格式轉換等處理能力。輸出時,Flume 可支持將日志數據寫往用戶定制的輸出目標。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM