標籤:

下載prebuilt版的Spark後,必須運行sbt/sbt assembly 後才能使用嗎?

一直在「

downloading http://repo1.maven.org/maven2/org/apache/ivy/ivy/2.3.0-rc1/ivy-2.3.0-rc1.jar」 等類似東西,一個星期都成功不了,有沒有解決方法? 一台下載成功後能否直接拷貝到其他機器來組成集群?


要想徹底解決下載包很慢的問題,最好的方法是在自己的電腦上搭建nexus私服,然後配置maven和ivy的代理倉庫(proxy repository)。用sbt或者maven編譯一個項目,第一次執行的時候,會自動下載依賴包到自己的私服上,以後再有相同的包需要下載,只要從私服下載即可,速度就很快了,其他機器也可以使用這個nexus私服。下面是我的配置腳本,在ubuntu 12.04 64bit上用的,開發java/maven或者scala/sbt項目,都沒什麼問題。

#安裝maven
sudo apt-get install maven

sudo vi /etc/profile.d/maven.sh
export MAVEN_OPTS="-Xmx8192m -XX:MaxPermSize=4096m"

source /etc/profile.d/maven.sh

#安裝nexus私服
cd ~/software
wget http://www.sonatype.org/downloads/nexus-latest-bundle.tar.gz
tar xvzf nexus-latest-bundle.tar.gz
rm nexus-latest-bundle.tar.gz

vi ~/.bash_profile
export NEXUS_HOME=$HOME/software/nexus-&
export PATH=$NEXUS_HOME/bin:$PATH

vi ~/.bashrc
[[ -f $HOME/.bash_profile ]] . $HOME/.bash_profile

source ~/.bash_profile

$NEXUS_HOME/bin/nexus start
tail -f $NEXUS_HOME/logs/wrapper.log

#登錄nexus管理頁面
http://&:8081/nexus
username:admin
password:admin123

#給nexus添加maven和ivy代理倉庫
http://download.java.net/maven/2/
http://repo.typesafe.com/typesafe/releases/
http://repo.typesafe.com/typesafe/snapshots/
http://repo.typesafe.com/typesafe/ivy-releases/
http://repo.typesafe.com/typesafe/ivy-snapshots/
http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/
http://oss.sonatype.org/content/repositories/snapshots

#設置maven代理倉庫
#桌面版ubuntu
vi ~/.m2/settings.xml
#伺服器版ubuntu
sudo vi /etc/maven/settings.xml

&
&
&
&nexus&
&*&
&http://&:8081/nexus/content/groups/public&
&

&

&


&


&nexus&
&
&
&public&
&http://&:8081/nexus/content/groups/public&
&
&true&
&

&
&true&
&

&

&

&


&


&public&
&http://&:8081/nexus/content/groups/public&
&
&true&
&

&
&true&
&

& & & & &
&nexus&
&
&
&
&nexus-releases&
&admin&
&

admin123& &
&
&nexus-snapshots&
&admin&
&

admin123& &
&
&

#安裝scala
cd /opt
sudo wget http://www.scala-lang.org/files/archive/scala-2.10.3.tgz
sudo tar xfz scala-2.10.3.tgz
sudo chown -R `whoami`:root /opt/scala-2.10.3/
sudo chmod -R u+x /opt/scala-2.10.3/bin/

sudo vi /etc/profile.d/scala.sh
export SCALA_HOME=/opt/scala-2.10.3
export PATH=$SCALA_HOME/bin:$PATH

source /etc/profile.d/scala.sh

#安裝sbt
cd /opt
sudo wget http://repo.scala-sbt.org/scalasbt/sbt-native-packages/org/scala-sbt/sbt/0.13.1/sbt.tgz
sudo tar xfz sbt.tgz
sudo mv sbt sbt-0.13.1
sudo chown -R `whoami`:root /opt/sbt-0.13.1/
sudo chmod -R u+x /opt/sbt-0.13.1/bin/

sudo vi /etc/profile.d/scala.sh
export SBT_HOME=/opt/sbt-0.13.1
export PATH=$SBT_HOME/bin:$PATH

source /etc/profile.d/scala.sh

sudo $SBT_HOME/bin/sbt
sudo ls -al /root/.sbt/boot/scala-2.10.3/org.scala-sbt/sbt/0.13.1
sudo ls -al /root/.ivy2/cache

mkdir ~/.sbt/0.13/plugins

vi ~/.sbt/0.13/plugins/plugins.sbt
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")

#設置sbt代理倉庫
vi ~/.sbt/repositories
[repositories]
local
ivy-proxy-releases: http://&:8081/nexus/content/groups/public/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
maven-proxy-releases: http://&:8081/nexus/content/groups/public/

#結束


不需要。

source包才需要編譯(sbt沒用過,如果用maven 的話,maven 庫最好使用中國的鏡像,以免有些jar包無法下載。)

