大數(shù)據(jù)思維
什么是大數(shù)據(jù)
大數(shù)據(jù)具備Volume、Velocity、Variety和Value四個(gè)特征,簡(jiǎn)稱“4V”,即數(shù)據(jù)體量巨大、速度快、類型多樣,價(jià)值密度低但整體價(jià)值高。
大數(shù)據(jù)產(chǎn)生
數(shù)據(jù)產(chǎn)生經(jīng)歷了被動(dòng)、主動(dòng)和自動(dòng)三個(gè)階段,分別是運(yùn)營(yíng)式系統(tǒng)階段、用戶原創(chuàng)內(nèi)容階段和感知式系統(tǒng)階段。
對(duì)數(shù)據(jù)分析的新認(rèn)識(shí)
- 不是隨機(jī)樣本,而是全體數(shù)據(jù)
- 不是純凈,而是混雜
- 不是精確,而是趨勢(shì)
- 不是因果關(guān)系,而是相關(guān)關(guān)系
大數(shù)據(jù)技術(shù)概述
大數(shù)據(jù)相關(guān)技術(shù)

大數(shù)據(jù)處理的基本流程
數(shù)據(jù)抽取與集成。
-
數(shù)據(jù)分析。
核心,大數(shù)據(jù)的價(jià)值產(chǎn)生于分析過(guò)程。
挑戰(zhàn),噪音數(shù)據(jù)清洗,處理大數(shù)據(jù)的算法,數(shù)據(jù)結(jié)果的衡量標(biāo)準(zhǔn)。
-
數(shù)據(jù)解釋。用戶更關(guān)心對(duì)結(jié)果的解釋。
引入可視化技術(shù);讓用戶了解并參與分析過(guò)程。
大數(shù)據(jù)關(guān)鍵技術(shù)
- 大數(shù)據(jù)采集技術(shù)。
- 大數(shù)據(jù)預(yù)處理技術(shù)。
- 大數(shù)據(jù)存儲(chǔ)和管理技術(shù)。
- 大數(shù)據(jù)處理技術(shù)。批處理模式和流處理模式。
- 大數(shù)據(jù)分析和挖掘技術(shù)。常用方法包括:分類、回歸分析、聚類、關(guān)聯(lián)規(guī)則。
- 大數(shù)據(jù)展示技術(shù)。特征:實(shí)時(shí)性、操作簡(jiǎn)單、豐富的展現(xiàn)、支持多種數(shù)據(jù)源。
大數(shù)據(jù)采集
大數(shù)據(jù)采集概述
挑戰(zhàn):數(shù)據(jù)源的種類多,類型繁雜,數(shù)據(jù)量大,產(chǎn)生速度快。所以大數(shù)據(jù)采集技術(shù)面臨的挑戰(zhàn)是,一方面要保證數(shù)據(jù)采集的可靠性和高效性,同時(shí)還要避免重復(fù)數(shù)據(jù)。
大數(shù)據(jù)采集方法
- 數(shù)據(jù)庫(kù)采集
- 系統(tǒng)日志采集
- 網(wǎng)絡(luò)數(shù)據(jù)采集
- 感知設(shè)備數(shù)據(jù)采集
系統(tǒng)日志采集
特征:
- 解耦應(yīng)用系統(tǒng)和分析系統(tǒng)。
- 支持近實(shí)時(shí)的在線分析和分布式并發(fā)的離線分析。
- 高可擴(kuò)展性。數(shù)據(jù)量增加時(shí),可以水平擴(kuò)展結(jié)點(diǎn)。
工具:
- Hadoop Chukwa
- Apache Flume
- Facebook Scribe
- LinkedIn Kafka
分布式架構(gòu),能夠滿足每秒數(shù)百兆的日志采集和傳輸需求。
大數(shù)據(jù)預(yù)處理
大數(shù)據(jù)預(yù)處理概述
作用:數(shù)據(jù)預(yù)處理能夠改善數(shù)據(jù)質(zhì)量,從而提高數(shù)據(jù)挖掘過(guò)程中的有效性和準(zhǔn)確性。
數(shù)據(jù)清洗
補(bǔ)全遺漏數(shù)據(jù),消除噪音數(shù)據(jù),糾正不一致的錯(cuò)誤。
數(shù)據(jù)集成
將來(lái)自多個(gè)數(shù)據(jù)源的數(shù)據(jù)合并到一起,構(gòu)成一個(gè)完整的數(shù)據(jù)集。
數(shù)據(jù)轉(zhuǎn)換
將數(shù)據(jù)格式轉(zhuǎn)換成適合數(shù)據(jù)挖掘的形式。
處理內(nèi)容:
- 平滑處理
- 合計(jì)處理
- 數(shù)據(jù)泛化處理
- 規(guī)格化處理。重要。
- 屬性構(gòu)造處理
數(shù)據(jù)消減
刪除冗余特征,聚類消除多余數(shù)據(jù)。
主要策略:
- 數(shù)據(jù)立方合計(jì)
- 維度消減
- 數(shù)據(jù)壓縮
- 數(shù)據(jù)塊消減
- 離散化與概念層次生成
大數(shù)據(jù)處理系統(tǒng)
Google大數(shù)據(jù)處理系統(tǒng)
Google使用的大數(shù)據(jù)平臺(tái)包括三個(gè)相互獨(dú)立又緊密結(jié)合的系統(tǒng),GFS,分布式文件系統(tǒng),MapReduce,分布式計(jì)算框架,BigTable,面向列的分布式數(shù)據(jù)庫(kù)。
GFS
GFS采用廉價(jià)的商用服務(wù)器組成分布式集群,能夠在頻繁的故障中確保數(shù)據(jù)存儲(chǔ)的安全,不間斷的提供服務(wù)。
GFS架構(gòu)設(shè)計(jì)的優(yōu)勢(shì):1. Client和Master Server之間只有控制流,沒(méi)有數(shù)據(jù)流,降低了Master Server的負(fù)載。2. Client和Chunk Server之間直接傳輸數(shù)據(jù)流,文件被分成多個(gè)chunk存儲(chǔ),提高了系統(tǒng)I/O的并行度。
MapReduce
MapReduce封裝了分布式系統(tǒng)中并行處理、容錯(cuò)處理、本地化計(jì)算、負(fù)載均衡等細(xì)節(jié),用戶只需要關(guān)心Map和Reduce兩個(gè)計(jì)算過(guò)程。
Hadoop大數(shù)據(jù)處理系統(tǒng)
開(kāi)源,與Google內(nèi)部使用的分布式處理系統(tǒng)原理相同。
大數(shù)據(jù)文件系統(tǒng)HDFS
HDFS簡(jiǎn)介
HDFS是Hadoop分布式文件系統(tǒng)。在Hadoop體系結(jié)構(gòu)中有兩類結(jié)點(diǎn),一類是NameNode,一類是DataNode,分別承擔(dān)Master和Worker的職責(zé)。
HDFS主要針對(duì)“一次寫(xiě)入,多次讀取”的應(yīng)用場(chǎng)景,不適合實(shí)時(shí)交互性很強(qiáng)的應(yīng)用場(chǎng)景,也不適合存儲(chǔ)大量小文件。
HDFS基本原理
傳統(tǒng)分布式系統(tǒng)問(wèn)題
- 各個(gè)存儲(chǔ)結(jié)點(diǎn)負(fù)載不均衡
- 數(shù)據(jù)可靠性低
- 文件管理困難
HDFS基本思想
- 對(duì)外提供統(tǒng)一的文件管理功能。
- 將大文件分割成不同的塊,存儲(chǔ)在不同的服務(wù)器上。
- 每個(gè)文件塊有多個(gè)備份,一般是3個(gè)。
- 在NameNode中記錄和維護(hù)文件的元信息。
HDFS設(shè)計(jì)理念
- 可構(gòu)建在廉價(jià)機(jī)器上
- 高容錯(cuò)性
- 適合批處理
- 適合存儲(chǔ)大文件
HDFS的局限
- 實(shí)時(shí)性差。
- 小文件問(wèn)題。
- 文件修改問(wèn)題。不支持多個(gè)寫(xiě)入者,不支持在任意位置修改。
HDFS系統(tǒng)實(shí)現(xiàn)
其他參考:Hadoop分布式文件系統(tǒng) - 架構(gòu)和設(shè)計(jì)
HDFS整體架構(gòu)

