Apache Spark学习:将Spark部署到Hadoop 2.2.0上
需要注意兩點:(1)使用的Hadoop必須是2.0系列,比如0.23.x,2.0.x,2.x.x或CDH4、CDH5等,將Spark運行在Hadoop上,本質上是將Spark運行在Hadoop YARN上,因為Spark自身只提供了作業管理功能,資源調度要依托于第三方系統,比如YARN或Mesos等 (2)之所以不采用Mesos而是YARN,是因為YARN擁有強大的社區支持,且逐步已經成為資源管理系統中的標準。
注意,目前官方已經發布了0.8.1版本,可以直接從這里選擇合適的版本下載,如果你使用的是hadoop 2.2.0或者CDH5,可以直接從這里下載。
將Spark部署到Hadoop 2.2.0上需要經過以下幾步:
步驟1:準備基礎軟件
步驟2:下載編譯spark 0.8.1或者更高版本
步驟3:運行Spark實例
接下來詳細介紹這幾個步驟。
步驟1:準備基礎軟件
(1) 基本軟件
包括linux操作系統、Hadoop 2.2.0或者更高版本、Maven 3.0.4版本(或者最新3.0.x版本),其中,Hadoop 2.2.0只需采用最簡單的方式安裝即可,具體可參考我的這篇文章:Hadoop YARN安裝部署,Maven安裝方法很簡單,可以在http://maven.apache.org/download.cgi上下載binary版本,解壓后,配置MAVEN_HOME和PATH兩個環境變量,具體可自行在網上查找相關方法,比如這篇“Linux下安裝maven”,但需要注意,版本不是3.0.x版,Spark對版本要求很嚴格。
(2)硬件準備
Spark 2.2.0專門搞出來一個yarn-new支持hadoop 2.2.0,因為hadoop 2.2.0的API發生了不兼容變化,需要使用Maven單獨編譯并打包,而編譯過程非常慢(一般機器,2個小時左右),且占用內存較多,因此,你需要一臺滿足以下條件的機器作為編譯機:
條件1:可以聯網:第一次編譯時,maven需要從網上下載大量的jar包,速度比較慢,如果你網絡不行,建議直接放棄編譯。
條件2:內存2GB以上
步驟2:下載編譯spark 0.8.1或者更高版本
可以用git下載或者直接wget或者spark 0.8.1版本
wget https://github.com/apache/incubator-spark/archive/v0.8.1-incubating.zip
注意,0.8.1之前的版本不支持hadoop 2.2.0,從0.8.1版本開始支持。
下載之后,對其解壓:
unzip v0.8.1-incubating
然后進入解壓目錄,輸入以下命令:
cd incubator-spark-0.8.1-incubating
export MAVEN_OPTS=”-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m”
mvn -Dyarn.version=2.2.0 -Dhadoop.version=2.2.0? -Pnew-yarn -DskipTests package
一般需要等待很長時間,編譯完成后,將spark內核打包成一個獨立的jar包,命令如下:
SPARK_HADOOP_VERSION=2.2.0 SPARK_YARN=true ./sbt/sbt assembly
打包完成后,在assembly/target/scala-2.9.3/目錄下會生成兩個jar包,其中一個是spark-assembly-0.8.1-incubating-hadoop2.2.0.jar,examples/target/scala-2.9.3/下面也有一個jar包:spark-examples-assembly-0.8.1-incubating.jar,接下來將重點使用這兩個包。
如果你想把spark作為一個客戶端,放到hadoop集群上,供用戶使用,需要拷貝以下幾個目錄:
conf/
assembly/target/scala-2.9.3/ 只需拷貝jar包
examples/target/scala-2.9.3/只需拷貝jar包
spark-class
注意,需要保證以上目錄的層次結構,即一個目錄下有:
conf目錄、spark-class文件,assembly目錄(內部有target目錄)、examples目錄(內部有target目錄)
一切就緒后,可以編寫一個shell腳本run_spark_shell.sh運行pi計算程序:
#用YARN_CONF_DIR或HADOOP_CONF_DIR指定YARN或者Hadoop配置文件存放目錄
export YARN_CONF_DIR=/opt /yarn/etc/hadoop/
SPARK_JAR=./assembly/target/scala-2.9.3/spark-assembly-0.8.1-incubating-hadoop2.2.0.jar \
./spark-class org.apache.spark.deploy.yarn.Client \
–jar ./assembly/target/scala-2.9.3/spark-examples-assembly-0.8.1-incubating.jar \
–class org.apache.spark.examples.JavaSparkPi \
–args yarn-standalone \
–num-workers 3 \
–master-memory 2g \
–worker-memory 2g \
–worker-cores 1
然后運行該shell腳本:
sh run_spark_shell.sh
可在終端看到以下內容:
以上程序比較簡單,你可以運行一個復雜點的迭代程序,Spark提供了一個圖閉包傳遞算法(Transitive closure),可以通過以下腳本運行(run_spark_tc.sh):
#用YARN_CONF_DIR或HADOOP_CONF_DIR指定YARN或者Hadoop配置文件存放目錄
export YARN_CONF_DIR=/opt /yarn/etc/hadoop/
SPARK_JAR=./assembly/target/scala-2.9.3/spark-assembly-0.8.1-incubating-hadoop2.2.0.jar \
./spark-class org.apache.spark.deploy.yarn.Client \
–jar ./assembly/target/scala-2.9.3/spark-examples-assembly-0.8.1-incubating.jar \
–class org.apache.spark.examples.SparkTC \
–args yarn-standalone \
–num-workers 3 \
–master-memory 2g \
–worker-memory 2g \
–worker-cores 1
運行該腳本后,可在YARN界面上看到運行過程:
如果你使用的CDH4或者2.0.x版本,無需使用maven編譯,直接使用sbt打包即可,具體可參考:Building a YARN-Enabled Assembly JAR。
截止目前,CDH成為第一個宣稱支持Spark的發行版,預計在CDH5版本中將打入Spark,到之后使用Spark更加方便。
另外,如果你只想體驗一下Spark,不想自己編譯打包Spark,可以直接下載我打包好的spark(下載地址:spark-on-hadoop-2.2.0.tar.gz),內置兩個可以直接運行的spark作業(run_spark_pi.sh和run_spark_tc.sh),不過運行前,你需要先配置以下hadoop目錄所在位置,即修改腳本的第一行內容:
export YARN_CONF_DIR=/opt/pgs/yarn/etc/hadoop/
目前0.8.1版本已經發布,官網提供了安裝包下載,下載后可以直接使用,下載鏈接是:spark-hadoop2。
總結
以上是生活随笔為你收集整理的Apache Spark学习:将Spark部署到Hadoop 2.2.0上的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python+Django+Eclips
- 下一篇: mahout 算法集