http://maven.oschina.net/help.html)

如果你下載的是binaries 版本的直接解壓就可以用。

假設你有4台節點組成一個集群:

master、slave01、slave02、slave03

以下代碼需要僅作為參考,需要根據你自己的環境路徑做出相應修改

首先安裝scala 2.10.3(適配 spark 0.9)

#解壓
tar -zxf scala-2.10.3.tgz

#拷貝到每台節點上
scp -r /root/scala-2.10.3 root@slaver01:/root
scp -r /root/scala-2.10.3 root@slaver02:/root
scp -r /root/scala-2.10.3 root@slaver03:/root

#分別配置每台節點
vi /etc/profile

#加入以下配置
export SCALA_HOME=/root/scala-2.10.3
export PATH=$SCALA_HOME/bin:$PATH

#保存退出並使環境變數生效
source /etc/profile

接著安裝spark 0.9(需要下載適合你的hadoop版本的spark預編譯包,這裡的版本是適配 hadoop 2)

#解壓
tar -zxf spark-0.9.0-incubating-bin-hadoop2.tgz
mv spark-0.9.0-incubating-bin-hadoop2 spark-0.9
cd ~/spark-0.9/conf
mv spark-env.sh.template spark-env.sh

vi spark-env.sh

#加入以下配置
export SCALA_HOME=/root/scala-2.10.3
export JAVA_HOME=/usr/java/default
export SPARK_MASTER_IP=10.1.1.1
export SPARK_WORKER_MEMORY=1000m

vi slaves
#在conf/slaves,添加worker的hostname,一行一個。

slaver01
slaver02
slaver03

#拷貝到每台節點上
scp -r /root/spark-0.9 root@slaver01:/root
scp -r /root/spark-0.9 root@slaver02:/root
scp -r /root/spark-0.9 root@slaver03:/root

#分別配置每台節點
vi /etc/profile

#加入以下配置

export SPARK_HOME=/root/spark-0.9
export PATH=$SPARK_HOME/bin:$PATH

#保存退出並使環境變數生效
source /etc/profile

啟動 Spark集群:在master上執行

cd ~/spark-0.9
./sbin/start-all.sh


Prebuilt版是不需要編譯的(否則就不叫prebuilt了)。

從源碼編譯的過程 @Markus Hao 的答案已經寫得比較清楚了。再寫幾點注意事項:

依賴解析和依賴庫下載請翻牆……具體手段:

  • 有VPN是最方便的,完全透明,不用單獨設置SBT
  • HTTP/SOCKS代理請設置SBT_OPTS環境變數:
    • HTTP

      export SBT_OPTS="-Dhttp.proxyHost=& -Dhttp.proxyPort=&

      "

    • SOCKS

      export SBT_OPTS="-DsocksProxyHost=& -DsocksProxyPort=&

      "

在一台機器上編譯完成後,可以將~/.ivy2和~/.m2兩個目錄拷貝到其他機器上,避免再遠程下載各種依賴庫。

編譯過程中除了下載依賴包比較慢以外,Ivy的依賴解析也慢得令人沮喪。為了避免反覆解析依賴,下載源碼包或更新Git代碼庫後可以先執行一遍sbt update,然後在~/.sbt/&/global.sbt中加上以下三行(中間的空行不可省略):

offline := true

skip in update := true

Ivy的一個bug會導致.orbit類依賴下載失敗。解決辦法是升級SBT到0.13.2-RC1,詳情參見http://mail-archives.apache.org/mod_mbox/incubator-spark-dev/201403.mbox/%3CCAA_qdLo=43=k3z20WDQd919zYx+xQ08JmAiCvyjhJLh_wHyDBg@mail.gmail.com%3E


補充: cloudera提供的spark二進位包 不能直接啟動. 目錄缺少sbt目錄, 錯誤提示需要 sbt/sbt assembly


我覺得prebuilt版本誕生的原因可能是因為:

1,最開始spark0.7版本左右的時候,國內開始」較多「關注spark,但是twitter的一個jar包在國內下不到。

2,為了部署的方便,不需要用戶再次編譯spark源碼,這點和hadoop部署方式靠近,hadoop是不需要編譯直接部署的。

但是這會引起問題,prebuilt的版本中的hadoop版本是固定的,也許和你環境中hadoop的版本不一致。

回答樓主的問題:prebuilt版本不需要再次編譯。


推薦閱讀:

什麼是自助式BI?和傳統BI(商業智能)相比有何優劣勢?
數據之路(Hadoop)我該如何打好基礎?
生產環境下cloudera的cdh版本更受歡迎,但是貌似cloudera對於YARN的開發力度不是很突出,所以在apache與cdh版本選擇的時候,大家是怎麼考慮的?
ArcGIS 有什麼奇技淫巧?
大數據實驗手冊怎麼自己搭環境?

TAG:Hadoop | Spark |