spark-mesos运行自己编译的程序
2014-05-16 14:07
211 查看
配置好了spark-mesos环境,在上面可以运行示例,但是缺少了编译的过程。要了解里面的运行过程,需要编译代码在上面成功运行,才能进一步了解。记录一下如何编译运行实例。
首先,安装SBT(simple build tool)。
参考(http://www.scala-sbt.org/release/docs/Getting-Started/Setup.html)
我的环境是在CentOS上
a. 下载jar包(http://www.scala-sbt.org/release/docs/Getting-Started/Setup.html),将该jar包放在/root/bin/目录下。
b. 创建文件 /root/bin/sbt 在文件中输入下面两行
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
c. 给/root/bin/sbt增加可执行的权限 chmod u+x /root/bin/sbt
d. 执行/root/bin/sbt 就会自动下载所需要的包并安装
e. 安装过后,修改环境变量,方便直接使用。自此完成了SBT的安装
然后准备测试源代码
参考(http://spark.apache.org/docs/latest/quick-start.html)中的A Standalone App in Scala,因为我们运行在Mesos集群中,所以和官方文档我们有些差异。
a. 创建一个文件SimpleApp.scala,输入源代码:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.{SparkConf, SparkContext}
object SimpleApp {
def main(args: Array[String]) {
val conf = new SparkConf()
.setMaster("mesos://192.168.1.55:5050")//Mesos的master节点的地址
.setAppName("My application")
.set("spark.executor.memory", "3g")
val logFile = "/home/yushiyao/spark/test/generate_points.sh" // 这个文件在本地和Mesos的slave节点上都要有该文件
val sc = new SparkContext(conf)
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a"))
val numAs_count = numAs.count()
val numBs = logData.filter(line => line.contains("b"))
val numBs_count = numBs.count()
println("Lines with a: %s, Lines with b: %s".format(numAs_count, numBs_count))
}
}
b. 创建一个文件simple.sbt输入内容
name := "Simple Project"
version := "1.0"
scalaVersion := "2.10.3"
libraryDependencies += "org.apache.spark" %% "spark-core" % "0.9.1"
resolvers += "Akka Repository" at "http://repo.akka.io/releases/"
c. 按照下列树状结构,组织目录和文件
$ find .
.
./simple.sbt
./src
./src/main
./src/main/scala
./src/main/scala/SimpleApp.scala
d. 执行sbt package 对源码进行编译
e. 编译之后将整个目录拷贝到Mesos的两个slave节点中,之后要将编译生成simple-project_2.10-1.0.jar该文件的目录加到两个slave的环境变量CLASSPATH中,本人的路径是
/home/yushiyao/spark/spark-0.9.1/sbt/test/target/scala-2.10/simple-project_2.10-1.0.jar。
经过研究,在master下发任务时,在slave节点中会执行从master下发下来路径中的./spark/sbin/spark-excutor这个脚本(下发的文件见spark+meso安装运行博文)。而这个脚本最后会先执行./spark/bin/compute-classpath.sh这个脚本,这个脚本会执行./spark/conf/spark-env.sh这个脚本导入环境变量(如果有这个文件的话)。所以楼主就在spark-env.sh文件中加入了一行,
export CLASSPATH=/home/yushiyao/spark/spark-0.9.1/sbt/test/target/scala-2.10/simple-project_2.10-1.0.jar
但是执行仍然没有成功,原因是在上面所说的compute-classpath.sh这个脚本中,脚本在生成CLASSPATH变量的时候覆盖了原来的值,楼主修改了其中的一行,
将这一行CLASSPATH="$SPARK_CLASSPATH:$FWDIR/conf"
改为CLASSPATH="$SPARK_CLASSPATH:$FWDIR/conf:$CLASSPATH"
这样我们的slave就可以找到需要执行的类了。
f. 执行 sbt run 执行中遇到了两个问题,第一个是Spark home is not set,第二个是no mesos in java.library.path。这两个错误都是环境变量的原因,需要在执行sbt run之前导入环境变量
export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so 安装mesos之后的库文件所在位置
export SPARK_HOME=/home/yushiyao/spark/spark-0.9.1/ spark的安装目录
此外需要说明的是,在运行出错时,slave节点会给出出错信息方便我们查找错误。在master节点上查看framwork号,然后在slave中查找和framwork号的路径,具体的出错信息就在这个路径下可以找到。附上我的某一次执行结果和出错路径
/tmp/mesos/slaves/20140514-030920-922855616-5050-4627-17/frameworks/20140515-030109-922855616-5050-13534-0017/executors/20140514-030920-922855616-5050-4627-17/runs/latest
首先,安装SBT(simple build tool)。
参考(http://www.scala-sbt.org/release/docs/Getting-Started/Setup.html)
我的环境是在CentOS上
a. 下载jar包(http://www.scala-sbt.org/release/docs/Getting-Started/Setup.html),将该jar包放在/root/bin/目录下。
b. 创建文件 /root/bin/sbt 在文件中输入下面两行
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
c. 给/root/bin/sbt增加可执行的权限 chmod u+x /root/bin/sbt
d. 执行/root/bin/sbt 就会自动下载所需要的包并安装
e. 安装过后,修改环境变量,方便直接使用。自此完成了SBT的安装
然后准备测试源代码
参考(http://spark.apache.org/docs/latest/quick-start.html)中的A Standalone App in Scala,因为我们运行在Mesos集群中,所以和官方文档我们有些差异。
a. 创建一个文件SimpleApp.scala,输入源代码:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.{SparkConf, SparkContext}
object SimpleApp {
def main(args: Array[String]) {
val conf = new SparkConf()
.setMaster("mesos://192.168.1.55:5050")//Mesos的master节点的地址
.setAppName("My application")
.set("spark.executor.memory", "3g")
val logFile = "/home/yushiyao/spark/test/generate_points.sh" // 这个文件在本地和Mesos的slave节点上都要有该文件
val sc = new SparkContext(conf)
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a"))
val numAs_count = numAs.count()
val numBs = logData.filter(line => line.contains("b"))
val numBs_count = numBs.count()
println("Lines with a: %s, Lines with b: %s".format(numAs_count, numBs_count))
}
}
b. 创建一个文件simple.sbt输入内容
name := "Simple Project"
version := "1.0"
scalaVersion := "2.10.3"
libraryDependencies += "org.apache.spark" %% "spark-core" % "0.9.1"
resolvers += "Akka Repository" at "http://repo.akka.io/releases/"
c. 按照下列树状结构,组织目录和文件
$ find .
.
./simple.sbt
./src
./src/main
./src/main/scala
./src/main/scala/SimpleApp.scala
d. 执行sbt package 对源码进行编译
e. 编译之后将整个目录拷贝到Mesos的两个slave节点中,之后要将编译生成simple-project_2.10-1.0.jar该文件的目录加到两个slave的环境变量CLASSPATH中,本人的路径是
/home/yushiyao/spark/spark-0.9.1/sbt/test/target/scala-2.10/simple-project_2.10-1.0.jar。
经过研究,在master下发任务时,在slave节点中会执行从master下发下来路径中的./spark/sbin/spark-excutor这个脚本(下发的文件见spark+meso安装运行博文)。而这个脚本最后会先执行./spark/bin/compute-classpath.sh这个脚本,这个脚本会执行./spark/conf/spark-env.sh这个脚本导入环境变量(如果有这个文件的话)。所以楼主就在spark-env.sh文件中加入了一行,
export CLASSPATH=/home/yushiyao/spark/spark-0.9.1/sbt/test/target/scala-2.10/simple-project_2.10-1.0.jar
但是执行仍然没有成功,原因是在上面所说的compute-classpath.sh这个脚本中,脚本在生成CLASSPATH变量的时候覆盖了原来的值,楼主修改了其中的一行,
将这一行CLASSPATH="$SPARK_CLASSPATH:$FWDIR/conf"
改为CLASSPATH="$SPARK_CLASSPATH:$FWDIR/conf:$CLASSPATH"
这样我们的slave就可以找到需要执行的类了。
f. 执行 sbt run 执行中遇到了两个问题,第一个是Spark home is not set,第二个是no mesos in java.library.path。这两个错误都是环境变量的原因,需要在执行sbt run之前导入环境变量
export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so 安装mesos之后的库文件所在位置
export SPARK_HOME=/home/yushiyao/spark/spark-0.9.1/ spark的安装目录
此外需要说明的是,在运行出错时,slave节点会给出出错信息方便我们查找错误。在master节点上查看framwork号,然后在slave中查找和framwork号的路径,具体的出错信息就在这个路径下可以找到。附上我的某一次执行结果和出错路径
/tmp/mesos/slaves/20140514-030920-922855616-5050-4627-17/frameworks/20140515-030109-922855616-5050-13534-0017/executors/20140514-030920-922855616-5050-4627-17/runs/latest
相关文章推荐
- 嵌入式Linux中在开发板上/usr/bin目录下不能运行自己交叉编译的程序
- 在eclipse中自己编写makefile后程序的编译运行方法
- 自己动手编译、运行Java程序
- 记错:QT程序编译生成后在自己机器上能够运行,却无法在别人机器上运行
- 自己动手编译、运行Java程序
- 自己动手编译、运行Java程序
- 在Mac上用自己编译出的DNX运行.NET程序
- 第7课在自己搭建的spark集群下运行程序实例
- 在linux上,用scalac编译在Spark平台上运行的scala程序
- .NET跨平台:在Ubuntu上用自己编译的dnx运行ASP.NET 5示例程序
- 以root权限运行自己所编译程序的方法
- 自己动手编译、运行Java程序,解析package的作用
- 自己动手编译、运行Java程序
- 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.7.2
- 自己改的AT89S51单片机控制GSM模块(M22)发送短信程序,在Keil上编译没错,但还未试过烧入片内运行。。
- java -jar运行spark程序找不到自己写的类的错误解决
- 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.4.1
- spark:Idea编译程序打jar包部署到spark运行方法--19
- 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0
- gcc编译静态库到自己的程序 解决在不同linux下因libc版本问题而不能运行