您的位置:首页 > 其它

spark的独立模式集群部署

2014-07-08 20:09 471 查看
spark有三种集群部署方式:

1、独立部署模式standalone,spark自身有一套完整的资源管理方式

2、架构于hadoop之上的spark集群

3、架构于mesos之上的spark集群

    尝试了下搭建第一种独立部署模式集群,将安装方式记录如下:

环境ubuntu 12.04 (两台),部署方式是和hadoop类似,先在一台机器上部署成功后直接将文件打包拷贝到其他机器上,这里假设现在A机器上部署,并且A为master,最后B为slave机器

    A和B均上创建用户spark

sudo useradd spark
    以后spark的目录在集群所有机器的/home/spark/spark下(第一个spark是用户名,第二个spark是spark文件目录名)

    保证A能无密码登陆到B上的spark用户,在ssh里面设置

这部分是如无特别说明均在master机器(A)上配置

0 首先保证A能无密码方式ssh至  localhost和B,具体方式参见:点击打开链接

   0.0 这里假设机器A的IP是192.168.1.131,机器B的IP地址是192.168.1.139,且机器A的hostname就是A,机器B的hostname是B

      在A上执行gedit /etc/hosts后,末尾添加192.168.1.139 B

      在B上执行gedit /etc/hosts后,末尾添加192.168.1.131 A

      这样可以使得A和B机器可以用过彼此的hostname访问,而不是一长串IP

   0.1 (机器A上:)在A机器上执行

ssh-keygen -t rsa
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
ssh localhost

   那么A可以实现无密码登陆localhost

  

  0.2 (机器B上:)在B机器上执行

ps -e|grep ssh
  如果出现:

  695 ?        00:00:00 sshd

 1754 ?        00:00:00 ssh-agent

   若没有sshd那么在B上执行

sudo apt-get install openssh-server
   在B上安装ssh服务端(ubuntu有可能默认只有agent端)

  

  0.3  (机器B上:)在B上执行:

ssh-keygen -t rsa
scp spark@A:~/.ssh/authorized_keys ~/.ssh
   第一句是为了保证在B上有.ssh目录

   第二句是将A的公钥拷贝到B上,从而实现A无密码访问B

  0.4(机器A上:)执行gedit ~/.ssh/config添加

user spark

   这里是为了A以默认用户spark无密码登陆B,其实这一步没有必要,因为A和B机器上都是在spark用户下操作的,那么机器A的saprk执行ssh B也是以spark用户登陆的

     (机器A上:) 在A上执行ssh B可以无密码登陆至spark@B则成功

1 (机器A、B上:)每台机器确保有java,一个简单的方式:

sudo apt-get install eclipse


2 (机器A上:)需要maven编译spark源码,下载maven点击打开链接,随便下载一个版本

    简单的方式:

sudo apt-get install maven


    复杂的方式:

wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.2.2/binaries/apache-maven-3.2.2-bin.tar.gz tar -zxvf apache-maven-3.2.2-bin.tar.gz
mv apache-maven-3.2.2-bin.tar.gz maven
sudo mv maven /usr/local
   然后gedit /etc/profile末尾添加如下:
#set maven environment
M2_HOME=/usr/local/maven
export MAVEN_OPTS="-Xms256m -Xmx512m"
export PATH=$M2_HOME/bin:$PATH
    (机器A上:)验证maven安装成功:

source /etc/profile
mvn -v
   出现类似语句:Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T21:51:42+08:00)

3  (机器A上:)下载spark,点击打开链接,注意不要下载带有hadoop之类字样的版本,而是source package比如spark-1.0.0.tgz

tar -zxvf spark-1.0.0.tgz
mv spark-1.0.0 spark
cd spark
sh make-distribution.sh
     (机器A上:)最后一步会编译spark源码,过程可能有点长,取决于网络和机器配置,我的用了19min,编译成功类似如下图(图来自网上):



4   (机器A上:)配置spark

  4.1  gedit ./conf/spark-env.sh在spark-env.sh末尾添加如下:

export SPARK_MASTER_IP=A
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}
     注意这里的SPARK_MASTER_IP我觉得还是设置为master机器的IP地址比较好,这里我假设master的hostname是A

                          SPARK_WORKER_INSTANCES表示slave机器的数目,这里只有B一台故设为1

   4.2 gedit ./conf/slaves添加B的hostname,这里B机器的hostname假设就为B故在文件中追加一个B即可。文件里原来有一个localhost如果你想要master同时也为worker机器那么可保留该行,否则可以删除

   

5  (机器A上:)验证master机器A能否单机启动spark

./sbin/start-master.sh
   启动成功类似如下图(图来自网上):



   (机器A上:)关闭master:

./sbin/stop-master.sh


 

集群部署:

     至此spark的master部署完成,此时还是单机版的,接下来部署集群

1  (机器A上:)在master机器A上打包刚才成功启动的spark文件,然后拷贝至slave机器B上

tar -zcvf spark.tgz spark
scp spark.tgz spark@B:/home/spark/
   #注意scp后面的spark@B那一块内容改为你自己在slave机器上的目标位置

2 (机器B上:)在slave机器上解压从master机器上拷贝spark.tgz

tar -zxvf spark.tgz


 

集群启动:

1  (机器A上:)在master机器上执行start-all.sh

./sbin/start-all.sh


2 通过jps命令查看集群启动情况,master机器上jps查看的master进程,slave机器上jps查看所有的worker进程

(机器A上:)spark-shell启动时就启动集群,在conf/spark-env.sh下添加

export SPARK_MASTER_IP=192.168.1.171
export SPARK_MASTER_PORT=7077
export MASTER=spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT}
   这里这里将192.168.1.171替换master机器的IP地址

主要参考:

点击打开链接http://mbonaci.github.io/mbo-spark/

点击打开链接http://database.51cto.com/art/201404/435674.htm

点击打开链接http://www.oschina.net/translate/spark-standalone?cmp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: