日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Spark入门实战系列--2.Spark编译与部署(下)--Spark编译安装

發(fā)布時(shí)間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spark入门实战系列--2.Spark编译与部署(下)--Spark编译安装 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【注】該系列文章以及使用到安裝包/測試數(shù)據(jù) 可以在《傾情大奉送--Spark入門實(shí)戰(zhàn)系列》獲取

1、編譯Spark

Spark可以通過SBT和Maven兩種方式進(jìn)行編譯,再通過make-distribution.sh腳本生成部署包。SBT編譯需要安裝git工具,而Maven安裝則需要maven工具,兩種方式均需要在聯(lián)網(wǎng)下進(jìn)行,通過比較發(fā)現(xiàn)SBT編譯速度較慢(原因有可能是1、時(shí)間不一樣,SBT是白天編譯,Maven是深夜進(jìn)行的,獲取依賴包速度不同?2、maven下載大文件是多線程進(jìn)行,而SBT是單進(jìn)程),Maven編譯成功前后花了3、4個(gè)小時(shí)。

1.1?編譯Spark(SBT)

1.1.1?安裝git并編譯安裝

1.??從如下地址下載git安裝包

http://www.onlinedown.net/softdown/169333_2.htm

https://www.kernel.org/pub/software/scm/git/

如果linux是CentOS操作系統(tǒng)可以通過:yum install git直接進(jìn)行安裝

?

由于從https獲取內(nèi)容,需要安裝curl-devel,可以從如下地址獲取

http://rpmfind.net/linux/rpm2html/search.php?query=curl-devel

如果linux是CentOS操作系統(tǒng)可以通過:yum install curl-devel直接進(jìn)行安裝

?

2.?上傳git并解壓縮

把git-1.7.6.tar.gz安裝包上傳到/home/hadoop/upload目錄中,解壓縮然后放到/app目錄下

$cd /home/hadoop/upload/

$tar -xzf git-1.7.6.tar.gz

$mv git-1.7.6 /app

$ll /app

?

3.?編譯安裝git

以root用戶進(jìn)行在git所在路徑編譯安裝git

#yum install curl-devel

#cd /app/git-1.7.6?

#./configure

#make

#make install

?

?

?

?

4.?把git加入到PATH路徑中

打開/etc/profile把git所在路徑加入到PATH參數(shù)中

export GIT_HOME=/app/git-1.7.6

export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:$GIT_HOME/bin

?

重新登錄或者使用source /etc/profile使參數(shù)生效,然后使用git命令查看配置是否正確

?

1.1.2?下載Spark源代碼并上傳

1.?可以從如下地址下載到spark源代碼:

http://spark.apache.org/downloads.html

http://d3kbcqa49mib13.cloudfront.net/spark-1.1.0.tgz

git clone https://github.com/apache/spark.git

把下載好的spark-1.1.0.tgz源代碼包使用1.1.3.1介紹的工具上傳到/home/hadoop/upload?目錄下

?

2.?在主節(jié)點(diǎn)上解壓縮

$cd /home/hadoop/upload/

$tar -xzf spark-1.1.0.tgz

?

3.?把spark-1.1.0改名并移動(dòng)到/app/complied目錄下

$mv spark-1.1.0 /app/complied/spark-1.1.0-sbt

$ls /app/complied

?

1.1.3?編譯代碼

編譯spark源代碼的時(shí)候,需要從網(wǎng)上下載依賴包,所以整個(gè)編譯過程機(jī)器必須保證在聯(lián)網(wǎng)狀態(tài)。編譯執(zhí)行如下腳本:

$cd /app/complied/spark-1.1.0-sbt

$sbt/sbt assembly -Pyarn -Phadoop-2.2 -Pspark-ganglia-lgpl -Pkinesis-asl -Phive

?

?

?

整個(gè)編譯過程編譯了約十幾個(gè)任務(wù),重新編譯N次,需要幾個(gè)甚至十幾個(gè)小時(shí)才能編譯完成(主要看下載依賴包的速度)。

1.2?編譯Spark(Maven)

1.2.1?安裝Maven并配置參數(shù)

在編譯前最好安裝3.0以上版本的Maven,在/etc/profile配置文件中加入如下設(shè)置:

export MAVEN_HOME=/app/apache-maven-3.0.5

export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:$GIT_HOME/bin

?

1.2.2?下載Spark源代碼并上傳

1.?可以從如下地址下載到spark源代碼:

http://spark.apache.org/downloads.html

http://d3kbcqa49mib13.cloudfront.net/spark-1.1.0.tgz

git clone https://github.com/apache/spark.git

把下載好的spark-1.1.0.tgz源代碼包使用1.1.3.1介紹的工具上傳到/home/hadoop/upload?目錄下

?

2.?在主節(jié)點(diǎn)上解壓縮

$cd /home/hadoop/upload/

$tar -xzf spark-1.1.0.tgz

?

3.?把spark-1.1.0改名并移動(dòng)到/app/complied目錄下

$mv spark-1.1.0 /app/complied/spark-1.1.0-mvn

$ls /app/complied

?

1.2.3?編譯代碼

編譯spark源代碼的時(shí)候,需要從網(wǎng)上下載依賴包,所以整個(gè)編譯過程機(jī)器必須保證在聯(lián)網(wǎng)狀態(tài)。編譯執(zhí)行如下腳本:

$cd /app/complied/spark-1.1.0-mvn

$export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

$mvn -Pyarn -Phadoop-2.2 -Pspark-ganglia-lgpl -Pkinesis-asl -Phive -DskipTests clean package

?

整個(gè)編譯過程編譯了約24個(gè)任務(wù),整個(gè)過程耗時(shí)1小時(shí)45分鐘。

?

1.3?生成Spark部署包

在Spark源碼根目錄下有一個(gè)生成部署包的腳本make-distribution.sh,可以通過執(zhí)行如下命令進(jìn)行打包?./make-distribution.sh [--name] [--tgz] [--with-tachyon] <maven build options>

l??--name NAME和--tgz?結(jié)合可以生成spark-$VERSION-bin-$NAME.tgz?的部署包,不加此參數(shù)時(shí)NAME?為hadoop?的版本號

l??--tgz在根目錄下生成?spark-$VERSION-bin.tgz?,不加此參數(shù)時(shí)不生成tgz?文件,只生成/dist?目錄

l??--with-tachyon??是否支持內(nèi)存文件系統(tǒng)Tachyon?,不加此參數(shù)時(shí)不支持tachyon

?

例子:

1.?生成支持yarn?、hadoop2.2.0?、hive?的部署包:

./make-distribution.sh --tgz --name 2.2.0 -Pyarn -Phadoop-2.2 -Phive

2.?生成支持yarn?、hadoop2.2.0?、hive?、ganglia?的部署包:

./make-distribution.sh --tgz --name 2.2.0 -Pyarn -Phadoop-2.2 -Pspark-ganglia-lgpl -P hive

1.3.1?生成部署包

使用如下命令生成Spark部署包,由于該腳本默認(rèn)在JDK1.6進(jìn)行,在開始時(shí)會進(jìn)行詢問是否繼續(xù),只要選擇Y即可

$cd /app/complied/spark-1.1.0-mvn/

$./make-distribution.sh --tgz --name 2.2.0 -Pyarn -Phadoop-2.2 -Pspark-ganglia-lgpl -P hive

?

?

?

?

生成Spark部署包編譯了約24個(gè)任務(wù),用時(shí)大概1小時(shí)38分鐘。

?

1.3.2?查看生成結(jié)果

生成在部署包位于根目錄下,文件名類似于spark-1.1.0-bin-2.2.0.tgz。

?

2、安裝Spark

2.1?上傳并解壓Spark安裝包

1.我們使用上一步驟編譯好的spark-1.1.0-bin-2.2.0.tgz文件作為安裝包(也可以從網(wǎng)上下載native文件夾或者打包好的64位hadoop安裝包),使用"Spark編譯與部署(上)"中1. 3.1介紹的工具上傳到/home/hadoop/upload?目錄下

?

2.?在主節(jié)點(diǎn)上解壓縮

$cd /home/hadoop/upload/

$tar -xzf spark-1.1.0-bin-2.2.0.tgz

?

3.?把spark改名并移動(dòng)到/app/hadoop目錄下

$mv spark-1.1.0-bin-2.2.0 /app/hadoop/spark-1.1.0

$ll /app/hadoop

?

2.2?配置/etc/profile

1.?打開配置文件/etc/profile

