Spark 的初步尝试

参加完本月初在北京举办的大数据技术会议,确实感觉到在未来的一段时间里,Yarn作为当前比较热门的分布式资源管理平台,正在吸引着越来越的全世界的developper 为 hadoop2.0 开源社区做出更多的contribution。除去原生态的mapreduce计算模型,Yarn现在正致力于把当前比较热门的一些分布式计算模型也集成到yarn这个平台上来,比如像storm  spark MPI Tez 等等,最近在工作之余, 开始花点精力在spark这个伯克利大学主导的开源项目上。看了点官方文档,spark的部署方式主要分为两种。

一种是基于cluster  manager的模式,还有一种是独立模式 standalone模式。 

1.在基于cluster manager的模式下,spark 利用yarn或者mesos资源管理平台来管理job的资源分配等等,就像mapreduce 作为一种yarn下的application 来执行。当前比较成熟的版本是  在hadoop2.2.0平台下 spark 0.8.1 版本能够比较好的融合在yarn下。

2.在独立模式standalone模式下, spark自身来完成计算资源的管理,  有点类似于hadoop1.0时代,有mapreduce自身的jobtracker来完成资源的管理。


由于公司的yarn版本 和当前的spark版本似乎还有点点问题,还没解决, 于是我在standalone模式下进行spark的部署,下面是相关的部署文档介绍,比较简单:

spark的内核是基于scala语言开发的 就像hadoop是基于java,需要我们在集群的每台机器上安装scala 。


1. Spark 0.8.0 依赖 Scala 2.9.3, 我们必须要安装Scala 2.9.3.

下载 scala-2.9.3.tgz 并 保存到home目录.

解压并安装:

$ tar -zxf scala-2.9.3.tgz
$ sudo mv scala-2.9.3 /usr/lib
$ sudo vim /etc/profile
# add the following lines at the end
export SCALA_HOME=/usr/lib/scala-2.9.3
export PATH=$PATH:$SCALA_HOME/bin
# save and exit vim
#make the bash profile take effect immediately
source /etc/profile
# test
$ scala -version

2. 下载预编译好的Spark, spark-0.8.0-incubating-bin-hadoop1.tgz.

2.1 解压

$ tar -zxf spark-0.8.0-incubating-bin-hadoop1.tgz.tgz
2.2 路径配置

2.3 在 in conf/spark-env.sh 中设置SCALA_HOME

$ cd ~/spark-0.8.0/conf
$ mv spark-env.sh.template spark-env.sh
$ vim spark-env.sh
# add the following line
export SCALA_HOME=/usr/lib/scala-2.9.3
# save and exit

2.4同时类似于hadoop要配置slaves一样,spark也需要在conf/slaves, 添加Spark worker的hostname, 一行一个。

$ vim slaves
worker1
worker2
# save and exit

2.5(可选)设置 SPARK_HOME环境变量,并将SPARK_HOME/bin加入PATH

$ vim ~/.bash_profile
# add the following lines at the end
export SPARK_HOME=$HOME/spark-0.8.0
export PATH=$PATH:$SPARK_HOME/bin
# save and exit vim
#make the bash profile take effect immediately
$ source /etc/profile

2.6 master上的这个文件件已经配置好了,参照hadoop的安装,然后把它拷贝到所有的worker即可。注意,三台机器spark所在目录必须一致,因为master会登陆到worker上执行命令,master认为worker的spark路径与自己一样。

$ cd
$ scp -r spark-0.8.0-incubating-bin-cdh4 worker1:~
$ scp -r spark-0.8.0-incubating-bin-cdh4 worker2:~

3 在master上执行,启动spark集群

$ cd ~/spark-0.8.0
$ bin/start-all.sh
浏览master的web UI(默认http://localhost:8080). 这是你应该可以看到所有的word节点,以及他们的CPU个数和内存等信息
4  测试:


运行SparkPi, 在集群上跑任务,不在本地跑

$ cd ~/spark-0.8.0
$ ./run-example org.apache.spark.examples.SparkPi spark://master:7077
其中 master 为主节点的服务器名

运行 SparkLR

#Logistic Regression
#./run-example org.apache.spark.examples.SparkLR spark://master:7077

运行 SparkKMeans

#kmeans
$ ./run-example org.apache.spark.examples.SparkKMeans spark://master:7077 ./kmeans_data.txt 2 1

测试过程中的问题:
连接master(比如:worker,spark_shell等)报错


13/12/03 14:27:58 ERROR NettyRemoteTransport(null): dropping message RegisterApplication(ApplicationDescription(PageRank)) for non-local recipient akka://[email protected]:7077/user/Master at akka://[email protected]:7077 local is akka://[email protected]:7077 
13/12/03 14:27:58 ERROR NettyRemoteTransport(null): dropping message DaemonMsgWatch(Actor[akka://[email protected]:58493/user/$a],Actor[akka://[email protected]:7077/user/Master]) for non-local recipient akka://[email protected]:7077/remote at akka://[email protected]:7077 local is akka://[email protected]:7077 
需要使用域名连接(host如果直接用IP 则会报错),改成

./run-example org.apache.spark.examples.SparkPageRank spark://master:7077 /home/xx/data/pagerank_data.txt 100

你可能感兴趣的:(Spark 的初步尝试)