spark編譯
『壹』 Spark Shell因為Scala編譯器原因不能正常啟動怎麼解決
Spark Shell由於Scala編譯器原因不能正常啟動
使用SBT安裝完成Spark後,可以運行示例,但是嘗試運行spark-shell就會報錯:
D:\Scala\spark\bin\spark-shell.cmd
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J:
Found binding in
[jar:file:/D:/Scala/spark/assembly/target/scala-2.10/spark-assembly-0.9.0-incubating-hadoop1.0.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in
[jar:file:/D:/Scala/spark/tools/target/scala-2.10/spark-tools-assembly-0.9.0-incubating.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
14/04/03 20:40:43 INFO HttpServer: Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
14/04/03 20:40:43 INFO HttpServer: Starting HTTP Server
Failed to initialize compiler: object scala.runtime in compiler mirror not found.
** Note that as of 2.8 scala does not assume use of the java classpath.
** For the old behavior pass -usejavacp to scala, or if using a Settings
** object programatically, settings.usejavacp.value = true.
14/04/03
20:40:44 WARN SparkILoop$SparkILoopInterpreter: Warning: compiler
accessed before init set up. Assuming no postInit code.
Failed to initialize compiler: object scala.runtime in compiler mirror not found.
** Note that as of 2.8 scala does not assume use of the java classpath.
** For the old behavior pass -usejavacp to scala, or if using a Settings
** object programatically, settings.usejavacp.value = true.
Failed to initialize compiler: object scala.runtime in compiler mirror not found.
at scala.Predef$.assert(Predef.scala:179)
at
org.apache.spark.repl.SparkIMain.initializeSynchronous(SparkIMain.scala:197)
at
org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply$mcZ$sp(SparkILoop.scala:919)
at
org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply(SparkILoop.scala:876)
at
org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply(SparkILoop.scala:876)
at
scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:135)
at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:876)
at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:968)
at org.apache.spark.repl.Main$.main(Main.scala:31)
at org.apache.spark.repl.Main.main(Main.scala)
Google
之還是不求解。只是在SBT的網站上看到Q&A裡面有個問題提到了:http://www.scala-sbt.org/release
/docs/faq#how-do-i-use-the-scala-interpreter-in-my-code。這里說代碼中怎麼修改設置。顯然不
適合我。
繼續求解。注意到錯誤提示是在2.8以後才有的,原因是有一個關於編譯器解釋權Classpath的提議被接受了:Default compiler/interpreter classpath in a managed environment。
繼續在Google中找,有一篇論文吸引了我的注意:Object Scala Found。裡面終於找到一個辦法:
「
However, a working command can be recovered, like so:
$ jrunscript -Djava.class.path=scala-library.jar -Dscala.usejavacp=true -classpath scala-compiler.jar -l scala
」
於是修改一下\bin\spark-class2.cmd:
rem Set JAVA_OPTS to be able to load native libraries and to set heap size
set
JAVA_OPTS=%OUR_JAVA_OPTS% -Djava.library.path=%SPARK_LIBRARY_PATH%
-Dscala.usejavacp=true -Xms%SPARK_MEM% -Xmx%SPARK_MEM%
rem Attention: when changing the way the JAVA_OPTS are assembled, the change must be reflected in ExecutorRunner.scala!
標紅的部分即是心添加的一個參數。再次運行\bin\spark-shell.cmd:
D:>D:\Scala\spark\bin\spark-shell.cmd
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J:
Found binding in
[jar:file:/D:/Scala/spark/assembly/target/scala-2.10/spark-assembly-0.9.0-incubating-hadoop1.0.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in
[jar:file:/D:/Scala/spark/tools/target/scala-2.10/spark-tools-assembly-0.9.0-incubating.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
14/04/03 22:18:41 INFO HttpServer: Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
14/04/03 22:18:41 INFO HttpServer: Starting HTTP Server
Welcome to
____
__
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 0.9.0
/_/
Using Scala version 2.10.3 (Java HotSpot(TM) Client VM, Java 1.6.0_10)
Type in expressions to have them evaluated.
Type :help for more information.
14/04/03 22:19:12 INFO Slf4jLogger: Slf4jLogger started
14/04/03 22:19:13 INFO Remoting: Starting remoting
14/04/03 22:19:16 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://spark@Choco-PC:5960]
14/04/03 22:19:16 INFO Remoting: Remoting now listens on addresses: [akka.tcp://spark@Choco-PC:5960]
14/04/03 22:19:16 INFO SparkEnv: Registering BlockManagerMaster
14/04/03
22:19:17 INFO DiskBlockManager: Created local directory at
C:\Users\Choco\AppData\Local\Temp\spark-local-20140403221917-7172
14/04/03 22:19:17 INFO MemoryStore: MemoryStore started with capacity 304.8 MB.
14/04/03 22:19:18 INFO ConnectionManager: Bound socket to port 5963 with id = ConnectionManagerId(Choco-PC,5963)
14/04/03 22:19:18 INFO BlockManagerMaster: Trying to register BlockManager
14/04/03 22:19:18 INFO BlockManagerMasterActor$BlockManagerInfo: Registering block manager Choco-PC:5963 with 304.8 MB RAM
14/04/03 22:19:18 INFO BlockManagerMaster: Registered BlockManager
14/04/03 22:19:18 INFO HttpServer: Starting HTTP Server
14/04/03 22:19:18 INFO HttpBroadcast: Broadcast server started at http://192.168.1.100:5964
14/04/03 22:19:18 INFO SparkEnv: Registering MapOutputTracker
14/04/03
22:19:18 INFO HttpFileServer: HTTP File server directory is
C:\Users\Choco\AppData\Local\Temp\spark-e122cfe9-2d62-4a47-920c-96b54e4658f6
14/04/03 22:19:18 INFO HttpServer: Starting HTTP Server
14/04/03 22:19:22 INFO SparkUI: Started Spark Web UI at http://Choco-PC:4040
14/04/03 22:19:22 INFO Executor: Using REPL class URI: http://192.168.1.100:5947
Created spark context..
Spark context available as sc.
scala> :quit
Stopping spark context.
14/04/03 23:05:21 INFO MapOutputTrackerMasterActor: MapOutputTrackerActor stopped!
14/04/03 23:05:21 INFO ConnectionManager: Selector thread was interrupted!
14/04/03 23:05:21 INFO ConnectionManager: ConnectionManager stopped
14/04/03 23:05:21 INFO MemoryStore: MemoryStore cleared
14/04/03 23:05:21 INFO BlockManager: BlockManager stopped
14/04/03 23:05:21 INFO BlockManagerMasterActor: Stopping BlockManagerMaster
14/04/03 23:05:21 INFO BlockManagerMaster: BlockManagerMaster stopped
14/04/03 23:05:21 INFO SparkContext: Successfully stopped SparkContext
14/04/03 23:05:21 INFO RemoteActorRefProvider$RemotingTerminator: Shutting down remote daemon.
14/04/03
23:05:21 INFO RemoteActorRefProvider$RemotingTerminator: Remote daemon
shut down; proceeding with flushing remote transports.
Good。瀏覽器打開http://Choco-PC:4040,就可以看到Spark的狀態、環境、執行者等信息了。
這個Fix可能只是適用與我的情況。如果還有問題可以再找找相關的資料。
期間還碰到不能找到文件的錯誤。最後發現是JAVA_HOME設置沒有對。如果你碰到問題了,可以打開腳本的回顯,然後找找原因。
『貳』 新手請教:為什麼安裝spark需要源碼編譯
因為不同版本的HDFS在協議上是不兼容的,所以如果你想用你的Spark從HDFS上讀取數據,那麼你就的選擇相應版本的HDFS來編譯Spark,這個可以在編譯的時候通過設置hadoop.version來選擇,默認情況下,Spark默認為編譯成Hadoop 1.0.4版本。現在可以使用的方法有Maven編譯,sbt編譯(時間較長),Spark自帶腳本編譯(實際還是調用Maven)。
『叄』 eclipse運行spark wordcount程序 編譯錯誤
找不到這個類,你缺少這個類所在的jar包,根據這個類名搜索
『肆』 怎麼編譯spark-streaming-flume
storm是實時處理,spark和hadoop是批處理,兩者是互補。在Hadoop2.0之後,hadoop使用了新的yarn框架,map/rece只是其中一種默許了,spark也可以在hadoop的yarn框架下運行的,所以2者還會是融合的。
spark還有與storm相同功能的 Spark Steaming,實時處理流式數據。可以順著Hadoop -> spark -> spark Steaming一路學下去,storm是否學習,你可以自己選擇下。如果有相同功能的spark Steaming,肯定是學習spark Steaming啦。
如果我的回答沒幫助到您,請繼續追問。
『伍』 spark獨立模式還需要編譯嗎
spark有三種集群部署方式:
1、獨立部署模式standalone,spark自身有一套完整的資源管理方式
2、架構於hadoop之上的spark集群
3、架構於mesos之上的spark集群
嘗試了下搭建第一種獨立部署模式集群,將安裝方式記錄如下:
環境ubuntu 12.04 (兩台),部署方式是和hadoop類似,先在一台機器上部署成功後直接將文件打包拷貝到其他機器上,這里假設現在A機器上部署,並且A為master,最後B為slave
A和B均上創建用戶spark
sudo useradd spark
以後spark的目錄在集群所有機器的/home/spark/spark下(第一個spark是用戶名,第二個spark是spark文件目錄名)
保證A能無密碼登陸到B上的spark用戶,在ssh裡面設置
這部分是現在master機器(A)上配置
0 首先保證A能無密碼方式ssh至localhost和B ,具體方式參見: 點擊打開鏈接
0.1 在A機器上執行
ssh-keygen -t rsa
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
ssh localhost
那麼A可以實現無密碼登陸localhost
0.2 在B機器上執行
ps -e|grep ssh
如果出現:
695 ? 00:00:00 sshd
1754 ? 00:00:00 ssh-agent
若沒有sshd那麼在B上執行
sudo apt-get install openssh-server
在B上安裝ssh服務端(ubuntu有可能默認只有agent端)
0.3 在B上執行:
ssh-keygen -t rsa
scp spark@A:~/.ssh/authorized_keys ~/.ssh
第一句是為了保證在B上有.ssh目錄
第二句是將A的公鑰拷貝到B上,從而實現A無密碼訪問B
0.4 在A上執行gedit ~/.ssh/config添加
user spark
這里是為了A以默認用戶spark無密碼登陸B,其實這一步沒有必要,因為A和B機器上都是在spark用戶下操作的,那麼機器A的saprk執行ssh B也是以spark用戶登陸的
1 每台機器確保有java ,一個簡單的方式:
sudo apt-get install eclipse
2 需要maven編譯spark源碼 ,下載maven 點擊打開鏈接 ,隨便下載一個版本
簡單的方式:
sudo apt-get install maven
復雜的方式:
wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.2.2/binaries/apache-maven-3.2.2-bin.tar.gz
tar -zxvf apache-maven-3.2.2-bin.tar.gz
mv apache-maven-3.2.2-bin.tar.gz maven
sudo mv maven /usr/local
然後gedit /etc/profile末尾添加如下:
#set maven environment
M2_HOME=/usr/local/maven
export MAVEN_OPTS="-Xms256m -Xmx512m"
export PATH=$M2_HOME/bin:$PATH
驗證maven安裝成功:
source /etc/profile
mvn -v
出現類似語句:Apache Maven 3.2.2 (; 2014-06-17T21:51:42+08:00)
3 下載spark, 點擊打開鏈接 ,注意不要下載帶有hadoop之類字樣的版本,而是source package比如spark-1.0.0.tgz
tar -zxvf spark-1.0.0.tgz
mv spark-1.0.0 spark
cd spark
sh make-distribution.sh
最後一步會
編譯spark源碼
,過程可能有點長,取決於網路和機器配置,我的用了19min,編譯成功類似如下圖(圖來自網上):
4 配置spark
4.1 gedit ./conf/spark-env.sh在spark-env.sh末尾添加如下:
export SPARK_MASTER_IP=A
export SPARK_WORKER_CORES=1
export SPARK_WORKER_INSTANCES=1
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_MEMORY=1g
export MASTER=spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT}
注意這里的SPARK_MASTER_IP我覺得還是設置為master機器的IP地址比較好,這里我假設master的hostname是A
SPARK_WORKER_INSTANCES表示slave機器的數目,這里只有B一台故設為1
4.2 gedit ./conf/slaves添加B的hostname,這里B機器的hostname假設就為B故在文件中追加一個B即可。文件里原來有一個localhost如果你想要master同時也為worker機器那麼可保留該行,否則可以刪除
5 驗證master機器A能否單機啟動spark
『陸』 使用maven編譯spark報錯,誰知道是什麼原因嗎
maven項目編譯的標准輸出路徑就是mavenProject/target/classes, 項目右鍵 build path--configure build path--java build path--source,把default output folder改成mavenProject/target/classes,在菜單欄project下把自動編譯打勾。
『柒』 spark編譯失敗後怎麼重新編譯
### spark 下載
http://spark.apache.org/downloads.html
### 前提准備
# 安裝 JDK,mvn 和 scala,並設置對應的JAVA_HOME,MVN_HOME 和 SCALA_HOME
### Spark 編譯 (參考 http://spark.apache.org/docs/latest/building-with-maven.html)
#1 設置maven的環境變數
exportMAVEN_OPTS="-Xmx2g
-XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
『捌』 spark1.3編譯出錯,求解決方法
把 pom.xml文件中的scalastyle的相關改成false
<groupId>org.scalastyle</groupId>
<artifactId>scalastyle-maven-plugin</artifactId>
<version>0.4.0</version>
<configuration>
<verbose>false</verbose>
<failOnViolation>false</failOnViolation>
<includeTestSourceDirectory>false</includeTestSourceDirectory>
<failOnWarning>false</failOnWarning>
『玖』 如何在CDH上編譯運行spark application
以SBT為例,比如說我的一個應用原來是基於原生1.6.0spark編譯的
libraryDependencies ++= {
val sparkV = "1.6.0"
Seq(
"org.apache.spark" %% "spark-core" % sparkV withSources() withJavadoc(),
"org.apache.spark" %% "spark-catalyst" % sparkV withSources() withJavadoc(),
"org.apache.spark" %% "spark-sql" % sparkV withSources() withJavadoc(),
"org.apache.spark" %% "spark-hive" % sparkV withSources() withJavadoc(),
"org.apache.spark" %% "spark-repl" % sparkV withSources() withJavadoc(),
)
『拾』 spark編譯在linux怎麼使用
在windows下安裝軟體大家都覺得很容易,只要雙擊setup或是install的圖標,然後跟著向導一步一步的按提示做就可以了,但是在linux下安裝軟體就不像windows下那樣容易了,有時你找到的是沒有編譯過的軟體源碼,那就更加的麻煩了,這里就介紹一下如...