$sudo vi /etc/profile

2.?????定義SPARK_HOME并把spark路徑加入到PATH參數(shù)中

SPARK_HOME=/app/hadoop/spark-1.1.0

PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

2.3?配置conf/slaves

1.?打開配置文件conf/slaves

$cd /app/hadoop/spark-1.1.0/conf

$sudo vi slaves

?

2.?加入slave配置節(jié)點(diǎn)

hadoop1

hadoop2

hadoop3

?

2.4?配置conf/spark-env.sh

1.?打開配置文件conf/spark-env.sh

$cd /app/hadoop/spark-1.1.0/conf

$cp spark-env.sh.template spark-env.sh

$sudo vi spark-env.sh

?

2.?加入Spark環(huán)境配置內(nèi)容,設(shè)置hadoop1為Master節(jié)點(diǎn)

export SPARK_MASTER_IP=hadoop1

export SPARK_MASTER_PORT=7077

export SPARK_WORKER_CORES=1

export SPARK_WORKER_INSTANCES=1

export SPARK_WORKER_MEMORY=512M

?

2.5?向各節(jié)點(diǎn)分發(fā)Spark程序

1.?進(jìn)入hadoop1機(jī)器/app/hadoop目錄,使用如下命令把spark文件夾復(fù)制到hadoop2和hadoop3機(jī)器

$cd /app/hadoop

$scp -r spark-1.1.0 hadoop@hadoop2:/app/hadoop/

$scp -r spark-1.1.0 hadoop@hadoop3:/app/hadoop/

?

?

2.?在從節(jié)點(diǎn)查看是否復(fù)制成功

?

2.6?啟動(dòng)Spark

$cd /app/hadoop/spark-1.1.0/sbin

$./start-all.sh

?

2.7?驗(yàn)證啟動(dòng)

此時(shí)在hadoop1上面運(yùn)行的進(jìn)程有:Worker和Master

?

此時(shí)在hadoop2和hadoop3上面運(yùn)行的進(jìn)程有只有Worker

?

通過?netstat -nlt?命令查看hadoop1節(jié)點(diǎn)網(wǎng)絡(luò)情況

?

在瀏覽器中輸入?http://hadoop1:8080(需要注意的是要在網(wǎng)絡(luò)設(shè)置中把hadoop*除外,否則會到外網(wǎng)DNS解析,出現(xiàn)無法訪問的情況) 既可以進(jìn)入Spark集群狀態(tài)頁面

?

2.8?驗(yàn)證客戶端連接

進(jìn)入hadoop1節(jié)點(diǎn),進(jìn)入spark的bin目錄,使用spark-shell連接集群

$cd /app/hadoop/spark-1.1.0/bin

$spark-shell --master spark://hadoop1:7077 --executor-memory 500m

?

在命令中只指定了內(nèi)存大小并沒有指定核數(shù),所以該客戶端將占用該集群所有核并在每個(gè)節(jié)點(diǎn)分配500M內(nèi)存

?

?

3、Spark測試

3.1?使用Spark-shell測試

這里我們測試一下在Hadoop中大家都知道的WordCout程序,在MapReduce實(shí)現(xiàn)WordCout需要Map、Reduce和Job三個(gè)部分,而在Spark中甚至一行就能夠搞定。下面就看一下是如何實(shí)現(xiàn)的:

3.1.1?啟動(dòng)HDFS

$cd /app/hadoop/hadoop-2.2.0/sbin

$./start-dfs.sh

?

通過jps觀察啟動(dòng)情況,在hadoop1上面運(yùn)行的進(jìn)程有:NameNode、SecondaryNameNode和DataNode

?

hadoop2和hadoop3上面運(yùn)行的進(jìn)程有:NameNode和DataNode

?

3.1.2?上傳數(shù)據(jù)到HDFS中

把hadoop配置文件core-site.xml文件作為測試文件上傳到HDFS中

$hadoop fs -mkdir -p /user/hadoop/testdata

$hadoop fs -put /app/hadoop/hadoop-2.2.0/etc/hadoop/core-site.xml /user/hadoop/testdata

?

3.1.3?啟動(dòng)Spark

$cd /app/hadoop/spark-1.1.0/sbin

$./start-all.sh

?

3.1.4?啟動(dòng)Spark-shell

在spark客戶端(這里在hadoop1節(jié)點(diǎn)),使用spark-shell連接集群

$cd /app/hadoop/spark-1.1.0/bin

$./spark-shell --master spark://hadoop1:7077 --executor-memory 512m --driver-memory 500m

?

3.1.5?運(yùn)行WordCount腳本

下面就是WordCount的執(zhí)行腳本,該腳本是scala編寫,以下為一行實(shí)現(xiàn):

scala>sc.textFile("hdfs://hadoop1:9000/user/hadoop/testdata/core-site.xml").flatMap(_.split(" ")).map(x=>(x,1)).reduceByKey(_+_).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1)).take(10)

為了更好看到實(shí)現(xiàn)過程,下面將逐行進(jìn)行實(shí)現(xiàn):

scala>val rdd=sc.textFile("hdfs://hadoop1:9000/user/hadoop/testdata/core-site.xml")

scala>rdd.cache()

scala>val wordcount=rdd.flatMap(_.split(" ")).map(x=>(x,1)).reduceByKey(_+_)

scala>wordcount.take(10)

scala>val wordsort=wordcount.map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1))

scala>wordsort.take(10)

?

?

?

?

詞頻統(tǒng)計(jì)結(jié)果如下:

Array[(String, Int)] = Array(("",100), (the,7), (</property>,6), (<property>,6), (under,3), (in,3), (License,3), (this,2), (-->,2), (file.,2))

3.1.6?觀察運(yùn)行情況

通過http://hadoop1:8080查看Spark運(yùn)行情況,可以看到Spark為3個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)各為1個(gè)內(nèi)核/512M內(nèi)存,客戶端分配3個(gè)核,每個(gè)核有512M內(nèi)存。

?

通過點(diǎn)擊客戶端運(yùn)行任務(wù)ID,可以看到該任務(wù)在hadoop2和hadoop3節(jié)點(diǎn)上運(yùn)行,在hadoop1上并沒有運(yùn)行,主要是由于hadoop1為NameNode和Spark客戶端造成內(nèi)存占用過大造成

?

3.2?使用Spark-submit測試

從Spark1.0.0開始,Spark提供了一個(gè)易用的應(yīng)用程序部署工具bin/spark-submit,可以完成Spark應(yīng)用程序在local、Standalone、YARN、Mesos上的快捷部署。該工具語法及參數(shù)說明如下:

Usage: spark-submit [options] <app jar | python file> [app options]

Options:

??--master MASTER_URL??????????spark://host:port, mesos://host:port, yarn, or local.

??--deploy-mode DEPLOY_MODE??driver運(yùn)行之處,client運(yùn)行在本機(jī),cluster運(yùn)行在集群

??--class CLASS_NAME????????????應(yīng)用程序包的要運(yùn)行的class

??--name NAME??????????????????應(yīng)用程序名稱

??--jars JARS?????????????????????用逗號隔開的driver本地jar包列表以及executor類路徑

??--py-files PY_FILES??????????????用逗號隔開的放置在Python應(yīng)用程序

PYTHONPATH上的.zip, .egg, .py文件列表

??--files FILES????????????????????用逗號隔開的要放置在每個(gè)executor工作目錄的文件列表

??--properties-file FILE???????????設(shè)置應(yīng)用程序?qū)傩缘奈募胖梦恢?#xff0c;默認(rèn)是conf/spark-defaults.conf

??--driver-memory MEM?????????driver內(nèi)存大小,默認(rèn)512M

??--driver-java-options???????????driver的java選項(xiàng)

??--driver-library-path????????????driver的庫路徑Extra library path entries to pass to the driver

??--driver-class-path?????????????driver的類路徑,用--jars?添加的jar包會自動(dòng)包含在類路徑里

??--executor-memory MEM???????executor內(nèi)存大小,默認(rèn)1G

?

?Spark standalone with cluster deploy mode only:

??--driver-cores NUM???????????driver使用內(nèi)核數(shù),默認(rèn)為1

??--supervise???????????????????如果設(shè)置了該參數(shù),driver失敗是會重啟

?

?Spark standalone and Mesos only:

??--total-executor-cores NUM????executor使用的總核數(shù)

?

?YARN-only:

??--executor-cores NUM?????????每個(gè)executor使用的內(nèi)核數(shù),默認(rèn)為1

