搭建分布式Hadoop(只有HDFS)集群,跨阿里云和腾讯云

又几个月没写过文章了,今天随便写一写吧。

由于实际需要需要研读HDFS的源码,最好的方法就是加一些日志看NameNode是怎么运行的,又经常在外面,所以就需要在公网上搭一个分布式的Hadoop(只有HDFS)集群,有两个DataNode节点即可。但实际情况是我有一个阿里云服务器,有一个腾讯云服务器。联想到Hadoop可以跨机架,跨机房进行搭建,想了想从原理上来讲的话,这样应该也是可行的,于是抱着试一试的心态开始搭建跨云服务器(机房)的Hadoop集群。

我的阿里云服务器的公网IP为a11.b11.c11.d11,内网IP为a12.b12.c12.d12;腾讯云的服务器的公网IP为a21.b21.c21.d21,内网IP为a22.b22.c22.d22。

以阿里云的服务器为主,跑一个NameNode和一个DataNode,腾讯云服务器跑一个DataNode(个人腾讯云服务器跑了太多服务了,且配置等方面也不太够)。

下面开始。

首先,安装并配置Java环境,这就不多说了,apt-get或者yum安装一下,然后改一下环境变量即可。我安装的是Java7,因为我用的Hadoop的版本是hadoop2.6.0-cdh5.10.0,听说Java8会有问题,但我没有实际试过;

然后,编辑/etc/hosts文件,将本系统的别名编辑上去,在阿里云服务器上编辑如下:

搭建分布式Hadoop(只有HDFS)集群,跨阿里云和腾讯云

在腾讯云服务器上编辑如下:

搭建分布式Hadoop(只有HDFS)集群,跨阿里云和腾讯云

然后,在两台服务器上通过 sudo adduser hadoop 命令添加hadoop用户,记住设置的密码,我设置的是一样的;

然后,设置ssh免密码登录(最开始我懒得设置了,每次启动集群和关闭集群均要输入密码,我设置的密码又很麻烦,输入密码输入到我怀疑人生)。首先输入ssh-****** -t rsa,一路回车即可,此时在用户的根目录生成了~/.ssh/id_rsa.pub 公钥,将其推送给集群中每台服务器即可。因为我的集群*有两台机器,命令为:ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop1;ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop2,成功后就可以ssh免密码登录了;

然后,记得关闭防火墙,ubuntu下的关闭防火墙的命令是 ufw disable;

然后就是安装hadoop集群了,修改$HADOOP_HOME/etc/hadoop/目录下的三个文件即可,集群中的所有服务器都要改,并且集群中的所有服务器的Hadoop的路径最好完全一致。这三个文件是:

core-site.xml

搭建分布式Hadoop(只有HDFS)集群,跨阿里云和腾讯云

hdfs-site.xml

搭建分布式Hadoop(只有HDFS)集群,跨阿里云和腾讯云

slaves:

搭建分布式Hadoop(只有HDFS)集群,跨阿里云和腾讯云

最后,在$HADOOP_HOME/sbin路径下,执行./start-dfs.sh即可。


贴一张NameNode网管显示的图:

搭建分布式Hadoop(只有HDFS)集群,跨阿里云和腾讯云


碰到的三个坑:

(1)启动时显示找不到$JAVA_HOME,这个时候在hadoop-env.sh文件中把$JAVA_HOME用绝对路径重新定义一下即可;

(2)启动时,DataNode无法启动,看日志显示DataNode的Cluster-ID和NameNode的Cluster-ID不匹配,此时找到hadoop文件目录下DataNode的VERSION文件,将它的Cluster-ID修改为和NameNode的Cluster-ID一致即可;

(3)启动时,NameNode无法启动,看日志显示文件系统的路径有问题,执行./hdfs namenode -format,重新启动集群。