一、概述
对于想学习spark集群搭建及应用的人来说,专门买多台物理主机往往成本太高,其实我们只需要利用虚拟机(我用的是VMWare)搭建多台虚拟主机即可。在学习过程中,在网上搜了各种资料,参考了很多优秀的博客,发现在虚拟机上搭建spark集群主要有两种方法。第一种是充分利用VMWare的虚拟机克隆功能,只需要配置好一台主机,直接克隆生成其他主机并修改少量配置即可。第二种与在实际物理主机上部署类似,该方法可以直接应用到实际部署中。首先创建多台新的虚拟机,然后在每台主机上分别进行配置。当然,该方法也不是每一台机器都重新配置,下面将会具体讲到,对于hadoop和spark安装文件,只需要在一台机器上配置好然后复制到其他主机即可。为了让这篇文章更具通用性,我们以介绍第二种搭建方法为主线,毕竟实际的集群是布置在物理主机上的。对于想在虚拟机上快速搭建spark集群的读者,我们也会在叙述过程中提到克隆虚拟机后需要修改的地方。另外,由于spark需要用到hadoop的文件管理系统HDFS和任务调度系统YARN,所以在搭建spark之前需要先搭建好hadoop。
下面的叙述将会以西面的思路展开。在介绍集群搭建之前,分别介绍hadoop和spark单机搭建方法,因为上面提到的两种方法的单机搭建与配置方法是相同的。介绍完单机搭建及配置方法,我们将会介绍如何将单机的配置应用到集群里面。
下面是本文用到的各个软件的版本:
虚拟机:VMWare
操作系统:Ubuntu-14.04.1-desktop-amd64
Hadoop版本:hadoop-2.7.2
Spark版本:spark-1.6.1-bin-without-hadoop
为了避免权限问题,建议下面下载的所有文件都放在home目录下,比如~/spark。这里就是在home目录下新建一个spark目录,下面的所有文件都放在里面。实际上下面提到的所有软件都不需要安装,直接在官网上下载安装包并解压就行了。
二、单机hadoop搭建
1、准备工作
在正式搭建hadoop之前,需要对系统及环境进行一些配置,主要有以下几点,命令详细解释参考[1]:
(1)创建hadoop用户。一般情况下,我们安装Ubuntu时都不会直接用hadoop作为用户名。为了方便后面搭建集群,我们需要重新创建一个叫做hadoop的用户。另外,在Ubuntu终端黏贴命令需要用ctrl+shift+v。完成以下命令后,注销当前用户,进入hadoop用户后再进行之后的操作。
命令:
sudouseradd-mhadoop-s/bin/bash//添加hadoop用户
sudopasswdhadoop//修改hadoop用户密码,一般也用hadoop就行了
sudoadduserhadoopsudo//为hadoop用户增加管理员权限,防止之后产生权限问题
(2)更新apt。这一步不是必须的,做这一步的目的是更新所有的依赖软件,以防后面某些软件安装不成功。如果所有主机Ubuntu的软件都是最新的,就不需要这一步了。
命令:
sudoapt-getupdate
(3)安装Java环境。由于hadoop依赖于Java运行环境,所以在安装hadoop之前,需要先安装Java环境JDK。在官网下载最新版Java,并解压到~/spark目录,解压后的Java文件夹可以直接更名为java。
命令:
sudotar-zxvfdownload.gz//download就是你下载的Java安装包名字,tar是解压命令
sudomv./download./java//将原来的文件夹名字修改为java
sudogedit/etc/profile//修改环境变量,需要修改的东西比较多,可以参考[5]
2、安装hadoop
Hadoop的安装非常简单,只需要在网上下载相应的编译好的hadoop包,解压到~/spark文件夹就大功告成了。当然,如果有时间可以试一试下载源码自己编译,方法参考[3]。
命令:
sudotar-zxvfdownload.gz//download就是你下载的hadoop安装包名字,tar是解压命令
sudomv./download./hadoop//将原来的文件夹名字修改为hadoop
我们发现,打开hadoop文件夹以后,里面有很多子文件夹,下面介绍几个重要的文件夹及其作用,因为之后的hadoop配置和运行都需要用到。
(1)./etc/hadoop:这个文件夹主要存放hadoop的配置文件。hadoop的运行模式都是通过改变这些配置文件来实现的。Hadoop配置文件一般以.xml为后缀,每一条配置都是以声明property的name和value来实现的。具体的配置方法需要参考hadoop官方手册。
(2)./bin:这个文件夹主要存放一些可执行文件。是hadoop功能实现的主要载体,可以看成是一个一个小的应用程序。
(3)./sbin:这个文件夹主要存放一些批处理文件。主要用于实现一些相对复杂的任务,比如开启和关闭namenode和datanode守护程序,开启和关闭yarn等。
3、配置hadoop
用以下命令进入hadoop配置文件夹。
命令:
sudocd~/spark/hadoop/etc/hadoop//进入hadoop配置文件夹
Hadoop的配置主要有以下几个步骤(具体配置参数参考[5]):
(1)在hadoop-env.sh中配置JAVA_HOME
(2)在yarn-env.sh中配置JAVA_HOME
(3)在slaves中配置slave节点的ip或者host
(4)修改core-site.xml
(5)修改hdfs-site.xml
(6)修改mapred-site.xml
(7)修改yarn-site.xml
(8)格式化namenode
三、单机spark搭建
1、准备工作
(1)安装好hadoop。这一步上面已经做好了。
(2)安装Scala。Scala是spark的主要编程语言,所以在搭建安装spark之前需要安装该语言环境。在官网下载最新Scala安装包然后解压。
命令:
sudotar-zxvfdownload.tgz
sudomv./download./scala//将原来的文件夹名字修改为scala
sudogedit/etc/profile//修改环境变量,需要修改的东西比较多,可以参考[5]
2、安装spark
跟hadoop一样,spark的安装也非常简单,也是在网上下载相应的编译好的spark包,解压到~/spark就行了。
命令:
sudotar-zxvfdownload.gz
sudomv./download./spark//将原来的文件夹名字修改为spark
3、配置spark
用以下命令进入spark配置文件夹。
命令:
sudocd~/spark/spark/conf//进入spark配置文件夹
spark配置文件放在~/spark/spark/conf这个文件夹中,这里我们只需要配置两个文件就可以了(具体配置参数参考[5])。
(1)配置spark-env.sh文件
(2)在slaves中配置slave节点的ip或者host
到此为止,单机spark就安装并配置完成了,接下来将会介绍集群搭建方法。
四、集群搭建
如果想在虚拟机上快速搭建spark集群,先跳到本章的第三步,也就是建立ssh无密码登陆环境,设置好一台机器的ssh环境后直接克隆其他虚拟机即可。如果想按第二种方法搭建集群,只需要按步骤设置即可。
1、修改机器名。克隆完虚拟机也需要对克隆后的每一台虚拟机进行这一步操作,否则所以主机的机器名都是一样的。
命令:
sudogedit/etc/hostname//对每一台电脑用gedit打开主机名文件,修改成不同的机器名,一般集群主机取名master,从机取名slave1,slave2...修改完机器名必须重启!!!否则执行其他命令时会报错。
2、设置host映射。克隆完虚拟机也需要对克隆后的每一台虚拟机进行这一步操作。
命令:
sudogedit/etc/hosts//打开hosts文件
Host文件本质上是一个IP地址与机器名对应关系的文件,跟windows的host文件差不多,其格式一般如下所示:
192.168.86.128master
192.168.86.132slave1
192.168.86.133slave1
前面是每台机器的IP地址,后面是机器名。在Linux下查看本机IP地址一般用ifconfig命令。需要注意的是,有些博客说虚拟机需要设置桥接连接方式,但经过我的测试,用NAT模式也是可以的,这样就可以免去使用路由器的麻烦。所以为了方便部署,建议采用NAT模式。
3、建立ssh无密码登陆环境
安装ssh,并配置SSH为无密码登录。SSH是一个远程登录功能,比传统的Telnet安全。为了之后搭建的集群相互访问时不需要反复输密码,我们需要配置SSH为无密码登录。第一种搭建方法和第二种搭建方法有点不太一样,下面分别介绍。
对于第一种搭建方法,在克隆前的主机执行下面命令即可。
命令:
sudoapt-getinstallopenssh-server//安装SSHserver
cd~/.ssh///打开.ssh文件
ssh-keygen-trsa//生成秘钥,一路回车
cat./id_rsa.pub>>./authorized_keys//将秘钥加入授权
对于第二种搭建方法,稍微复杂一点。其基本步骤跟第一种方法差不多,只不过需要多重复几次。每一台主机都需要先安装sshserver,然后各自生成自己的秘钥,所有slave把自己的秘钥全部传给master,master把所有秘钥都加入授权文件authorized_keys,最后把授权文件authorized_keys分发给所有slave。具体可以参考[5]。
4、把master上配置好的hadoop和spark分发到各个slave节点。注意,如果是使用克隆虚拟机的方法,可以直接忽略这一步。
命令:
scp-r~/spark/hadoophadoop@slave1:~/spark///这个命令都是在master上执行的,把master上配置好的spark安装文件分发给每一个slave,hadoop@slave1代表slave1上的hadoop用户。事实上,这种方法是通过网络的方式传输文件。如果在实际部署中,所有机器都在一个地方,那么用U盘拷贝可能速度会快一些。如果在VMWare上实现那就更容易了,从一台机器复制粘贴到另一台机器就行了,前提是安装了VMTools。
scp-r~/spark/sparkhadoop@slave1:~/spark///功能同上。
5、验证安装是否成功
命令:
~/spark/hadoop/sbin/start-dfs.sh//启动hadoop文件管理系统HDFS
~/spark/hadoop/sbin/start-yarn.sh//启动hadoop任务管理器YARN
~/spark/spark/sbin/start-all.sh//启动spark
以上命令都是在master上执行的,在每一台机器上通过下面命令查看启动的进程
jps//查看进程
如果集群安装成功,在master上将会有下面几个进程:
7949Jps
7328SecondaryNameNode
7805Master
7137NameNode
7475ResourceManager
在slave上将会有下面几个进程:
3132DataNode
3759Worker
3858Jps
3231NodeManager
注意,如果集群设置成功,master能直接启动slave上的进程,不需要在slave上进行任何操作了
5、启动集群
Sparkshell是spark自带的编译环境。如果集群安装成功,以后每次想要启动spark编译环境sparkshell时,只需要依次输入以下命令。
~/spark/hadoop/sbin/start-dfs.sh//启动hadoop文件管理系统HDFS
~/spark/hadoop/sbin/start-yarn.sh//启动hadoop任务管理器YARN
~/spark/spark/sbin/start-all.sh//启动spark
~/spark/spark/bin/spark-shell//启动sparkshell
启动完,接下来就可以进行scala编程了。
对于想学习spark集群搭建及应用的人来说,专门买多台物理主机往往成本太高,其实我们只需要利用虚拟机(我用的是VMWare)搭建多台虚拟主机即可。在学习过程中,在网上搜了各种资料,参考了很多优秀的博客,发现在虚拟机上搭建spark集群主要有两种方法。第一种是充分利用VMWare的虚拟机克隆功能,只需要配置好一台主机,直接克隆生成其他主机并修改少量配置即可。第二种与在实际物理主机上部署类似,该方法可以直接应用到实际部署中。首先创建多台新的虚拟机,然后在每台主机上分别进行配置。当然,该方法也不是每一台机器都重新配置,下面将会具体讲到,对于hadoop和spark安装文件,只需要在一台机器上配置好然后复制到其他主机即可。为了让这篇文章更具通用性,我们以介绍第二种搭建方法为主线,毕竟实际的集群是布置在物理主机上的。对于想在虚拟机上快速搭建spark集群的读者,我们也会在叙述过程中提到克隆虚拟机后需要修改的地方。另外,由于spark需要用到hadoop的文件管理系统HDFS和任务调度系统YARN,所以在搭建spark之前需要先搭建好hadoop。
下面的叙述将会以西面的思路展开。在介绍集群搭建之前,分别介绍hadoop和spark单机搭建方法,因为上面提到的两种方法的单机搭建与配置方法是相同的。介绍完单机搭建及配置方法,我们将会介绍如何将单机的配置应用到集群里面。
下面是本文用到的各个软件的版本:
虚拟机:VMWare
操作系统:Ubuntu-14.04.1-desktop-amd64
Hadoop版本:hadoop-2.7.2
Spark版本:spark-1.6.1-bin-without-hadoop
为了避免权限问题,建议下面下载的所有文件都放在home目录下,比如~/spark。这里就是在home目录下新建一个spark目录,下面的所有文件都放在里面。实际上下面提到的所有软件都不需要安装,直接在官网上下载安装包并解压就行了。
二、单机hadoop搭建
1、准备工作
在正式搭建hadoop之前,需要对系统及环境进行一些配置,主要有以下几点,命令详细解释参考[1]:
(1)创建hadoop用户。一般情况下,我们安装Ubuntu时都不会直接用hadoop作为用户名。为了方便后面搭建集群,我们需要重新创建一个叫做hadoop的用户。另外,在Ubuntu终端黏贴命令需要用ctrl+shift+v。完成以下命令后,注销当前用户,进入hadoop用户后再进行之后的操作。
命令:
sudouseradd-mhadoop-s/bin/bash//添加hadoop用户
sudopasswdhadoop//修改hadoop用户密码,一般也用hadoop就行了
sudoadduserhadoopsudo//为hadoop用户增加管理员权限,防止之后产生权限问题
(2)更新apt。这一步不是必须的,做这一步的目的是更新所有的依赖软件,以防后面某些软件安装不成功。如果所有主机Ubuntu的软件都是最新的,就不需要这一步了。
命令:
sudoapt-getupdate
(3)安装Java环境。由于hadoop依赖于Java运行环境,所以在安装hadoop之前,需要先安装Java环境JDK。在官网下载最新版Java,并解压到~/spark目录,解压后的Java文件夹可以直接更名为java。
命令:
sudotar-zxvfdownload.gz//download就是你下载的Java安装包名字,tar是解压命令
sudomv./download./java//将原来的文件夹名字修改为java
sudogedit/etc/profile//修改环境变量,需要修改的东西比较多,可以参考[5]
2、安装hadoop
Hadoop的安装非常简单,只需要在网上下载相应的编译好的hadoop包,解压到~/spark文件夹就大功告成了。当然,如果有时间可以试一试下载源码自己编译,方法参考[3]。
命令:
sudotar-zxvfdownload.gz//download就是你下载的hadoop安装包名字,tar是解压命令
sudomv./download./hadoop//将原来的文件夹名字修改为hadoop
我们发现,打开hadoop文件夹以后,里面有很多子文件夹,下面介绍几个重要的文件夹及其作用,因为之后的hadoop配置和运行都需要用到。
(1)./etc/hadoop:这个文件夹主要存放hadoop的配置文件。hadoop的运行模式都是通过改变这些配置文件来实现的。Hadoop配置文件一般以.xml为后缀,每一条配置都是以声明property的name和value来实现的。具体的配置方法需要参考hadoop官方手册。
(2)./bin:这个文件夹主要存放一些可执行文件。是hadoop功能实现的主要载体,可以看成是一个一个小的应用程序。
(3)./sbin:这个文件夹主要存放一些批处理文件。主要用于实现一些相对复杂的任务,比如开启和关闭namenode和datanode守护程序,开启和关闭yarn等。
3、配置hadoop
用以下命令进入hadoop配置文件夹。
命令:
sudocd~/spark/hadoop/etc/hadoop//进入hadoop配置文件夹
Hadoop的配置主要有以下几个步骤(具体配置参数参考[5]):
(1)在hadoop-env.sh中配置JAVA_HOME
(2)在yarn-env.sh中配置JAVA_HOME
(3)在slaves中配置slave节点的ip或者host
(4)修改core-site.xml
(5)修改hdfs-site.xml
(6)修改mapred-site.xml
(7)修改yarn-site.xml
(8)格式化namenode
三、单机spark搭建
1、准备工作
(1)安装好hadoop。这一步上面已经做好了。
(2)安装Scala。Scala是spark的主要编程语言,所以在搭建安装spark之前需要安装该语言环境。在官网下载最新Scala安装包然后解压。
命令:
sudotar-zxvfdownload.tgz
sudomv./download./scala//将原来的文件夹名字修改为scala
sudogedit/etc/profile//修改环境变量,需要修改的东西比较多,可以参考[5]
2、安装spark
跟hadoop一样,spark的安装也非常简单,也是在网上下载相应的编译好的spark包,解压到~/spark就行了。
命令:
sudotar-zxvfdownload.gz
sudomv./download./spark//将原来的文件夹名字修改为spark
3、配置spark
用以下命令进入spark配置文件夹。
命令:
sudocd~/spark/spark/conf//进入spark配置文件夹
spark配置文件放在~/spark/spark/conf这个文件夹中,这里我们只需要配置两个文件就可以了(具体配置参数参考[5])。
(1)配置spark-env.sh文件
(2)在slaves中配置slave节点的ip或者host
到此为止,单机spark就安装并配置完成了,接下来将会介绍集群搭建方法。
四、集群搭建
如果想在虚拟机上快速搭建spark集群,先跳到本章的第三步,也就是建立ssh无密码登陆环境,设置好一台机器的ssh环境后直接克隆其他虚拟机即可。如果想按第二种方法搭建集群,只需要按步骤设置即可。
1、修改机器名。克隆完虚拟机也需要对克隆后的每一台虚拟机进行这一步操作,否则所以主机的机器名都是一样的。
命令:
sudogedit/etc/hostname//对每一台电脑用gedit打开主机名文件,修改成不同的机器名,一般集群主机取名master,从机取名slave1,slave2...修改完机器名必须重启!!!否则执行其他命令时会报错。
2、设置host映射。克隆完虚拟机也需要对克隆后的每一台虚拟机进行这一步操作。
命令:
sudogedit/etc/hosts//打开hosts文件
Host文件本质上是一个IP地址与机器名对应关系的文件,跟windows的host文件差不多,其格式一般如下所示:
192.168.86.128master
192.168.86.132slave1
192.168.86.133slave1
前面是每台机器的IP地址,后面是机器名。在Linux下查看本机IP地址一般用ifconfig命令。需要注意的是,有些博客说虚拟机需要设置桥接连接方式,但经过我的测试,用NAT模式也是可以的,这样就可以免去使用路由器的麻烦。所以为了方便部署,建议采用NAT模式。
3、建立ssh无密码登陆环境
安装ssh,并配置SSH为无密码登录。SSH是一个远程登录功能,比传统的Telnet安全。为了之后搭建的集群相互访问时不需要反复输密码,我们需要配置SSH为无密码登录。第一种搭建方法和第二种搭建方法有点不太一样,下面分别介绍。
对于第一种搭建方法,在克隆前的主机执行下面命令即可。
命令:
sudoapt-getinstallopenssh-server//安装SSHserver
cd~/.ssh///打开.ssh文件
ssh-keygen-trsa//生成秘钥,一路回车
cat./id_rsa.pub>>./authorized_keys//将秘钥加入授权
对于第二种搭建方法,稍微复杂一点。其基本步骤跟第一种方法差不多,只不过需要多重复几次。每一台主机都需要先安装sshserver,然后各自生成自己的秘钥,所有slave把自己的秘钥全部传给master,master把所有秘钥都加入授权文件authorized_keys,最后把授权文件authorized_keys分发给所有slave。具体可以参考[5]。
4、把master上配置好的hadoop和spark分发到各个slave节点。注意,如果是使用克隆虚拟机的方法,可以直接忽略这一步。
命令:
scp-r~/spark/hadoophadoop@slave1:~/spark///这个命令都是在master上执行的,把master上配置好的spark安装文件分发给每一个slave,hadoop@slave1代表slave1上的hadoop用户。事实上,这种方法是通过网络的方式传输文件。如果在实际部署中,所有机器都在一个地方,那么用U盘拷贝可能速度会快一些。如果在VMWare上实现那就更容易了,从一台机器复制粘贴到另一台机器就行了,前提是安装了VMTools。
scp-r~/spark/sparkhadoop@slave1:~/spark///功能同上。
5、验证安装是否成功
命令:
~/spark/hadoop/sbin/start-dfs.sh//启动hadoop文件管理系统HDFS
~/spark/hadoop/sbin/start-yarn.sh//启动hadoop任务管理器YARN
~/spark/spark/sbin/start-all.sh//启动spark
以上命令都是在master上执行的,在每一台机器上通过下面命令查看启动的进程
jps//查看进程
如果集群安装成功,在master上将会有下面几个进程:
7949Jps
7328SecondaryNameNode
7805Master
7137NameNode
7475ResourceManager
在slave上将会有下面几个进程:
3132DataNode
3759Worker
3858Jps
3231NodeManager
注意,如果集群设置成功,master能直接启动slave上的进程,不需要在slave上进行任何操作了
5、启动集群
Sparkshell是spark自带的编译环境。如果集群安装成功,以后每次想要启动spark编译环境sparkshell时,只需要依次输入以下命令。
~/spark/hadoop/sbin/start-dfs.sh//启动hadoop文件管理系统HDFS
~/spark/hadoop/sbin/start-yarn.sh//启动hadoop任务管理器YARN
~/spark/spark/sbin/start-all.sh//启动spark
~/spark/spark/bin/spark-shell//启动sparkshell
启动完,接下来就可以进行scala编程了。