1. CentOS 7 SBT Install
curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo
sudo mv bintray-sbt-rpm.repo /etc/yum.repos.d/
sudo yum install sbt
2 Spark 1.4.1 + MLLib 安装和搭建
用户需要搭建一个基于Spark+MLlib的视频处理平台,本文使用虚拟机,先使用虚拟机验证平台搭建的可行性。
1)操作系统版本号为ubuntu-12.04。
2)需要下载/安装的软件如下:spark-1.4.1, scala-2.11.6, SBT,假设存放在用户根目录 “~./” 下,Spark基于函数式编程语言Scala语言开发,所以需要安装Scala;Spark使用SBT编译程序,所以需要安装SBT.
3)Spark+MLlib安装过程
(a)创建Spark安装目录
由于下载的spark安装包自带MLlib插件,所以不需要单独安装MLlib插件。我是在http://spark.apache.org/mllib/ 下载的支持mllib的spark安装文件,在网站的右下角可以看到“Download Spark Includes MLlib”下载链接,点击下载。
mkdir ~/spark
cd ~/spark
tar zxvf spark-1.4.1-bin-hadoop2.6.tgz
下载地址为http: //www.scala-lang.org/download/2.11.6.html
减压安装包
tar zxvf scala-2.11.6.tgz
将安装包拷贝到系统安装目录/usr/lib下
mv scala-2.11.6 /usr/lib
在配置文件/etc/profile后添加如下内容
#SCALA
export SCALA_HOME=/usr/lib/scala-2.11.6
export PATH=$PATH:$SCALA_HOME/bin
export SPARK_HOME=/root/spark/spark-1.4.1-bin-hadoop2.6
export PATH=$PATH:$SPARK_HOME/bin
并执行如下命令后就可以验证scala是否成功安装
source /ect/profile
scala -version
Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL
(c)配置spark环境变量和部署Spark集群环境
首先,配置conf/spark-env.sh
cd ~/spark/spark-2.11.6
若没有改文件,将conf/spark-env.sh重命名,并且添加Java、hadoop、scala路径以及master的ip
mv conf/spark-env.sh.temp conf/spark-env.sh
在文件conf/spark-env.sh末尾添加下述内容
export HADOOP_CONF_DIR=~./data_test/hadoop-2.7.0/etc/hadoop
export SPARK_MASTER_IP=xx.xx.xx.51
export SCALA_HOME=/usr/lib/scala-2.11.6
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
其次,在conf/slaves添加slave节点的hostname,过程如上所述,添加后结果如下
# A Spark Worker will be started on each of the machines listed below.
#localhost
bigdatatest-2
bigdatatest-2位计算节点,master节点为bigdatatest-1。
其次,在所有slave机器上配置spark
将master节点上的hadoop安装文件传输给所有的slave节点,过程如下
cd ~
scp -r spark bigdatatest-2:~./
所有节点使用相同的账户,spark安装目录必须要项目,只是由于master会登陆到slave上执行命令,并认为slave的安装路径和master的安装路径相同。
4)启动Spark集群
cd ~/spark/spark-1.11.6
./sbin/start-all.sh
并云jps判断进程是否启动
5646 Master
13283 NameNode
13844 ResourceManager
5791 Jps
运行spark自带例子
./bin/run-example SparkPi
参考自http://spark.apache.org/docs/latest/quick-start.html
这个小例子用于统计输入文件中字母“a”和字母“b”的个数。网站上提供了Scala、Java、Python三种实现,这里就只做一下Scala的吧,这里需要安装SBT(我们使用 sbt 创建、测试、运行和提交作业,可以简单将SBT看做是Scala世界的Maven)。
由于Spark没有自带SBT,因此需要自己安装BST,Spark使用SBT工具编译程序,由于本文基于Ubuntu系统,所以使用sudo apt-get install sbt的方式安装
echo "deb http://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-get update
sudo apt-get install sbt
详细安装过程见 http://www.scala-sbt.org/release/tutorial/Installing-sbt-on-Linux.html
当然用户也可以自己下载源文件编译安装。
下面就来写这个简单的spark app吧!
mkdir ~/spark/myproject
cd ~/spark/myproject
在~/spark/myproject创建如下目录结构
./
simple.bst
src
src/main
src/main/scala/
src/main/scala/simpleApp.scala
其中simple.bst为
name := "Simple Project"
version := "1.4.1"
scalaVersion := "2.11.6"
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.4.1"
resolvers += "Akka Repository" at "http://repo.akka.io/releases/"
simpleApp.scala为
/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object SimpleApp {
def main(args: Array[String]) {
val logFile = "YOUR_SPARK_HOME/spark_home/README.md" // Should be some file on your system
val conf = new SparkConf().setAppName("Simple Application")
val sc = new SparkContext(conf)
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
}
}
由于本文使用hadoop的HDFS,因此YOUR_SPARK_HOME在这里指Spark在HDFS上的存放输入文件的目录,具体位置可以通过 hdfs dfs -ls 命令查看。
在运行例子前,需要将输入文件README.md上传到HDFS的文件夹下。
hdfs dfs -copyFromLocal README.md YOUR_SPARK_HOME
然后是编译
cd ~./spark/myproject
bst package
编译过程比较长,编译完后会看到
[success] Total time: 2 s, completed Jul 27, 2015 2:27:19 PM
运行
spark-submit --class "SimpleApp" --master local target/scala-2.11/simple-project_2.11-1.4.1.jar
会在一堆终端输入中看到执行结果
15/07/27 14:30:08 INFO scheduler.TaskSchedulerImpl: Removed TaskSet 1.0, whose tasks have all completed, from pool
Lines with a: 60, Lines with b: 29
15/07/27 14:30:08 INFO spark.SparkContext: Invoking stop() from shutdown hook
6) 停止Spark集群
cd ~./spark/spark/spark-2.11.6
./sbin/stop-all.sh
参考:
http://www.cnblogs.com/tec-vegetables/p/3780046.html