天天看点

使用Docker部署Spark集群使用Docker部署Spark集群

使用Docker部署Spark集群

  • 克隆包含启动脚本的git仓库
  • 启动Spark0.8.0集群并切换至Spark Shell环境
  • 不带参数运行部署脚本
  • *运行一些小的例子
  • 终止集群

克隆包含启动脚本的git仓库*

当然,在这之前你必须已经配置了Github的SSH密钥认证,如果没有配置,会提示Permission Denied。解决方法可以参照上一篇日志。

启动Spark0.8.0集群并切换至Spark Shell环境

运行完这行命令你就得到了这样一个Spark集群:* 包含两个woker节点;HDFS也已配好。在第一次运行的时候,Docker会自动地区全局仓库区取到容器镜像, 并且缓存到本地。*

不带参数运行部署脚本

不带参数运行部署脚本会输出命令行帮助信息:

$ sudo ./docker-scripts/deploy/deploy.sh
usage: ./docker-scripts/deploy/deploy.sh -i <image> [-w <#workers>] [-v <data_directory>] [-c]

  image:    spark or shark image from:
                 amplab/spark:0.7.3  amplab/spark:0.8.0
                 amplab/shark:0.7.0  amplab/shark:0.8.0
           

这个脚本根据给定的worker节点的数量,要么启动一个独立的Spark集群,要么启动一个独立的Shark集群。Hadoop HDFS服务也会被启动。因为服务依赖于适当配置的DNS, 所以一个容器会自动带着一个DNS转发器启动。所有的容器也能够使用预配置的RSA Key通过ssh访问到。

如果你想让你的容器访问主机的目录 – 譬如说向Spark里面导入一些数据 – 你可以直接接上-v选项就可以了。这个目录就会被挂载到Master和Worker容器的/data目录。

Spark和Shark Shell都是启动在各自独立的容器中。你可以使用-c选项区启动shell容器,也可以稍后attach上去。

那么,现在我们就启动含有两个worker的Spark0.8.0,并连接上Spark Shell:

然后,你就可看到类似下面的输出:

*** Starting Spark  ***
...
***********************************************************************
connect to spark via:       sudo docker run -i -t -dns  amplab/spark-shell: 

visit Spark WebUI at:       http://:/
visit Hadoop Namenode at:   http://:
***********************************************************************
           

运行一些小的例子

例如

scala> val textFile = sc.textFile("hdfs://master:9000/user/hdfs/test.txt")
scala> textFile.count()
scala> textFile.map({line => line}).collect()
#
           

终止集群

$ sudo docker-scripts/deploy/kill_all.sh spark
$ sudo docker-scripts/deploy/kill_all.sh nameserver
           

这两个命令会杀掉所有的Spark和nameserver容器。

继续阅读