HDFS數(shù)據(jù)復(fù)制

HDFS中的文件都是一次性寫(xiě)入的,并且嚴(yán)格要求在任何時(shí)候只能有一個(gè)寫(xiě)入者。
同一個(gè)機(jī)架內(nèi)的兩臺(tái)機(jī)器間的帶寬會(huì)比不同機(jī)架的兩臺(tái)機(jī)器間的帶寬大,HDFS默認(rèn)的副本實(shí)例數(shù)為3,其中兩個(gè)在同一機(jī)架,另一個(gè)在不同機(jī)架。
HDFS數(shù)據(jù)訪問(wèn)機(jī)制
其他參考:hdfs架構(gòu)詳解
讀取流程

寫(xiě)入流程

大數(shù)據(jù)批處理Hadoop MapReduce
其他參考: Hadoop Map/Reduce教程
MapReduce簡(jiǎn)介
Hadoop Map/Reduce是一個(gè)使用簡(jiǎn)易的軟件框架,基于它寫(xiě)出來(lái)的應(yīng)用程序能夠運(yùn)行在由上千個(gè)商用機(jī)器組成的大型集群上,并以一種可靠容錯(cuò)的方式并行處理上T級(jí)別的數(shù)據(jù)集。
一個(gè)Map/Reduce 作業(yè)(job) 通常會(huì)把輸入的數(shù)據(jù)集切分為若干獨(dú)立的數(shù)據(jù)塊,由 map任務(wù)(task)以完全并行的方式處理它們??蚣軙?huì)對(duì)map的輸出先進(jìn)行排序, 然后把結(jié)果輸入給reduce任務(wù)。通常作業(yè)的輸入和輸出都會(huì)被存儲(chǔ)在文件系統(tǒng)中。 整個(gè)框架負(fù)責(zé)任務(wù)的調(diào)度和監(jiān)控,以及重新執(zhí)行已經(jīng)失敗的任務(wù)。
通常,Map/Reduce框架和分布式文件系統(tǒng)是運(yùn)行在一組相同的節(jié)點(diǎn)上的,也就是說(shuō),計(jì)算節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)通常在一起。這種配置允許框架在那些已經(jīng)存好數(shù)據(jù)的節(jié)點(diǎn)上高效地調(diào)度任務(wù),這可以使整個(gè)集群的網(wǎng)絡(luò)帶寬被非常高效地利用。
Map/Reduce框架由一個(gè)單獨(dú)的master JobTracker 和每個(gè)集群節(jié)點(diǎn)一個(gè)slave TaskTracker共同組成。master負(fù)責(zé)調(diào)度構(gòu)成一個(gè)作業(yè)的所有任務(wù),這些任務(wù)分布在不同的slave上,master監(jiān)控它們的執(zhí)行,重新執(zhí)行已經(jīng)失敗的任務(wù)。而slave僅負(fù)責(zé)執(zhí)行由master指派的任務(wù)。
應(yīng)用程序至少應(yīng)該指明輸入/輸出的位置(路徑),并通過(guò)實(shí)現(xiàn)合適的接口或抽象類提供map和reduce函數(shù)。再加上其他作業(yè)的參數(shù),就構(gòu)成了作業(yè)配置(job configuration)。然后,Hadoop的 job client提交作業(yè)(jar包/可執(zhí)行程序等)和配置信息給JobTracker,后者負(fù)責(zé)分發(fā)這些軟件和配置信息給slave、調(diào)度任務(wù)并監(jiān)控它們的執(zhí)行,同時(shí)提供狀態(tài)和診斷信息給job-client。
MapReduce工作流程
MapReduce實(shí)際處理過(guò)程可以分解為Input、Map、Sort、Combine、Partition、Reduce、Output等階段。

