Big Data 之 Spark

什么是Spark

官方網(wǎng)站給出的定義是:
Apache Spark? is a unified analytics engine for large-scale data processing (是一個(gè)用于大規(guī)模數(shù)據(jù)處理提供的統(tǒng)一的數(shù)據(jù)分析引擎)

Spark的歷史

1.2009年侦另,Spark誕生于美國加州大學(xué)伯克利分校 (UC Berkeley) 的AMP (Algorithms, Machines and People) 實(shí)驗(yàn)室秩命,項(xiàng)目采用Scala語言編寫
2.2010年尉共,Spark 正式對外開源
3.2013年褒傅,Spark加入Apache孵化項(xiàng)目
4.如今弃锐,成為Apache的最重要的三大分布式計(jì)算系統(tǒng)開源項(xiàng)目之一(Hadoop、Spark殿托、Storm)
5.當(dāng)前版本已經(jīng)更新到3.0.0 (截止Jun 18, 2020)

Spark的主要特點(diǎn)

運(yùn)行快速 (Speed): Spark使用先進(jìn)的DAG (Directed Acyclic Graph, 有向無環(huán)圖)執(zhí)行引擎霹菊,以支持循環(huán)數(shù)據(jù)流與內(nèi)存計(jì)算,基于內(nèi)存的執(zhí)行速度可比Hadoop MapReduce快上百倍支竹,基于磁盤的執(zhí)行速度也能快十倍旋廷;


Logistic regression in Hadoop and Spark

易用性 (Ease of Use): Spark支持使用Scala、Java礼搁、Python和R語言進(jìn)行編程饶碘,簡潔的API設(shè)計(jì)有助于用戶輕松構(gòu)建并行程序,并且可以通過Spark Shell進(jìn)行交互式編程馒吴;


Spark's Python DataFrame API Read JSON files with automatic schema inference

通用性 (Generality): Spark提供了完整而強(qiáng)大的技術(shù)棧扎运,包括SQL查詢、流式計(jì)算饮戳、機(jī)器學(xué)習(xí)和圖算法組件豪治,這些組件可以無縫整合在同一個(gè)應(yīng)用中,足以應(yīng)對復(fù)雜的計(jì)算扯罐;



運(yùn)行模式多樣(Runs Everywhere):Spark可運(yùn)行于獨(dú)立的集群模式中负拟,或者運(yùn)行于Hadoop中,也可運(yùn)行于Amazon EC2等云環(huán)境中歹河,并且可以訪問HDFS掩浙、Cassandra、HBase秸歧、Hive等多種數(shù)據(jù)源


Spark生態(tài)圈

spark的數(shù)據(jù)源支持hdfs厨姚、hbase, 還包括s3、cassdra寥茫、mongoDB遣蚀、mysql等

Spark的一些基本概念

  • RDD:是彈性分布式數(shù)據(jù)集(Resilient Distributed Dataset)的簡稱,是分布式內(nèi)存的一個(gè)抽象概念纱耻,提供了一種高度受限的共享內(nèi)存模型芭梯;
  • DAG:是Directed Acyclic Graph(有向無環(huán)圖)的簡稱,反映RDD之間的依賴關(guān)系弄喘;
  • Executor:是運(yùn)行在工作節(jié)點(diǎn)(Worker Node)上的一個(gè)進(jìn)程玖喘,負(fù)責(zé)運(yùn)行任務(wù),并為應(yīng)用程序存儲數(shù)據(jù)蘑志;
  • 應(yīng)用:用戶編寫的Spark應(yīng)用程序累奈;
  • 任務(wù):運(yùn)行在Executor上的工作單元贬派;
  • 作業(yè):一個(gè)作業(yè)包含多個(gè)RDD及作用于相應(yīng)RDD上的各種操作;
  • 階段:是作業(yè)的基本調(diào)度單位澎媒,一個(gè)作業(yè)會(huì)分為多組任務(wù)搞乏,每組任務(wù)被稱為“階段”,或者也被稱為“任務(wù)集”戒努。

架構(gòu)設(shè)計(jì)

如下圖所示请敦,Spark運(yùn)行架構(gòu)包括集群資源管理器(Cluster Manager)、運(yùn)行作業(yè)任務(wù)的工作節(jié)點(diǎn)(Worker Node)储玫、每個(gè)應(yīng)用的任務(wù)控制節(jié)點(diǎn)(Driver)和每個(gè)工作節(jié)點(diǎn)上負(fù)責(zé)具體任務(wù)的執(zhí)行進(jìn)程(Executor)擎颖。其中秧饮,集群資源管理器可以是Spark自帶的資源管理器,也可以是YARN或Mesos等資源管理框架。

與Hadoop MapReduce計(jì)算框架相比索烹,Spark所采用的Executor有兩個(gè)優(yōu)點(diǎn):一是利用多線程來執(zhí)行具體的任務(wù)(Hadoop MapReduce采用的是進(jìn)程模型)邓夕,減少任務(wù)的啟動(dòng)開銷括饶;二是Executor中有一個(gè)BlockManager存儲模塊冯乘,會(huì)將內(nèi)存和磁盤共同作為存儲設(shè)備,當(dāng)需要多輪迭代計(jì)算時(shí)齐媒,可以將中間結(jié)果存儲到這個(gè)存儲模塊里蒲每,下次需要時(shí),就可以直接讀該存儲模塊里的數(shù)據(jù)喻括,而不需要讀寫到HDFS等文件系統(tǒng)里邀杏,因而有效減少了IO開銷;或者在交互式查詢場景下唬血,預(yù)先將表緩存到該存儲系統(tǒng)上望蜡,從而可以提高讀寫IO性能

