1. Spark项目介绍
Spark是berkerly大学发起的一个开源项目,全部代码用scala编写,项目发起的目的是为了解决hadoop在处理迭代式计算模式上的不足;总的来说,MR的计算模式适合流式计算,但对于需要大量迭代计算的机器学习来说,hadoop的短板就很明显了,曾经用hadoop实现过k-means的算法,计算效率实在不敢恭维,大量的时间消耗在IO上了。Spark看到了这一点,通过将数据cache在内存里面,将数据和计算绑定的方式(这一点充分利用了scala这门语言的特性,比如闭包),可以达到快速迭代计算的效果。另外Spark的作者还设计了一种RDD的数据结构,将job切分为stage,stage之间有dependence,这样这个Job就是一个DAG;如果某一个stage失败了,调度中心会根据dependence重新计算改stage,这样确保了集群的容错性。附:Spark项目的地址:https://github.com/mesos/spark。
Spark现在的运行有如下几种模式:
- local模式, 分为local模式和local cluster模式,区别在于前者是在本地开启多线程;后者则是在本地生成多个worker的actor,并绑定127.100.0.*到worker的actor上,模拟集群的运行,目前这个模式在finish job之后,会存在worker节点关闭失败的bug;
- 集群模式:mesos和standalone模式。mesos模式是指Spark需要运行在基于mesos的调度平台上,Job会提交到mesos平台,由mesos进行Job的调度;standalone模式,是Spark会独立启动一个master节点,改节点负责对集群中的workers节点的监控,以及提交到集群上的Jobs的调度;
该系列主要针对standalone模式进行简单的分析。
2. Spark的安装
scala项目的安装目前最好的管理工具是sbt,不过介于sbt语法比较晦涩,笔者推荐maven的管理和安装方式,目前的0.7.0版本已经支持通过maven管理整个项目了;安装前需要安装scala,maven;
下载安装:
1. git clone https://github.com/mesos/spark
2. mvn -Phadoop1 -DdisplayCmd=true install
3. Spark的启动
本文的master/work节点,配置在同一台机器上:
1. 首先需要确保ssh localhost能够实现无密码访问,配置方式如下,其中权限的设置很必要:
ssh-keygen -t rsa
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
2. 在$SPARK_HOME/conf目录下,新建slavers文件,localhost加入,另外编辑spark-env.sh添加
export SPARK_MASTER_IP=localhost
注:如果localhost不行的话,改为本地ip试试;
$SPARK_HOME/bin目录下有spark的启动脚本;
启动方式如下:
bin/start-all.sh
启动成功后,locahost:8080可以看到类似于hadoop的jobtracker的webui页面:
4. 运行样例
在$SPARK_HOME目录,执行如下命令:
./run spark.examples.SparkPi spark://localhost:7077 2
OK的话,就能看到运行日志,并且在webui页面可以看到Job的运行信息。
|