MapReduce作業(yè)執(zhí)行流程

MapReduce的Shuffle階段

大數(shù)據(jù)快速處理Spark
Hadoop MapReduce要求每個(gè)步驟間的數(shù)據(jù)都要序列化到磁盤(pán),這意味著Map Reduce作業(yè)的I/O成本很高,不適合于交互分析和機(jī)器學(xué)習(xí)。
Spark是一個(gè)基于內(nèi)存的開(kāi)源計(jì)算框架,通過(guò)提供內(nèi)存計(jì)算,減少了迭代計(jì)算時(shí)的I/O開(kāi)銷。
Spark與Hadoop
Hadoop MapReduce缺點(diǎn)
- MapReduce表達(dá)能力有限
- 磁盤(pán)I/O開(kāi)銷大
- 計(jì)算延遲高
Spark優(yōu)點(diǎn)
- 基于內(nèi)存計(jì)算
- 提供了更多的計(jì)算類型
- 提供統(tǒng)一的框架管理批量數(shù)據(jù)和流數(shù)據(jù)
- Spark基于有向無(wú)環(huán)圖的任務(wù)調(diào)度機(jī)制比MapReduce的迭代執(zhí)行機(jī)制更優(yōu)越
RDD概念
Spark的核心是建立在統(tǒng)一的抽象彈性分布式數(shù)據(jù)集(Resilient Distributed Dataset)。
可以將RDD理解為一個(gè)分布式對(duì)象集合,本質(zhì)上是一個(gè)只讀的分區(qū)記錄集合。每個(gè)RDD可以分成多個(gè)分區(qū),每個(gè)分區(qū)就是一個(gè)數(shù)據(jù)集片段。一個(gè)RDD的不同分區(qū)可以保存到集群中的不同結(jié)點(diǎn)上,從而可以在集群中的不同結(jié)點(diǎn)上進(jìn)行并行計(jì)算。
RDD特點(diǎn):1. 只讀,2. 分布式,3. 彈性,計(jì)算過(guò)程中如果內(nèi)存不足會(huì)和硬盤(pán)交換數(shù)據(jù),4. 基于內(nèi)存,可以全部或部分緩存在內(nèi)存中,多次計(jì)算間重復(fù)利用。
RDD基本操作:轉(zhuǎn)化(Transformation)操作和行動(dòng)(Action)操作。轉(zhuǎn)化操作就是從一個(gè)RDD產(chǎn)生一個(gè)新的RDD,而行動(dòng)操作就是進(jìn)行實(shí)際的計(jì)算。
大數(shù)據(jù)實(shí)時(shí)流計(jì)算Spark Streaming
Spark Streaming簡(jiǎn)介
Spark Streaming的處理機(jī)制是,接收實(shí)時(shí)的輸入數(shù)據(jù)流,并根據(jù)一定的時(shí)間間隔(如1秒)拆分成一批批的數(shù)據(jù),通過(guò)Spark Engine處理這些批數(shù)據(jù),得到結(jié)果。
Spark Streaming支持一個(gè)高層的抽象,叫做離散流(Discretized Stream)或者DStream,它代表連續(xù)的數(shù)據(jù)流。在內(nèi)部,DStream是由一系列RDD組成。一批數(shù)據(jù)對(duì)應(yīng)一個(gè)RDD實(shí)例。
大數(shù)據(jù)挖掘
數(shù)據(jù)挖掘簡(jiǎn)介
數(shù)據(jù)挖掘就是通過(guò)對(duì)大量數(shù)據(jù)的分析,發(fā)現(xiàn)信息之間的關(guān)聯(lián),找到有用的知識(shí)的過(guò)程。
數(shù)據(jù)挖掘的價(jià)值:1. 相關(guān)性,2. 趨勢(shì),3. 特征分析
數(shù)據(jù)挖掘算法:
