使用虚拟机从小白开始搭建Spark集群

前言


此篇博文记录一个小白如何用虚拟机搭建一个集群的血泪史,用来体验Spark的分布式计算。
在搭建之前,先理清一些概念。

  • Spark有三种集群搭建方式。分别为
    1. 独立集群模式,即standalone模式
    2. 搭建在Hadoop生态圈的YARN之上
    3. 搭建在Mesos之上

此篇讲述的是第2种。
而第2种集群方式,是建立在第1种之上的。也就是说,搭建了第2钟,就可以同时使用第1、2种了。

  • YARN是什么?说白了它就是在操作系统以及分布式计算软件之间的一层软件,它负责资源的调度。比如,在集群里同时有Spark与Hadoop,两者同时发出任务(由不同的使用者)或者两者的任务有可能会同时存在于集群里,这个时候YARN就起了作用,它负责协调这两个任务如何进行。
  • Spark提交任务时,如果想让YARN来调度资源,那么就必须指定提交到YARN集群上。如果想使用本身的集群管理器调度,就要把任务提交到指定的URL上。

搭建集群


准备工作

首先,就只建立一台虚拟机出来。待配置好基本通用的配置信息后,我们再克隆出两台来,这样会方便许多。
我的系统采用的是Ubuntu14,虚拟机网络适配器选择桥接模式,手动配置IP,关闭防火墙。另外,系统用户名就叫hadoop。
先去各自官网下载软件。

  1. Hadoop,一般YARN被集成在这里面
  2. Spark,可以下载编译好了的基于对应Hadoop版本的版本
  3. JAVA,去Oracle下载,注意Hadoop所要求的JAVA版本
  4. Scala,因为Spark是用scala写的,可能会用到

环境准备

以下我都以~/software 为工作目录为例。

1.首先搭建JAVA环境。

将下载的安装包解压到一个自己指定的目录。
tar -zxvf jdk-8u101-linux-x64.tar.gz -C ~/software

然后修改环境变量文件 sudo vi /etc/profile ,在末尾添加:

export JAVA_HOME=/home/hadoop/software/jdk1.8.0_101
export JRE_HOME=/home/hadoop/software/jdk1.8.0_101/jre
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

保存关闭后,source /etc/profile,使修改生效。
然后可以验证JAVA是否生效,java -version
图片
像以上那样就是对的。如果结果是OpenJDK什么的,就要自己google下怎么替换JAVA成我们自己安装的这种。

2.搭建Scala环境。

过程跟JAVA差不多。
就是修改profile有点区别:

export SCALA_HOME=/home/hadoop/software/scala-2.11.8
export PATH=$PATH:$SCALA_HOME/bin

然后还是保存关闭后source一下,让它生效。
最后scala -version,看看版本。

3.修改计算机环境
  1. 首先要计划一下,这里使用1台master,2台slave的结构。
    我们搭建虚拟机集群,一般是在一台上把全部配置好了,然后再克隆出两台来,再去修改一小部分配置,集群就能够用的起来了。
  2. 在master节点上,为了方便,先把此台主机的名字改为master:sudo vi /etc/hostname,将里面的主机名字改为master。
  3. 然后修改计算机IP地址,修改为10.1.1.100
  4. 最后修改hosts文件:sudo vi /etc/hosts
10.1.1.100      master
10.1.1.101      slave1
10.1.1.102      slave2

这里要注意问题是,hosts文件里正常会存在一个localhost 及其 对应的IP地址,千万不要删除它,直接把以上三行信息给加到后边就行了,删除了localhost,Spark会找不到入口!

4.安装SSH服务
  1. 安装SSH。
    sudo apt-get install openssh-server
  2. SSH具体的配置在克隆出两台虚拟slave后再配置。

