mesos上安裝Spark總結


mesos的具體安裝過程可以參考我的上一篇日志《mesos安裝總結》。

安裝Spark之前要在所有的主機上先安裝JDK和Scala。JDK的安裝過程就不贅述了。下面簡單介紹一下Scala 2.9.2的安裝過程。每台主機上都要安裝!!!!

首先,從scala官方網站下載scala 2.9.2的壓縮包

接着,使用命令tar zxvf scala-2.9.2.tgz解壓文件,得到文件夾scala-2.9.2。

然后,在用戶主目錄下創建一個名為.scala的文件夾,將scala-2.9.2拷貝到.scala目錄下。

最后,修改~/.bashrc文件,在其中添加如下兩行:

export SCALA_HOME=/home/dummy/.scala/scala-2.9.2
export PATH=$PATH:$SCALA_HOME/bin

運行命令source .bashrc以使配置立即生效。這時候在命令行中輸入scala,即可進入scala的交互式界面,說明scala安裝成功。

 

下面具體介紹Spark的安裝過程

(1)從下載頁面下載Spark 0.6.1,得到壓縮文件spark-0.6.1-sources.tgz。

 (2)使用如下命令解壓壓縮文件,得到文件夾spark-0.6.1

tar zxvf spark-0.6.1-sources.tgz

  (3)使用如下命令移動並重命名文件夾spark-0.6.1。

mv spark-0.6.1 ~/spark

接下來使用<spark>來指代~/spark

    (4) 進入<spark>,修改project/SparkBuild.scala文件,找到HADOOP_VERSION一行,修改為你集群中安裝的Hadoop版本。我使用的Hadoop版本為0.20.205.0。修改如下:

val HADOOP_VERSION = "0.20.205.0"

  (5)在<spark>目錄下,運行如下命令來build spark

sbt/sbt package

  (6)修改<spark>/conf/spark_env.sh文件,配置spark集群環境。我主要配置了五個參數,其中包括JDK的安裝目錄,Scala的安裝目錄,mesos庫的位置,每個slave結點最大內存使用量和Java虛擬機中有關垃圾回收的日志開啟信息。具體配置如下所示:

#!/usr/bin/env bash

# This file contains environment variables required to run Spark. Copy it as
# spark-env.sh and edit that to configure Spark for your site. At a minimum,
# the following two variables should be set:
# - MESOS_NATIVE_LIBRARY, to point to your Mesos native library (libmesos.so)
# - SCALA_HOME, to point to your Scala installation
export JAVA_HOME=/home/dummy/.java/jdk1.6.0_33
export SCALA_HOME=/home/dummy/.scala/scala-2.9.2
export MESOS_NATIVE_LIBRARY=/home/dummy/mesos/lib/libmesos.so


# If using the standalone deploy mode, you can also set variables for it:
# - SPARK_MASTER_IP, to bind the master to a different IP address
# - SPARK_MASTER_PORT / SPARK_MASTER_WEBUI_PORT, to use non-default ports
# - SPARK_WORKER_CORES, to set the number of cores to use on this machine
# - SPARK_WORKER_MEMORY, to set how much memory to use (e.g. 1000m, 2g)
# - SPARK_WORKER_PORT / SPARK_WORKER_WEBUI_PORT
#
# Finally, Spark also relies on the following variables, but these can be set
# on just the *master* (i.e. in your driver program), and will automatically
# be propagated to workers:
# - SPARK_MEM, to change the amount of memory used per node (this should
#   be in the same format as the JVM's -Xmx option, e.g. 300m or 1g)
# - SPARK_CLASSPATH, to add elements to Spark's classpath
# - SPARK_JAVA_OPTS, to add JVM options
# - SPARK_LIBRARY_PATH, to add extra search paths for native libraries.
export SPARK_MEM=2300m
export SPARK_JAVA_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"

   (7)將<spark>目錄拷貝到主結點和所有從結點的相同路徑下,在mesos上安裝Spark就算完成了。

 

   (8) 在使用Spark提供的框架編寫程序之前,要在<spark>中運行如下命令,生成開發所需要的類庫。

sbt/sbt assembly

運行命令之后,會在目錄<spark>/core/target中生成一個jar包spark-core-assembly-0.6.0.jar將該jar包添加到開發程序的lib目錄下,這樣程序編譯的時候才不會報各種語法錯誤。

     (9) 如果不使用run腳本運行自己編寫的程序,<spark>/conf/spark_env.sh是不會自動運行的,程序會拋出下面的問題。spark_env.sh中會導出若干個環境變量,對於Spark程序的運行至關重要,因此需要在運行程序前先運行spark_env.sh腳本。如果使用<spark>目錄下的run腳本運行程序則不會出現問題,這是因為腳本開始就先執行了spark_env.sh。

Failed to load native Mesos library from /home/dummy/.java/jdk1.6.0_45/jre/lib/a
md64/server:/home/dummy/.java/jdk1.6.0_45/jre/lib/amd64:/home/dummy/.java/jdk1.6
.0_45/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/
lib
java.lang.UnsatisfiedLinkError: no mesos in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
        at java.lang.Runtime.loadLibrary0(Runtime.java:823)
        at java.lang.System.loadLibrary(System.java:1028)
        at org.apache.mesos.MesosNativeLibrary.load(MesosNativeLibrary.java:46)
        at spark.SparkContext.<init>(SparkContext.scala:174)
        at spark.SparkContext.<init>(SparkContext.scala:77)
        at PageRank$.main(PageRank.scala:79)
        at PageRank.main(PageRank.scala)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClass
Loader.scala:78)
        at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoade
r.scala:24)
        at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaC
lassLoader.scala:88)
        at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scal
a:78)
        at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLo
ader.scala:101)
        at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:33)
        at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:40)
        at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala
:56)
        at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:80)
        at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:89)
        at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

 

接下來就可以使用Scala語言以及Spark提供的API來開發分布式應用了,具體過程在接下來的文章中會講到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM