hadoop+spark生态系统操作与指南非影印版_Spark背景知识学习
本文主要總結(jié)Spark及其生態(tài)圈,包括spark概述,產(chǎn)生背景,特點(diǎn),以及與Hadoop的差異等,希望讀者能從概念層面對spark有一個(gè)直觀的認(rèn)識。
Spark概述及特點(diǎn)
Apache Spark? is a unified analytics engine for large-scale data processing.
這是來自Spark官網(wǎng)的描述(http://spark.apache.org/)。我們可以看到Spark是對大規(guī)模數(shù)據(jù)處理的一個(gè)統(tǒng)一分析引擎。有一種說法是:Spark給Hadoop這頭大象插上了翅膀,足以看出Spark處理速度之快。Spark官網(wǎng)中,概括了Spark的幾個(gè)特點(diǎn):
1. Speed:執(zhí)行速度很快,無論是在批處理還是流處理中都很快。官網(wǎng)指出邏輯回歸使用hadoop(指的是MapReduce作業(yè))執(zhí)行需要110秒,使用spark執(zhí)行只需要0.9秒。執(zhí)行快的原因有:①spark使用了一種DAG執(zhí)行引擎,能提供基于內(nèi)存的計(jì)算,相比Hadoop對磁盤讀寫要快很多。②MapReduce中的Map作業(yè)和Reduce都是基于進(jìn)程的,而進(jìn)程的啟動和銷毀都有一定的開銷。spark中作業(yè)是基于線程池的,任務(wù)啟動的開銷要比Hadoop快。
2. Ease of Use:易用性。主要體現(xiàn)在①Spark支持Java,Scala,Python,R,SQL等多種語言,便于我們選擇自己熟悉的語言進(jìn)行應(yīng)用開發(fā)。②Spark提供了80多種高級別的算子,比起MapReduce中僅有的map和reduce操作更廣泛,例如join,groupby等,也方便了我們進(jìn)行應(yīng)用開發(fā)。③Spark還支持交互式的命令行操作。而MapReduce需要寫完之后打包再運(yùn)行,代碼量大,步驟繁瑣。
3. Generality:通用性。Spark之上有不同的子框架用于處理不同的業(yè)務(wù)場景,如下圖所示。這樣降低了環(huán)境搭建成本,運(yùn)維成本和學(xué)習(xí)成本。可以說是一棧式解決多種場景問題。
4. Runs Everywhere:Spark可以有Hadoop(yarn),Mesos,standalone,Kubernetes等多種運(yùn)行模式。它還可以訪問多種數(shù)據(jù)源,例如HDFS,Cassandra,HBase,Hive等,這樣就為在現(xiàn)有的復(fù)雜多樣的生產(chǎn)環(huán)境中使用spark提供了無限可能。
spark的產(chǎn)生背景
1.MapReduce的局限性:
① 代碼繁瑣。拿wordcount舉例,使用MapReduce實(shí)現(xiàn),需要我們自己開發(fā)map函數(shù)和reduce函數(shù),并進(jìn)行打包部署運(yùn)行,代碼量大,步驟繁瑣,一單出錯(cuò)就需要重新提交。
② MapReduce只能夠支持map和reduce方法,對于像Join,group by等的操作的開發(fā)比較繁瑣。
③執(zhí)行效率不夠高,原因主要有:
map階段的結(jié)果寫入磁盤,reduce階段再從磁盤上讀取相應(yīng)的數(shù)據(jù)進(jìn)行有關(guān)計(jì)算,中間有磁盤參與的過程。
每一個(gè)作業(yè)是以進(jìn)程(一個(gè)JVM)的方式,運(yùn)行啟動和銷毀的成本很高。
數(shù)據(jù)交互通過磁盤進(jìn)行,不能充分發(fā)揮集群的作用。
不適合迭代多次(如機(jī)器學(xué)習(xí)和圖計(jì)算的場景),交互式學(xué)習(xí)(如使用命令行操作的場景),流式的處理(MapReduce處理的數(shù)據(jù)是靜態(tài)不能變化的,不能處理流式處理)的場景。
2.框架多樣化
在spark之前,有很多框架用于處理不同的任務(wù)。主要可以分為以下幾種:
① 批處理(或者稱之為離線處理)框架,如MapReduce、Hive、Pig。
② 流式處理(或者稱為實(shí)時(shí)處理)框架,如Storm,JStorm。
③ 交互式計(jì)算計(jì)算,如Impala
如果要進(jìn)行不同場景的業(yè)務(wù)處理,則就需要借助不同的框架。如果以上三種都涉及,就要搭建多個(gè)集群,這樣的成本是很高的:包括對于框架的學(xué)習(xí)成本以及對實(shí)際環(huán)境的運(yùn)維成本。
而spark能夠完成以上所有框架可以做的事情。較好的解決了框架多樣性的問題。能夠完成批處理,流式處理,交互式處理等。spark包含的組件有:Spark SQL處理SQL的場景(離線處理),MLlib用于進(jìn)行機(jī)器學(xué)習(xí),Graphx用作圖計(jì)算,Spark Streaming 用來進(jìn)行流式處理。
spark生態(tài)對比Hadoop生態(tài)
關(guān)于Hadoop 生態(tài)系統(tǒng)的各個(gè)組件我們在前面文章中提到過,可以參考Hadoop基礎(chǔ)知識總結(jié)中關(guān)于Hadoop生態(tài)系統(tǒng)的描述。
我們來看一下spark生態(tài)系統(tǒng)的架構(gòu),可以簡寫為BDAS,其全稱是Berkeley Data Analytics Stack,即伯克利數(shù)據(jù)分析棧,如下圖所示,圖片來源:
https://yq.aliyun.com/articles/371357
從下往上看,各個(gè)組件的作用如下:
Mesos:分布式資源管理和調(diào)度框架,和Yarn類似。
HDFS:分布式文件存儲系統(tǒng)。它是外部的相關(guān)系統(tǒng),嚴(yán)格意義上不屬于BDAS。
tachyan:后來改名為alpha,是一個(gè)分布式內(nèi)存文件系統(tǒng),使得我們的數(shù)據(jù)可以存儲在內(nèi)存中。
spark:即:spark core。基于內(nèi)存優(yōu)化的執(zhí)行引擎,支持多種語言如Java,Python,Scala的編程API。
spark之上有不同的子模塊用來滿足不同的應(yīng)用場景:Spark Streaming 用來做流處理。GraphX用于做圖計(jì)算,MLlib用來做機(jī)器學(xué)習(xí),Spark SQL(前身是Shark)用于支持SQL的查詢。
storm和spark是沒有關(guān)系的(外部系統(tǒng)),它是用來做流處理的框架,但是spark內(nèi)部已經(jīng)有了spark streaming可以用于做流處理,安裝成本和學(xué)習(xí)成本相對都小很多。
BlinkDB:用于在海量數(shù)據(jù)之上運(yùn)行交互式SQL查詢的大規(guī)模并行查詢引擎,通過犧牲數(shù)據(jù)的精度提高查詢的響應(yīng)時(shí)間。
spark與Hadoop的對比
對比1:hadoop生態(tài)系統(tǒng)與Spark BDAS 的對比,如下表所示。
批處理的場景:Hadoop生態(tài)系統(tǒng)中我們只能使用MapReduce,Spark中我們可以使用RDD以及相應(yīng)的編程語言。
SQL查詢的場景:Hadoop中可以使用Hive,Spark中我們可以使用Spark SQL,二者在使用上具有相當(dāng)大的相似性。
流處理的場景:Hadoop生態(tài)系統(tǒng)通常使用kafka+storm,spark中使用的是 spark streaming,它也可以整合kafka使用。
機(jī)器學(xué)習(xí)的場景:Hadoop生態(tài)中使用mahout,但是目前不對MapReduce更新了,spark中則是單獨(dú)的MLlib模塊。
實(shí)時(shí)數(shù)據(jù)查詢:Hadoop生態(tài)系統(tǒng)中使用Hbase等NoSQL數(shù)據(jù)庫,而spark中雖然沒有專門的組件,但是也能夠使用spark core的API處理NoSQL查詢的場景。spark是一個(gè)快速的分布式計(jì)算框架,所以沒有提供存儲的組件,但可以訪問多種數(shù)據(jù)源。
對比2:Hadoop和Spark內(nèi)部構(gòu)成的對比
對比3:MapReduce 與Spark 的對比
如上圖所示:
MapReduce執(zhí)行時(shí),從HDFS讀取數(shù)據(jù),結(jié)果寫入到HDFS,下一個(gè)作業(yè)再從HDFS讀數(shù)據(jù),處理完之后再寫回去。多個(gè)作業(yè)之間的數(shù)據(jù)共享借助于HDFS完成。
Spark則是把磁盤換成了內(nèi)存,第一個(gè)作業(yè)將結(jié)果寫入內(nèi)存而不是磁盤,后面的作業(yè)也直接從內(nèi)存中讀取數(shù)據(jù),這樣可以減少序列化,磁盤,網(wǎng)絡(luò)的開銷。
Spark和Hadoop的協(xié)作性:
Hadoop 的優(yōu)勢:
數(shù)據(jù)規(guī)模方面:Hadoop在存儲空間和計(jì)算能力方面,都可以進(jìn)行擴(kuò)展,支持多數(shù)據(jù)源,多應(yīng)用,多用戶。
企業(yè)級平臺:高可用(reliability),多租戶(Multi-tenancy),安全性(Security)
多種應(yīng)用場景:文件,數(shù)據(jù)庫,半結(jié)構(gòu)化數(shù)據(jù)
Spark的優(yōu)勢:
易于部署:API簡單,支持多種語言
基于內(nèi)存的計(jì)算框架:使用RDD的方式處理數(shù)據(jù),使用DAG的處理模式
綜合多個(gè)工作流和子框架:例如spark SQL,ML,streaming,Graphx等組合使用
因此實(shí)際工作中常常將二者綜合起來,這樣使應(yīng)用程序可以在內(nèi)存中計(jì)算,提高計(jì)算效率。通常二者協(xié)作的框架大致如下圖所示:
大致的邏輯是:
數(shù)據(jù)存儲在HDFS之上,由Yarn進(jìn)行統(tǒng)一的資源管理和作業(yè)調(diào)度。
在yarn之上,可以運(yùn)行各種作業(yè),如批處理的MR,流處理的Storm,S4,內(nèi)存計(jì)算的spark任務(wù)。
我們看到,Hadoop和Spark在生產(chǎn)生是相輔相成的,各自的模塊負(fù)責(zé)各自的功能。
至此我們完成了對Spark的基本知識的學(xué)習(xí),如產(chǎn)生背景,架構(gòu)組成,主要子框架,并進(jìn)行了與Hadoop的對比,主要在一些概念上和邏輯上形成一個(gè)直觀的認(rèn)識,為今后的學(xué)習(xí)奠定一些基礎(chǔ)。歡迎大家留言交流~
(完)
總結(jié)
以上是生活随笔為你收集整理的hadoop+spark生态系统操作与指南非影印版_Spark背景知识学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react 封装表格组件_React--
- 下一篇: ifix从sqlserver里读数据_i