第一章 說明
整個(gè)Spark 框架分為如下7個(gè)部分,總的來說分為Spark 基礎(chǔ)環(huán)境、Spark 離線分析和Spark實(shí)時(shí)分析三個(gè)大的方面,如下圖所示:
第一方面、Spark 基礎(chǔ)環(huán)境
主要講述Spark框架安裝部署及開發(fā)運(yùn)行,如何在本地模式和集群模式運(yùn)行,使用spark-shell及IDEA開發(fā)應(yīng)用程序,測試及打包提交運(yùn)行集群。
第二方面、Spark 離線分析
- Spark 核心基礎(chǔ):SparkCore模塊,主要講解Spark框架核心數(shù)據(jù)結(jié)構(gòu)RDD及重要函數(shù)使
用,如何鏈?zhǔn)骄幊烫幚矸治鰯?shù)據(jù); - Spark 交互式分析:SparkSQL模塊,針對(duì)結(jié)構(gòu)化數(shù)據(jù)處理分析,將數(shù)據(jù)封裝在DataFrame和Dataset,調(diào)用API或者使用SQL分析數(shù)據(jù);
- 離線綜合案例:以DMP廣告點(diǎn)擊業(yè)務(wù)數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行ETL解析和廣告相關(guān)指標(biāo)報(bào)表統(tǒng)計(jì),集成Oozie和Hue調(diào)度執(zhí)行應(yīng)用,以及使用Livy使用Rest方式提交應(yīng)用;
第三方面、Spark 實(shí)時(shí)分析 - Spark 流式分析:SparkStreaming模塊,針對(duì)流式數(shù)據(jù),采用微批處理Batch方式實(shí)時(shí)處理數(shù)據(jù)數(shù)據(jù),可以無狀態(tài)、有狀態(tài)及窗口操作分析;
- Spark 新型流式分析:StructuredStreaming模塊,結(jié)構(gòu)化流式處理框架,可以認(rèn)為是使用SparkSQL編程方式處理流式的數(shù)據(jù),更加靈活方便;
- 實(shí)時(shí)綜合案例:以仿雙十一實(shí)時(shí)訂單大屏為例,模擬實(shí)時(shí)產(chǎn)生訂單數(shù)據(jù)發(fā)送Kafka,實(shí)時(shí)消費(fèi)統(tǒng)計(jì)訂單指標(biāo),保存結(jié)果至內(nèi)存數(shù)據(jù)庫Redis,以供前端大屏展示;將消費(fèi)Kafka數(shù)據(jù)偏移量存儲(chǔ)Zookeeper中,考慮實(shí)時(shí)應(yīng)用的停止升級(jí)及測試環(huán)境的壓力測試和性能優(yōu)化。
第二章 Spark 框架概述
Spark 是加州大學(xué)伯克利分校AMP實(shí)驗(yàn)室(Algorithms Machines and People Lab)開發(fā)的通用大數(shù)據(jù)出來框架。Spark生態(tài)棧也稱為BDAS,是伯克利AMP實(shí)驗(yàn)室所開發(fā)的,力圖在算法(Algorithms)、機(jī)器(Machines)和人(Person)三種之間通過大規(guī)模集成來展現(xiàn)大數(shù)據(jù)應(yīng)用的一個(gè)開源平臺(tái)。AMP實(shí)驗(yàn)室運(yùn)用大數(shù)據(jù)、云計(jì)算等各種資源以及各種靈活的技術(shù)方案,對(duì)海量數(shù)據(jù)進(jìn)行分析并轉(zhuǎn)化為有用的信息,讓人們更好地了解世界。
Spark的發(fā)展歷史,經(jīng)歷過幾大重要階段,如下圖所示:
Spark 是一種快速、通用、可擴(kuò)展的大數(shù)據(jù)分析引擎,2009 年誕生于加州大學(xué)伯克利分校
AMPLab,2010 年開源, 2013年6月成為Apache孵化項(xiàng)目,2014年2月成為 Apache 頂級(jí)項(xiàng)目,用 Scala進(jìn)行編寫項(xiàng)目框架。
2.1 Spark 是什么
定義:Apache Spark是用于大規(guī)模數(shù)據(jù)(large-scala data)處理的統(tǒng)一(unified)分析引擎。
官方網(wǎng)址:http://spark.apache.org/、https://databricks.com/spark/about
官方定義:
Spark 最早源于一篇論文 Resilient Distributed Datasets: A Fault-Tolerant Abstraction for
In-Memory Cluster Computing,該論文是由加州大學(xué)柏克萊分校的 Matei Zaharia 等人發(fā)表的論文中提出了一種彈性分布式數(shù)據(jù)集(即 RDD)的概念,原文開頭對(duì)其的解釋是:
翻譯過來就是:RDD 是一種分布式內(nèi)存抽象,其使得程序員能夠在大規(guī)模集群中做內(nèi)存運(yùn)算,并且有一定的容錯(cuò)方式。而這也是整個(gè) Spark 的核心數(shù)據(jù)結(jié)構(gòu),Spark 整個(gè)平
臺(tái)都圍繞著RDD進(jìn)行。
2.2 Spark 四大特點(diǎn)
Spark 使用Scala語言進(jìn)行實(shí)現(xiàn),它是一種面向?qū)?、函?shù)式編程語言,能夠像操作本地集合一樣輕松的操作分布式數(shù)據(jù)集。Spark具有運(yùn)行速度快、易用性好、通用性強(qiáng)和隨處運(yùn)行等特點(diǎn)。
速度快
由于Apache Spark支持內(nèi)存計(jì)算,并且通過DAG(有向無環(huán)圖)執(zhí)行引擎支持無環(huán)數(shù)據(jù)流,所以官方宣稱其在內(nèi)存中的運(yùn)算速度要比Hadoop的MapReduce快100倍,在硬盤中要快10倍。
Spark處理數(shù)據(jù)與MapReduce處理數(shù)據(jù)相比,有如下兩個(gè)不同點(diǎn):
-
其一、Spark處理數(shù)據(jù)時(shí),可以將中間處理結(jié)果數(shù)據(jù)存儲(chǔ)到內(nèi)存中;
-
其二、Spark Job調(diào)度以DAG方式,并且每個(gè)任務(wù)Task執(zhí)行以線程(Thread)方式,并不是像MapReduce以進(jìn)程(Process)方式執(zhí)行。
2014 年的如此Benchmark測試中,Spark 秒殺Hadoop,在使用十分之一計(jì)算資源的情況下,相同數(shù)據(jù)的排序上,Spark 比Map Reduce快3倍!
易于使用
Spark 的版本已經(jīng)更新到 Spark 2.4.5(截止日期2020.05.01),支持了包括 Java、Scala、
Python 、R和SQL語言在內(nèi)的多種語言。
通用性強(qiáng)
在 Spark 的基礎(chǔ)上,Spark 還提供了包括Spark SQL、Spark Streaming、MLib 及GraphX在
內(nèi)的多個(gè)工具庫,我們可以在一個(gè)應(yīng)用中無縫地使用這些工具庫。其中,Spark SQL 提供了結(jié)構(gòu)化的數(shù)據(jù)處理方式,Spark Streaming 主要針對(duì)流式處理任務(wù)(也是本書的重點(diǎn)),MLlib提供了很多有用的機(jī)器學(xué)習(xí)算法庫,GraphX提供圖形和圖形并行化計(jì)算。
運(yùn)行方式
Spark 支持多種運(yùn)行方式,包括在 Hadoop 和 Mesos 上,也支持 Standalone的獨(dú)立運(yùn)行模
式,同時(shí)也可以運(yùn)行在云Kubernetes(Spark 2.3開始支持)上。
對(duì)于數(shù)據(jù)源而言,Spark 支持從HDFS、HBase、Cassandra 及 Kafka 等多種途徑獲取數(shù)據(jù)。
2.3 Spark 框架模塊
整個(gè)Spark 框架模塊包含:Spark Coke、 Spark SQL、 Spark Streaming、 Spark GraphX、Spark MLlib,而后四項(xiàng)的能力都是建立在核心引擎之上 。
Spark Core
實(shí)現(xiàn)了 Spark 的基本功能,包含RDD、任務(wù)調(diào)度、內(nèi)存管理、錯(cuò)誤恢復(fù)、與存儲(chǔ)系統(tǒng)交互等模塊。數(shù)據(jù)結(jié)構(gòu):RDD
Spark SQL
Spark 用來操作結(jié)構(gòu)化數(shù)據(jù)的程序包。通過 Spark SQL,我們可以使用 SQL操作數(shù)據(jù)。數(shù)據(jù)結(jié)構(gòu):Dataset/DataFrame = RDD + Schema
官網(wǎng):http://spark.apache.org/sql/
Spark Streaming
Spark 提供的對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行流式計(jì)算的組件。提供了用來操作數(shù)據(jù)流的 API。 數(shù)據(jù)結(jié)構(gòu):DStream = Seq[RDD]
官網(wǎng):http://spark.apache.org/streaming/
Spark MLlib
提供常見的機(jī)器學(xué)習(xí)(ML)功能的程序庫。包括分類、回歸、聚類、協(xié)同過濾等,還提供了模型評(píng)估、數(shù)據(jù)導(dǎo)入等額外的支持功能。 數(shù)據(jù)結(jié)構(gòu):RDD或者DataFrame
官網(wǎng):http://spark.apache.org/mllib/
Spark GraphX
Spark中用于圖計(jì)算的API,性能良好,擁有豐富的功能和運(yùn)算符,能在海量數(shù)據(jù)上自如地運(yùn)行復(fù)雜的圖算法。數(shù)據(jù)結(jié)構(gòu):RDD或者DataFrame
官網(wǎng):http://spark.apache.org/graphx/
在Full Stack 理想的指引下,Spark 中的Spark SQL 、SparkStreaming 、MLLib 、GraphX 幾大子框架和庫之間可以無縫地共享數(shù)據(jù)和操作,這不僅打造了Spark 在當(dāng)今大數(shù)據(jù)計(jì)算領(lǐng)域其他計(jì)算框架都無可匹敵的優(yōu)勢(shì),而且使得Spark 正在加速成為大數(shù)據(jù)處理中心首選通用計(jì)算平臺(tái)。
Structured Streaming
Structured Streaming結(jié)構(gòu)化流處理模塊針對(duì),流式結(jié)構(gòu)化數(shù)據(jù)封裝到DataFrame中進(jìn)行分析。
Structured Streaming是建立在SparkSQL引擎之上的可伸縮和高容錯(cuò)的流式處理引擎,可以像操作靜態(tài)數(shù)據(jù)的批量計(jì)算一樣來執(zhí)行流式計(jì)算。當(dāng)流式數(shù)據(jù)不斷的到達(dá)的過程中Spark SQL的引擎會(huì)連續(xù)不斷的執(zhí)行計(jì)算并更新最終結(jié)果。簡而言之,Structured Streaming提供了快速、可伸縮、可容錯(cuò)、端到端精確的流處理。
官網(wǎng):http://spark.apache.org/docs/2.4.5/structured-streaming-programming-guide.html
2.4 Spark 運(yùn)行模式
Spark 框架編寫的應(yīng)用程序可以運(yùn)行在本地模式(Local Mode)、集群模式(Cluster Mode)和云服務(wù)(Cloud),方便開發(fā)測試和生產(chǎn)部署。
第一、本地模式:Local Mode
將Spark 應(yīng)用程序中任務(wù)Task運(yùn)行在一個(gè)本地JVM Process進(jìn)程中,通常開發(fā)測試使用。
第二、集群模式:Cluster Mode
將Spark應(yīng)用程序運(yùn)行在集群上,比如Hadoop YARN集群,Spark 自身集群Standalone及Apache Mesos集群,網(wǎng)址:http://spark.apache.org/docs/2.4.3/文章來源:http://www.zghlxwxcb.cn/news/detail-500883.html
- Hadoop YARN集群模式(生產(chǎn)環(huán)境使用):運(yùn)行在 yarn 集群之上,由 yarn 負(fù)責(zé)資源管理,Spark 負(fù)責(zé)任務(wù)調(diào)度和計(jì)算,好處:計(jì)算資源按需伸縮,集群利用率高,共享底層存儲(chǔ),避免數(shù)據(jù)跨集群遷移。
- Spark Standalone集群模式(開發(fā)測試及生成環(huán)境使用):類似Hadoop YARN架構(gòu),典型的Mater/Slaves模式,使用Zookeeper搭建高可用,避免Master是有單點(diǎn)故障的。
- Apache Mesos集群模式(國內(nèi)使用較少):運(yùn)行在 mesos 資源管理器框架之上,由mesos 負(fù)責(zé)資源管理,Spark 負(fù)責(zé)任務(wù)調(diào)度和計(jì)算
第三、云服務(wù):Kubernetes 模式
中小公司未來會(huì)更多的使用云服務(wù),Spark 2.3開始支持將Spark 開發(fā)應(yīng)用運(yùn)行到K8s上。文章來源地址http://www.zghlxwxcb.cn/news/detail-500883.html
到了這里,關(guān)于【Spark分布式內(nèi)存計(jì)算框架——Spark 基礎(chǔ)環(huán)境】1. Spark框架概述的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!