??--queue QUEUE_NAME????????提交應(yīng)用程序給哪個(gè)YARN的隊(duì)列,默認(rèn)是default隊(duì)列

??--num-executors NUM????????啟動(dòng)的executor數(shù)量,默認(rèn)是2個(gè)

??--archives ARCHIVES??????????被每個(gè)executor提取到工作目錄的檔案列表,用逗號隔開

3.2.1?運(yùn)行腳本1

該腳本為Spark自帶例子,在該例子中個(gè)計(jì)算了圓周率π的值,以下為執(zhí)行腳本:

$cd /app/hadoop/spark-1.1.0/bin

$./spark-submit --master spark://hadoop1:7077 --class org.apache.spark.examples.SparkPi --executor-memory 512m ../lib/spark-examples-1.1.0-hadoop2.2.0.jar 200

參數(shù)說明(詳細(xì)可以參考上面的參數(shù)說明):

l??--master?Master所在地址,可以有Mesos、Spark、YARN和Local四種,在這里為Spark Standalone集群,地址為spark://hadoop1:7077

l??--class應(yīng)用程序調(diào)用的類名,這里為org.apache.spark.examples.SparkPi

l??--executor-memory?每個(gè)executor所分配的內(nèi)存大小,這里為512M

l??執(zhí)行jar包?這里是../lib/spark-examples-1.1.0-hadoop2.2.0.jar

l??分片數(shù)目?這里數(shù)目為200

?

?

3.2.2?觀察運(yùn)行情況

通過觀察Spark集群有3個(gè)Worker節(jié)點(diǎn)和正在運(yùn)行的1個(gè)應(yīng)用程序,每個(gè)Worker節(jié)點(diǎn)為1內(nèi)核/512M內(nèi)存。由于沒有指定應(yīng)用程序所占內(nèi)核數(shù)目,則該應(yīng)用程序占用該集群所有3個(gè)內(nèi)核,并且每個(gè)節(jié)點(diǎn)分配512M內(nèi)存。

?

根據(jù)每個(gè)節(jié)點(diǎn)負(fù)載情況,每個(gè)節(jié)點(diǎn)運(yùn)行executor并不相同,其中hadoop1的executor數(shù)目為0。而hadoop3執(zhí)行executor數(shù)為10個(gè),其中5個(gè)EXITED狀態(tài),5個(gè)KILLED狀態(tài)。

?

3.2.3?運(yùn)行腳本2

該腳本為Spark自帶例子,在該例子中個(gè)計(jì)算了圓周率π的值,區(qū)別腳本1這里指定了每個(gè)executor內(nèi)核數(shù)據(jù),以下為執(zhí)行腳本:

$cd /app/hadoop/spark-1.1.0/bin

$./spark-submit --master spark://hadoop1:7077 --class org.apache.spark.examples.SparkPi --executor-memory 512m --total-executor-cores 2 ../lib/spark-examples-1.1.0-hadoop2.2.0.jar 200

參數(shù)說明(詳細(xì)可以參考上面的參數(shù)說明):

l??--master?Master所在地址,可以有Mesos、Spark、YARN和Local四種,在這里為Spark Standalone集群,地址為spark://hadoop1:7077

l??--class應(yīng)用程序調(diào)用的類名,這里為org.apache.spark.examples.SparkPi

l??--executor-memory?每個(gè)executor所分配的內(nèi)存大小,這里為512M

l??--total-executor-cores 2?每個(gè)executor分配的內(nèi)核數(shù)

l??執(zhí)行jar包?這里是../lib/spark-examples-1.1.0-hadoop2.2.0.jar

l??分片數(shù)目?這里數(shù)目為200

?

3.2.4?觀察運(yùn)行情況

通過觀察Spark集群有3個(gè)Worker節(jié)點(diǎn)和正在運(yùn)行的1個(gè)應(yīng)用程序,每個(gè)Worker節(jié)點(diǎn)為1內(nèi)核/512M內(nèi)存。由于指定應(yīng)用程序所占內(nèi)核數(shù)目為2,則該應(yīng)用程序使用該集群所有2個(gè)內(nèi)核。

?

?

作者:石山園??出處:http://www.cnblogs.com/shishanyuan/ 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Spark入门实战系列--2.Spark编译与部署(下)--Spark编译安装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。