克隆主机

  1. 在配置完JAVA、Scala、hostname、hosts,并且安装SSH后,我们就算是搭建好最基本的所有集群里节点通用的配置了。
  2. 然后在VMware里,克隆出两台slave出来。这样,VM里就应该有master、slave1、slave2三台主机了。
  3. 克隆出的主机记得修改自己的hostname文件里主机名字以及本身IP地址(hosts文件不用修改了,因为是克隆的master的),跟hosts文件里的主机名、IP地址要对应。
  4. 修改完后,可以在每台主机里ping下其他主机,看看能不能连通。ping slave1ping slave2

配置master与slave

1 . 首先继续配置每台主机的SSH环境。刚才我们仅仅相当于在每台主机上安装了SSH,下面要配置成免密码登录模式,以免以后集群运算时,频繁提示输入密码。
在每台主机上都生成私钥和公钥。ssh-keygen -t rsa,一直按回车就行。
然后将slave1与slave2上的id_rsa.pub用scp命令发送给master,

scp ~/.ssh/id_rsa.pub hadoop@master:~/.ssh/id_rsa.pub.slave1
scp ~/.ssh/id_rsa.pub hadoop@master:~/.ssh/id_rsa.pub.slave2

在master上,将所有公钥加到用于认证的公钥文件authorized_keys中,
cat ~/.ssh/id_rsa.pub* >> ~/.ssh/authorized_keys
将公钥文件authorized_keys分发给每台slave,

scp ~/.ssh/authorized_keys hadoop@slave1:~/.ssh/
scp ~/.ssh/authorized_keys hadoop@slave2:~/.ssh/

最后在每台主机上,用SSH命令,检验下是否能免密码登录。SSH masterSSH slave1SSH slave2

2 . 在以上测试均成功地情况下,我们可以安装Spark、Hadoop了。这里采用的基本思想也是只在master上配置,待配置成功后,再用SSH将其分发到各个节点上,就能正常启动了。

安装hadoop

1 . 解压已经下载的hadoop到~/software/目录。
2 . 进入hadoop配置目录,~/software/hadoop-2.7.3/etc/hadoop,在此目录中,我们需要配置几个文件。

  • hadoop-env.sh,在里面设置JAVA_HOME。
# The java implementation to use.
export JAVA_HOME=/home/hadoop/software/jdk1.8.0_101
  • yarn-env.sh,在里面设置JAVA_HOME。
# some Java parameters
export JAVA_HOME=/home/hadoop/software/jdk1.8.0_101
  • slaves,在这个文件里面加入作为slave的IP地址或者对应的hosts映射名字。
slave1
slave2
  • core-site.xml,右键编辑。注意到底下的目录,如果软件内没有tmp,则自己创建。由于markdown语法问题,以下<符号后边都有一个空格,请自行删除。
< configuration>
    < property>
        < name>fs.defaultFSname>
        < value>hdfs://master:9000/value>
    < /property>
    < property>
         < name>hadoop.tmp.dirname>
         < value>file:/home/hadoop/software/hadoop-2.7.3/tmpvalue>
    < /property>
< /configuration>
  • hdfs-site.xml,右键编辑。注意到底下的目录,如果软件内没有/dfs/name以及/dfs/data,则自己创建。由于markdown语法问题,以下<符号后边都有一个空格,请自行删除。
< configuration>
    < property>
        < name>dfs.namenode.secondary.http-addressname>
        < value>master:9001value>
    < /property>
    < property>
        < name>dfs.namenode.name.dirname>
        < value>file:/home/hadoop/software/hadoop-2.7.3/dfs/namevalue>
    < /property>
    < property>
        < name>dfs.datanode.data.dirname>
        < value>file:/home/hadoop/software/hadoop-2.7.3/dfs/datavalue>
    < /property>
    < property>
        < name>dfs.replicationname>
        < value>3value>
    < /property>
< /configuration>
  • mapred-site.xml,右键编辑。由于markdown语法问题,以下<符号后边都有一个空格,请自行删除。
< configuration>
    < property>
        < name>mapreduce.framework.namename>
        < value>yarnvalue>
    < /property>
< /configuration>
  • yarn-site.xml,右键编辑。由于markdown语法问题,以下<符号后边都有一个空格,请自行删除。
< configuration>
    < property>
        < name>yarn.nodemanager.aux-servicesname>
        < value>mapreduce_shufflevalue>
    < /property>
    < property>
        < name>yarn.nodemanager.aux-services.mapreduce.shuffle.classname>
        < value>org.apache.hadoop.mapred.ShuffleHandlervalue>
    < /property>
    < property>
        < name>yarn.resourcemanager.addressname>
        < value>master:8032value>
    < /property>
    < property>
        < name>yarn.resourcemanager.scheduler.addressname>
        < value>master:8030value>
    < /property>
    < property>
        < name>yarn.resourcemanager.resource-tracker.addressname>
        < value>master:8035value>
    < /property>
    < property>
        < name>yarn.resourcemanager.admin.addressname>
        < value>master:8033value>
    < /property>
    < property>
        < name>yarn.resourcemanager.webapp.addressname>
        < value>master:8088value>
    < /property>
< /configuration>

3 . 最后就可以将配置好的hadoop-2.7.3文件夹分发给所有slave了。

scp -r ~/software/hadoop-2.7.3 hadoop@slave1:~/software/
scp -r ~/software/hadoop-2.7.3 hadoop@slave2:~/software/

4 . 启动hadoop。cd到hadoop主目录。然后先格式化namenode,然后再启动。

bin/hadoop namenode -format
sbin/start-all.sh

5 . 用jps命令查看hadoop进程。
在master上应该有:

3407 SecondaryNameNode
3218 NameNode
3552 ResourceManager
3910 Jps

在slave1与slave2上应该有:

2072 NodeManager
2213 Jps
1962 DataNode

并且,在master节点,浏览器输入 master:8088 能够访问hadoop管理界面,并看到slaves的存在。

安装Spark

1 . 解压已经下载的Spark到到~/software/目录。
2 . 进入到Spark配置目录,~/software/spark-2.0.0-bin-hadoop2.7/conf,在此目录下,可以看到很多配置文件。但是很多文件都是以template结尾的,这是因为spark给我们提供的模板配置文件,我们可以拷贝一份,然后将.template给去掉,变成真正的配置文件后再编辑。

  • spark-env.sh,这个文件里可以配置各种spark的运行环境。我们配置几个基本的,可以根据自己机器的实际情况进行配置。添加一下代码到末尾。
export SCALA_HOME=/home/hadoop/software/scala-2.11.8
export JAVA_HOME=/home/hadoop/software/jdk1.8.0_101
export HADOOP_HOME=/home/hadoop/software/hadoop-2.7.3
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
SPARK_MASTER_IP=master
SPARK_LOCAL_DIRS=/home/hadoop/software/spark-2.0.0-bin-hadoop2.7
SPARK_DRIVER_MEMORY=512M
  • slaves,在这个文件里把slaves的hosts里的映射名添加进去。
slave1
slave2

3 . 最后就可以将配置好的spark-2.0.0-bin-hadoop2.7文件夹分发给所有slave了。

scp -r ~/software/spark-2.0.0-bin-hadoop2.7 hadoop@slave1:~/software/
scp -r ~/software/spark-2.0.0-bin-hadoop2.7 hadoop@slave2:~/software/

4 . 启动Spark,cd到spark主目录,然后sbin/start-all.sh
5 . 如果启动成功,那么用jps命令可以看到:
在master节点上有7805 Master进程,
在slaves有3759 Worker进程。
同样的,在master节点,浏览器输入 master:8080 能够访问spark管理界面,并看到slaves的存在。

提交任务到集群


spark使用spark-submit 进行提交程序,这个文件接收各种参数。
例如,我们要提交一个任务,并且让YARN来调度资源,那么我们可以用以下命令:

./bin/spark-submit --master yarn pi.py

如果在没有安装YARN的集群上,可以使用spark自带的集群管理器,可以用以下命令:

./bin/spark-submit --master spark://master:7077 pi.py

你可能感兴趣的:(SPARK)