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现在的运行有如下几种模式:

  1. local模式, 分为local模式和local cluster模式,区别在于前者是在本地开启多线程;后者则是在本地生成多个worker的actor,并绑定127.100.0.*到worker的actor上,模拟集群的运行,目前这个模式在finish job之后,会存在worker节点关闭失败的bug;
  2. 集群模式: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