spark入門
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
填寫項目名稱,然后點擊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)容。