1 概述
现在国内的资料很少,即使你看到了,资料也不是很全,每个人都为中国在这方面做点贡献,也是为了相互学习。作为学习Spark中的一个重要环节--搭建Spark集群,此次搭建环境使用了Docker1.7,Spark1.4-hadoop2.6,搭建的集群环境,操作系统为CentOS6.5,内存4G
2 升级Linux内核
具体的什么是Docker,以及Docker的基本原理等,我在这里就不在介绍了。
2.1 查看系统内核版本
# lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.5 (Final)
Release: 6.5
Codename: Final
# uname -a
Linux xxxxxxx 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
因为 Docker 推荐使用 3.8 以上内核,所以我们选择使用 YUM 方式来升级内核。
2.2 升级Linux内核版本
2.2.1
联网安装 (本部分参考
http://dockerpool.com/article/1415195109
)
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# yum --enablerepo=elrepo-kernel install kernel-lt -y
vi /etc/grub.conf
修改默认的启动内核,新安装的内核一般在第一个,这里把default = 1
改为 default = 0
就好了。
重启云主机,查看内核是否升级成功。
# uname -a
Linux xxxxxxx 3.10.59-1.el6.elrepo.x86_64 #1 SMP Thu Oct 30 23:46:31 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
注意:不知道怎么的使用的他们的办法行不通,升级的Linux内核版本还是2.6的,改为下载rpm包安装
2.2.2 手动安装
下载kernel-lt-3.10.86-1.el6.elrepo.x86_64.rpm,下载地址:
http://elrepo.reloumirrors.net/kernel/el6/x86_64/RPMS/kernel-lt-3.10.86-1.el6.elrepo.x86_64.rpm
rpm -ivh kernel-lt-3.10.86-1.el6.elrepo.x86_64.rpm
vi /etc/grub.conf
修改默认的启动内核,新安装的内核一般在第一个,这里把default = 1
改为 default = 0
就好了。
重启云主机,查看内核是否升级成功。
# uname -a
Linux xxxxxxx 3.10.86-1.el6.elrepo.x86_64 #1 SMP Thu Oct 30 23:46:31 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
3 安装与配置Docker(保持网络畅通)
3.1 安装
yum install docker-io
3.2 配置文件
# vi /etc/sysconfig/docker
other-args列更改为:other_args="--exec-driver=lxc --selinux-enabled"
3.3 启动Docker
service docker start
3.4 设置开机自动启动
chkconfig docker on
3.5 查询docker版本
docker version:查看docker的版本号,包括客户端、服务端、依赖的Go等
3.6 查询docker信息
docker info
不好了出现个这个问题(没法链接docker的守候进程):Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
那就按他说的做吧:docker -d
若是docker: relocation error: docker: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference
进行这个操作:yum upgrade device-mapper-libs
3.7 测试一下(docker的一些命令你需要知道一些哦)
# docker pull dl.dockerpool.com:5000/ubuntu:14.04
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
dl.dockerpool.com:5000/ubuntu latest 5506de2b643b 12 days ago 197.8 MB
启动一个容器看看:
docker run -ti ubuntu
4 搭建spark集群
4.1 pull spark镜像
docker pull sequenceiq/spark:1.4.0
这个过程很慢的,并且你的网速还要很好,要是你的网速不好的话,去我的网盘上拿吧
加载本地镜像:docker load
spark1.4.0.tar
4.2 创建镜像
docker build --rm -t sequenceiq/spark:1.4.0 .
运行时将Docker-hub上的那个Dockerfile下载下来,放到你运行该指令的文件目录下
下载地址: https://github.com/sequenceiq/docker-spark/blob/master/Dockerfile
4.3 启动并创建容器
创建一个master容器:docker run --name master -it -p 8088:8088 -p 8042:8042 -p 8085:8080 -p 4040:4040 -p 7077:7077 -p 2022:22 -v /data:/data -h master sequenceiq/spark:1.4.0 bash
说明:--name 表示创建的容器的名称,-it可以理解创建一个标准的临时终端,-p表示映射本地到容器的端口 -v 建立本地到容器的文件,就是让本地的data文件和容器上的文件共享,-h设置容器的机器名
创建三个worker容器(
在三个不同终端运行
):
docker run --name worker1 -it -h worker1 sequenceiq/spark:1.4.0 bash
docker run --name worker2 -it -h worker2 sequenceiq/spark:1.4.0 bash
docker run --name worker3 -it -h worker3 sequenceiq/spark:1.4.0 bash
四个容器现在已经建立成功了,相互ping一下,若是平不通的话,请关闭本地的防火墙: service iptables stop
5 spark集群配置文件
5.1 关闭每个容器上的hadoop集群
cd /usr/local/hadoop-2.6.0/sbin/
./stop-all.sh
5.2 配置每个容器上的hosts文件
vi /etc/hosts
172.17.0.2 master
172.17.0.3 worker1
172.17.0.4 worker2
172.17.0.5 worker3
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
5.2 配置每个容器上hadoop的slaves文件
vi /usr/local/hadoop-2.6.0/etc/hadoop/slaves
配置为
worker1
worker2
worker3
5.2 配置每个容器上core-site.xml
vi /usr/local/hadoop-2.6.0/etc/hadoop/core-site.xml
配置为(注意红色部分)
fs.defaultFS
hdfs://
master:9000
5.3 配置每个容器上spark的slaves文件
cd /usr/local/spark-1.4.0-bin-hadoop2.6/conf
cp slaves.template slaves
vi slaves
配置为
worker1
worker2
worker3
5.4 配置每个容器上Spark的spark-env.sh
cd /usr/local/spark-1.4.0-bin-hadoop2.6/conf/
cp spark-env.sh.template spark-env.sh
vi spark-env.sh
添加
export SPARK_MASTER_IP=master
export SPARK_WORKER_CORES=1
export SPARK_WORKER_INSTANCES=1
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_MEMORY=1g
export MASTER=spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT}
6 启动spark集群
6.1 在master上启动hadoop集群
cd /usr/local/hadoop-2.6.0/sbin/
#./start-all.sh
在master上可以查看jps
bash-4.1# jps
2441 NameNode
2611 SecondaryNameNode
2746 ResourceManager
3980 Jps
在worker上查看
bash-4.1# jps
1339 DataNode
1417 NodeManager
2290 Jps
6.2 在master上启动spark集群
cd /usr/local/spark-1.4.0-bin-hadoop2.6/sbin/
./start-all.sh
在master上查看
bash-4.1# jps
2441 NameNode
2611 SecondaryNameNode
2746 ResourceManager
3980 Jps
3392 Master
在每个worker上查看
bash-4.1# jps
1339 DataNode
1417 NodeManager
2290 Jps
1759 Worker
6.3 在webui上看看
7 总结
耐下心来学习,做一件事件。
没完,待续,下篇将介绍Spark编程的那些事儿。
用到的软件:
链接:
http://pan.baidu.com/s/1o6BuO3o 密码:zi9u
推荐学习:
Docker —— 从入门到实践:http://dockerpool.com/static/books/docker_practice/index.html
Docker的常用命令: http://www.open-open.com/lib/view/open1410568733492.html你