Spark的安裝

1.下載和解壓Spark安裝包
從Spark官網(wǎng)(https://spark.apache.org/downloads.html)下載安裝包,選擇Pre-built for Apache Hadoop 2.7,下載對應(yīng)安裝包spark-3.0.0-bin-hadoop2.7.tgz,并解壓到指定安裝目錄:
tar -zxvf sparl-3.0.0-bin-hadoop2.7.tgz -C /usr/local
然后重命名為spark-local
cp -r spark-3.0.0-bin-hadoop2.7 spark-local

2.設(shè)置Spark的環(huán)境變量以啟動(dòng)PySpark,將以下內(nèi)容添加到~/.bashrc, 然后source .bashrc

export SPARK_HOME = /usr/local/spark-local
export PATH = $PATH:/usr/local/spark-local/bin
export PYTHONPATH = $SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.9-src.zip:$PYTHONPATH
export PATH = $SPARK_HOME/python:$PATH

3.啟動(dòng)PySpark shell,就可以在shell上面進(jìn)行一些交互式的測試
./bin/pyspark

Python 3.7.0 (default, July 19 2020, 06:48:10)
[GCC 5.4.0 20200719] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 3.0.0
      /_/
Using Python version 3.7.0 (default, July 19 2020 06:48:10)
SparkSession available as 'spark'.
<<<

4.PySpark命令及其常用參數(shù)
./bin/pyspark --master <master-url>
Spark的運(yùn)行模式取決于傳遞給SparkContext的Master URL的值拷恨。Master URL可以是以下任一種式:
* local 使用一個(gè)Worker線程本地化運(yùn)行SPARK(完全不并行)
* local[*] 使用邏輯CPU個(gè)數(shù)數(shù)量的線程來本地化運(yùn)行Spark
* local[K] 使用K個(gè)Worker線程本地化運(yùn)行Spark(理想情況下脖律,K應(yīng)該根據(jù)運(yùn)行機(jī)器的CPU核數(shù)設(shè)定)
* spark://HOST:PORT 連接到指定的Spark standalone master。默認(rèn)端口是7077.
* yarn-client 以客戶端模式連接YARN集群腕侄。集群的位置可以在HADOOP_CONF_DIR 環(huán)境變量中找 到小泉。
* yarn-cluster 以集群模式連接YARN集群。集群的位置可以在HADOOP_CONF_DIR 環(huán)境變量中找到冕杠。
* mesos://HOST:PORT 連接到指定的Mesos集群微姊。默認(rèn)接口是5050。
需要強(qiáng)調(diào)的是分预,這里我們采用“本地模式”(local)運(yùn)行Spark,系統(tǒng)默認(rèn)是“bin/pyspark-master local[*]”,也就是使用本地所有CPU

Spark獨(dú)立應(yīng)用編程

接著我們通過一個(gè)簡單的應(yīng)用程序來演示如何通過 Spark API 編寫一個(gè)獨(dú)立應(yīng)用程序兢交。使用 Python進(jìn)行spark編程比Java和Scala簡單得多。

在進(jìn)行Python編程前笼痹,請先確定是否已經(jīng).bashrc中添加PYTHONPATH環(huán)境變量配喳。
接下來即可進(jìn)行Python編程.

新建一個(gè)test.py文件,并在test.py添加代碼

from pyspark import SparkContext
sc = SparkContext( 'local', 'test')
logFile = "file:///usr/local/spark/README.md"
logData = sc.textFile(logFile, 2).cache()
numAs = logData.filter(lambda line: 'a' in line).count()
numBs = logData.filter(lambda line: 'b' in line).count()
print('Lines with a: %s, Lines with b: %s' % (numAs, numBs))
$ python3 test.py
>>> Lines with a: 61, Lines with b: 30
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酪穿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子晴裹,更是在濱河造成了極大的恐慌被济,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件息拜,死亡現(xiàn)場離奇詭異溉潭,居然都是意外死亡净响,警方通過查閱死者的電腦和手機(jī)少欺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馋贤,“玉大人赞别,你說我怎么就攤上這事∨渑遥” “怎么了仿滔?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長犹芹。 經(jīng)常有香客問我崎页,道長,這世上最難降的妖魔是什么腰埂? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任飒焦,我火速辦了婚禮,結(jié)果婚禮上屿笼,老公的妹妹穿的比我還像新娘牺荠。我一直安慰自己,他們只是感情好驴一,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布休雌。 她就那樣靜靜地躺著,像睡著了一般肝断。 火紅的嫁衣襯著肌膚如雪杈曲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天胸懈,我揣著相機(jī)與錄音担扑,去河邊找鬼。 笑死箫荡,一個(gè)胖子當(dāng)著我的面吹牛魁亦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播羔挡,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼洁奈,長吁一口氣:“原來是場噩夢啊……” “哼间唉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起利术,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤呈野,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后印叁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體被冒,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年轮蜕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昨悼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡跃洛,死狀恐怖率触,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汇竭,我是刑警寧澤葱蝗,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站细燎,受9級特大地震影響两曼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜玻驻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一悼凑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧击狮,春花似錦佛析、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至档冬,卻和暖如春膘茎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酷誓。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工披坏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盐数。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓棒拂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子帚屉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容