基本介绍
作为一个Big Data领域的小白,最近自己尝试搭建了一个简易的spark集群。因此打算写篇博客记录一下整个过程。但是担心把所有部分放在一篇文章中可能导致文章过长,因此打算写成两篇。在这篇文章中,我会详细地介绍spark集群搭建的第一部分,hadoop集群的搭建。
0.环境介绍
虽说是一个集群,但是我总共只使用了两台ubuntu虚拟机,其中一个作为主节点,另一个作为从节点。如果你想尝试使用更多的机器来搭建集群,也同样可以参考我的搭建过程,因为本质上差别不大。OK,下面我们正式进入hadoop集群的搭建过程。
1.通信确认
因为我们要搭建集群,那么首先就要确保集群中的机器可以进行正常通信,可以使用ping命令来测试是否能够与集群中的其他机器建立通信,以我的两台虚拟机为例(IP分别为192.168.56.9 & 192.168.56.11)
$ ping 192.168.56.11
$ ping 192.168.56.9
如果产生以下结果,表示可以进行通信。
2.修改主机名
为了更加方便确认集群中的各台机器(尤其是你的集群内机器数量很多时), 最好修改一下各台机器的主机名hostname。比如将主节点命名为master,将从节点命名为slave。
具体可以通过如下方式修改
$ sudo vim /etc/hostname
比如我的原始主机名叫做virtualbox-frank,将其修改为master。保存退出,重启机器,就会发现主机名已经成功修改。
同理对于从节点机器,将其修改为slave。
在下文的描述中,我会直接使用master来代表主节点,slave来代表从节点。
3.添加集群机器信息
接下来需要在集群中的每台机器上都配置相同的机器信息。通过打开 /etc/hosts 文件
$ sudo vim /etc/hosts
添加(或修改)如下配置。
127.0.0.1 localhost
192.168.56.9 master
192.168.56.11 slave
即集群中每台机器的ip以及hostname,因为我只有一台master和一个slave,因此配置如上。如果你有多台工作机器,你需要将所有机器的信息都写上(slave1,slave2,slave3,...)。
4.设置ssh免密登录
我们需要让每台机器都能实现ssh的免密登录。通过如下命令进行确认。
$ ssh localhost
执行上述命令,如果不需要输入密码即可登录,则测试通过。不然的话就需要使用ssh-keygen命令来生成公私钥对,并将公钥存入~/.ssh/authorized_keys文件中。如果对ssh生成公私钥对的具体方法不清楚的朋友,可以阅读我的这篇博客。
5.Master主机免密登录Slave集群
本质上就是实现从本地(Master)通过ssh免密登录所有远程机器(Slave)。命令如下
首先在master机器上,输入如下指令,将master的id_rsa.pub传递给slave机器。(假设上述生成公私钥对时使用的加密方式为rsa)
$ scp ~/.ssh/id_rsa.pub frank@slave:/home/frank/ #将frank改为你的用户名
然后切换到slave机器,输入如下指令,即将刚刚传到到根目录下的master主机的公钥信息添加到slave机器的authorized_keys文件中。
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
然后就可以在master机器上远程免密登录slave机器了。
如果你的多台机器的用户名相同,比如我的话,两台虚拟机的用户名都是frank,那么你在测试远程登录的时候,可以不写用户名,即直接使用如下命令即可成功登录。
$ ssh slave #ssh frank@slave 或者 ssh frank@192.168.56.11
不然的话你就需要加上用户名。或者你也可以在master的~/.ssh下添加一个config文件,然后写入如下内容。
Host master
user hujiahao #你的master机器的用户名
Host slave
user frank #你的slave机器的用户名
然后再执行上述命令,同样也可以完成在不输入slave用户名情况下,快速连接slave机器。
6.JDK安装
因为hadoop是基于java编写的,我们在安装hadoop之前,还需要先首先安装JDK。在ubuntu下,使用以下命令在master和slave上分别安装jdk。
$ sudo apt-get install default-jdk
打开.bashrc文件并添加如下语句。
export JAVA_HOME=/usr/lib/jvm/default-java
最后让环境变量生效。
$ source ~/.bashrc
7.安装Hadoop
接下来我们需要在集群的机器上安装hadoop。这里需要注意的是,因为我们需要对安装的hadoop进行集群的配置,为了避免不必要的重复,我们选择现在master机器上完成hadoop的安装以及配置,再将配置好的hadoop传送给slave节点即可。
这里,我选择使用的是hadoop2.7.3的版本。这里是下载地址。下载完成后将其解压到/usr/local目录下。
$ sudo tar -zxf ~/下载/hadoop-2.7.3.tar.gz -C /usr/local
然后进入该目录,修改文件夹的名字。
$ cd /usr/local/
$ sudo mv ./hadoop-2.7.3/ ./hadoop
修改文件权限。
$ sudo chown -R frank ./hadoop #将frank换成你的用户名
进行环境变量的配置,打开~/.bashrc文件,添加下面内容。
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
最后让环境变量生效。
$ source ~/.bashrc
8.hadoop文件配置
因为我们需要搭建的hadoop集群模式,因此需要对应地修改配置文件。具体的路径是
/hadoop/etc/hadoop/
包含的文件如下
首先我们需要修改的就是slaves文件,将所有的slave节点的主机名添加到该文件中,一行一个,我的话,就很简单,因为只有一个slave节点。
slave
接下来修改core-site.xml文件,以下是我的配置。
然后是hdfs-site.xml文件,以下是我的配置。
这里注意一下,dfs.replication 一般设为 3,但因为我只有一个 Slave 节点,所以 dfs.replication 的值还是设为1。
然后还需要修改mapred-site.xml文件。但是这个文件本身是没有的,需要先复制mapred-site.xml.template,然后将其重命名后打开,添加以下配置。
最后需要修改的是yarn-site.xml
到此为止,我们就完成了集群的基本配置。接下来我们就可以将完成配置的hadoop拷贝到slave节点上了。命令如下
$ cd /usr/local
$ tar -zcf ~/hadoop.master.tar.gz ./hadoop
如果你在运行集群模式前还运行了其他模式到hadoop,记得在压缩前将临时文件和日志清空。
$ rm -rf ./hadoop/tmp
$ rm -rf ./hadoop/logs/*
然后回到我们的根目录下,将压缩包传送到各个slave节点,因为我只有一个slave,因此执行如下。
$ scp ./hadoop.master.tar.gz slave:/home/frank
然后进入到我们的slave机器上,就会发现打包好的hadoop已经存在于我们的根目录下了。我们同样将其解压到/usr/local下
$ sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
$ sudo chown -R frank /usr/local/hadoop #将frank换成你的用户名
9.测试hadoop集群
接下来,我们来启动hadoop集群,执行如下命令。
$ cd /usr/local/hadoop
$ bin/hdfs namenode -format
$ sbin/start-all.sh
启动后我们使用jps命令来分别查看一下master和slave节点的情况。
首先是master节点。
然后是slave节点。
如图所示表示启动成功,任何一个node的缺失都意味着你的hadoop存在问题,你可以通过查看日志/hadoop/logs/来查看具体的错误原因。
最后我们关闭hadoop。
$ sbin/stop-all.sh
p.s.如果存在启动后datanode或者namenode缺失的情况,一种方法是先关闭进程,然后删除tmp文件夹(即core-site.xml中定义的临时文件存放路径),然后重新进行上面的格式化,最后再次启动。
ok,以上就是如何基于ubuntu构建简单hadoop集群的流程,下一篇文章我会介绍如何基于构建的hadoop集群来构建spark集群,感谢大家的阅读。
参考: