下載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://&
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
& admin123&
& admin123&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&nexus&
&
&
&
&
&
&
&
&
&
&
&
&
#安裝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://&
maven-proxy-releases: http://&
#結束
不需要。
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
#解壓
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
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/&offline := true
skip in update := true
補充: 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 有什麼奇技淫巧?
※大數據實驗手冊怎麼自己搭環境?