spark入門

      網(wǎng)友投稿 801 2025-03-31

      1.?Spark概述


      1.1.?什么是Spark(官網(wǎng):

      http://spark.apache.org

      Spark是一種快速、通用、可擴展的大數(shù)據(jù)分析引擎,2009年誕生于加州大學伯克利分校AMPLab,2010年開源,2013年6月成為Apache孵化項目,2014年2月成為Apache頂級項目。目前,Spark生態(tài)系統(tǒng)已經(jīng)發(fā)展成為一個包含多個子項目的集合,其中包含SparkSQL、Spark?Streaming、GraphX、MLlib等子項目,Spark是基于內(nèi)存計算的大數(shù)據(jù)并行計算框架。Spark基于內(nèi)存計算,提高了在大數(shù)據(jù)環(huán)境下數(shù)據(jù)處理的實時性,同時保證了高容錯性和高可伸縮性,允許用戶將Spark部署在大量廉價硬件之上,形成集群。

      1.2.?為什么要學Spark

      中間結(jié)果輸出:基于MapReduce的計算引擎通常會將中間結(jié)果輸出到磁盤上,進行存儲和容錯。出于任務(wù)管道承接的,考慮,當一些查詢翻譯到MapReduce任務(wù)時,往往會產(chǎn)生多個Stage,而這些串聯(lián)的Stage又依賴于底層文件系統(tǒng)(如HDFS)來存儲每一個Stage的輸出結(jié)果

      Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生態(tài)系統(tǒng),以彌補MapReduce的不足。

      1.3.?Spark特點

      1.3.1.?快

      與Hadoop的MapReduce相比,Spark基于內(nèi)存的運算要快100倍以上,基于硬盤的運算也要快10倍以上。Spark實現(xiàn)了高效的DAG執(zhí)行引擎,可以通過基于內(nèi)存來高效處理數(shù)據(jù)流。

      1.3.2.?易用

      Spark支持Java、Python和Scala的API,還支持超過80種高級算法,使用戶可以快速構(gòu)建不同的應(yīng)用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在這些shell中使用Spark集群來驗證解決問題的方法。

      1.3.3.?通用

      Spark提供了統(tǒng)一的解決方案。Spark可以用于批處理、交互式查詢(Spark?SQL)、實時流處理(Spark?Streaming)、機器學習(Spark?MLlib)和圖計算(GraphX)。這些不同類型的處理都可以在同一個應(yīng)用中無縫使用。Spark統(tǒng)一的解決方案非常具有吸引力,畢竟任何公司都想用統(tǒng)一的平臺去處理遇到的問題,減少開發(fā)和維護的人力成本和部署平臺的物力成本。

      1.3.4.?兼容性

      Spark可以非常方便地與其他的開源產(chǎn)品進行融合。比如,Spark可以使用Hadoop的YARN和Apache?Mesos作為它的資源管理和調(diào)度器,器,并且可以處理所有Hadoop支持的數(shù)據(jù),包括HDFS、HBase和Cassandra等。這對于已經(jīng)部署Hadoop集群的用戶特別重要,因為不需要做任何數(shù)據(jù)遷移就可以使用Spark的強大處理能力。Spark也可以不依賴于第三方的資源管理和調(diào)度器,它實現(xiàn)了Standalone作為其內(nèi)置的資源管理和調(diào)度框架,這樣進一步降低了Spark的使用門檻,使得所有人都可以非常容易地部署和使用Spark。此外,Spark還提供了在EC2上部署Standalone的Spark集群的工具。

      2.?Spark集群安裝

      2.1.?安裝

      2.1.1.?機器部署

      準備兩臺以上Linux服務(wù)器,安裝好JDK

      2.1.2.?下載Spark安裝包

      上傳spark-安裝包到Linux上

      解壓安裝包到指定位置

      tar -zxvf spark-2.1.0-bin-hadoop2.6.tgz -C /usr/local

      2.1.3.?配置Spark

      進入到Spark安裝目錄

      cd /usr/local/spark-2.1.0-bin-hadoop2.6

      進入conf目錄并重命名并修改spark-env.sh.template文件

      cd conf/

      mv spark-env.sh.template spark-env.sh

      vi spark-env.sh

      在該配置文件中添加如下配置

      export JAVA_HOME=/usr/java/jdk1.8.0_111

      #export SPARK_MASTER_IP=node1.edu360.cn

      #export SPARK_MASTER_PORT=7077

      保存退出

      重命名并修改slaves.template文件

      mv slaves.template slaves

      vi slaves

      在該文件中添加子節(jié)點所在的位置(Worker節(jié)點)

      node2.edu360.cn

      node3.edu360.cn

      node4.edu360.cn

      保存退出

      將配置好的Spark拷貝到其他節(jié)點上

      scp -r spark-2.1.0-bin-hadoop2.6/ node2.edu360.cn:/usr/local/

      scp -r spark-2.1.0-bin-hadoop2.6/ node3.edu360.cn:/usr/local/

      scp -r spark-2.1.0-bin-hadoop2.6/ node4.edu360.cn:/usr/local/

      Spark集群配置完畢,目前是1個Master,3個Work,在node1.edu360.cn上啟動Spark集群

      /usr/local/spark-2.1.0-bin-hadoop2.6/sbin/start-all.sh

      啟動后執(zhí)行jps命令,主節(jié)點上有Master進程,其他子節(jié)點上有Work進行,登錄Spark管理界面查看集群狀態(tài)(主節(jié)點):http://node1.edu360.cn:8080/

      到此為止,Spark集群安裝完畢,但是有一個很大的問題,那就是Master節(jié)點存在單點故障,要解決此問題,就要借助zookeeper,并且啟動至少兩個Master節(jié)點來實現(xiàn)高可靠,配置方式比較簡單:

      Spark集群規(guī)劃:node1,node2是Master;node3,node4,node5是Worker

      安裝配置zk集群,并啟動zk集群

      停止spark所有服務(wù),修改配置文件spark-env.sh,在該配置文件中刪掉SPARK_MASTER_IP并添加如下配置

      export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=zk1,zk2,zk3 -Dspark.deploy.zookeeper.dir=/spark"

      1.在node1節(jié)點上修改slaves配置文件內(nèi)容指定worker節(jié)點

      2.在node1上執(zhí)行sbin/start-all.sh腳本,然后在node2上執(zhí)行sbin/start-master.sh啟動第二個Master

      3.?執(zhí)行Spark程序

      3.1.?執(zhí)行第一個spark程序

      /usr/local/spark-2.1.0-bin-hadoop2.6/bin/spark-submit \

      --class org.apache.spark.examples.SparkPi \

      --master spark://node1.edu360.cn:7077 \

      --executor-memory 1G \

      --total-executor-cores 2 \

      /usr/local/spark-2.1.0-bin-hadoop2.6/lib/spark-examples-2.1.0-hadoop2.6.0.jar \

      100

      該算法是利用蒙特·卡羅算法求PI

      3.2.?啟動Spark Shell

      spark-shell是Spark自帶的交互式Shell程序,方便用戶進行交互式編程,用戶可以在該命令行下用scala編寫spark程序。

      3.2.1.?啟動spark shell

      /usr/local/spark-2.1.0-bin-hadoop2.6/bin/spark-shell \

      --master spark://node1.edu360.cn:7077 \

      --executor-memory 2g \

      --total-executor-cores 2

      參數(shù)說明:

      --master spark://node1.edu360.cn:7077 指定Master的地址

      --executor-memory 2g 指定每個worker可用內(nèi)存為2G

      --total-executor-cores 2 指定整個集群使用的cup核數(shù)為2個

      注意:

      如果啟動spark shell時沒有指定master地址,但是也可以正常啟動spark shell和執(zhí)行spark shell中的程序,其實是啟動了spark的local模式,該模式僅在本機啟動一個進程,沒有與集群建立聯(lián)系。

      Spark Shell中已經(jīng)默認將SparkContext類初始化為對象sc。用戶代碼如果需要用到,則直接應(yīng)用sc即可

      3.2.2.?在spark shell中編寫WordCount程序

      首先啟動hdfs

      向hdfs上傳一個文件到hdfs://node1.edu360.cn:9000/words.txt

      在spark shell中用scala語言編寫spark程序

      sc.textFile("hdfs://node1.edu360.cn:9000/words.txt").flatMap(_.split(" "))

      .map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://node1.edu360.cn:9000/out")

      使用hdfs命令查看結(jié)果

      hdfs dfs -ls hdfs://node1.edu360.cn:9000/out/p*

      說明:

      sc是SparkContext對象,該對象時提交spark程序的入口

      textFile(hdfs://node1.edu360.cn:9000/words.txt)是hdfs中讀取數(shù)據(jù)

      flatMap(_.split(" "))先map在壓平

      map((_,1))將單詞和1構(gòu)成元組

      reduceByKey(_+_)按照key進行reduce,并將value累加

      saveAsTextFile("hdfs://node1.edu360.cn:9000/out")將結(jié)果寫入到hdfs中

      3.3.?在IDEA中編寫WordCount程序

      spark shell僅在測試和驗證我們的程序時使用的較多,在生產(chǎn)環(huán)境中,通常會在IDE中編制程序,然后打成jar包,然后提交到集群,最常用的是創(chuàng)建一個Maven項目,利用Maven來管理jar包的依賴。

      1.創(chuàng)建一個項目

      2.選擇Maven項目,然后點擊next

      3.填寫maven的GAV,然后點擊next

      spark入門

      填寫項目名稱,然后點擊finish

      5.創(chuàng)建好maven項目后,點擊Enable Auto-Import

      配置Maven的xml

      新建一個scala class,類型為Object

      編寫spark程序

      使用Maven打包:首先修改xml中的main class

      點擊idea右側(cè)的Maven Project選項

      點擊Lifecycle,選擇clean和package,然后點擊Run Maven Build

      選擇編譯成功的jar包,并將該jar上傳到Spark集群中的某個節(jié)點上

      首先啟動hdfs和Spark集群

      啟動hdfs

      /usr/local/hadoop-2.6.5/sbin/start-dfs.sh

      啟動spark

      /usr/local/spark-2.1.0-bin-hadoop2.6/sbin/start-all.sh

      使用spark-submit命令提交Spark應(yīng)用(注意參數(shù)的順序)

      /usr/local/spark-2.1.0-bin-hadoop2.6/bin/spark-submit \

      --class cn.itcast.spark.WordCount \

      --master spark://node1.edu360.cn:7077 \

      --executor-memory 2G \

      --total-executor-cores 4 \

      /root/spark-mvn-1.0-SNAPSHOT.jar \

      hdfs://node1.edu360.cn:9000/words.txt \

      hdfs://node1.edu360.cn:9000/out

      查看程序執(zhí)行結(jié)果

      hdfs dfs -cat hdfs://node1.edu360.cn:9000/out/part-00000

      附件: Spark入門.docx 252.36KB 下載次數(shù):0次

      Hadoop spark

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:如何在Excel中的數(shù)據(jù)透視表中隱藏空白行?
      下一篇:如何合并和合并行而不丟失Excel中的數(shù)據(jù)
      相關(guān)文章
      含羞草国产亚洲精品岁国产精品| 亚洲av永久无码制服河南实里| 中文字幕亚洲综合久久2| 国产亚洲精品成人AA片新蒲金| 亚洲毛片av日韩av无码| 亚洲电影日韩精品| 亚洲AV无码国产剧情| 亚洲乱人伦中文字幕无码| 九月丁香婷婷亚洲综合色| 亚洲国产区男人本色在线观看| 亚洲人成网站在线观看播放动漫 | 亚洲精品9999久久久久无码| 91在线亚洲综合在线| 亚洲熟妇AV日韩熟妇在线| 亚洲欧美国产日韩av野草社区| 亚洲老熟女五十路老熟女bbw| 亚洲成AV人影片在线观看| 国产精品无码亚洲一区二区三区| 小说专区亚洲春色校园| 亚洲免费日韩无码系列| 亚洲真人无码永久在线| 亚洲αv在线精品糸列| 亚洲精品在线观看视频| 亚洲精品综合久久中文字幕| 亚洲欧洲高清有无| 午夜在线a亚洲v天堂网2019| 亚洲国产成人久久精品软件| 亚洲国产成人久久一区WWW| 久久精品国产亚洲AV不卡| 久久精品国产亚洲一区二区| 亚洲天天在线日亚洲洲精| 亚洲手机中文字幕| 亚洲欧美aⅴ在线资源| 亚洲AV中文无码乱人伦在线视色| 久久精品亚洲乱码伦伦中文| 亚洲AV无码一区东京热久久| 久久精品国产亚洲AV大全| jlzzjlzz亚洲jzjzjz| 亚洲av无码有乱码在线观看| 亚洲精品国产V片在线观看| 亚洲国产成人片在线观看 |