在虚拟机上搭建Hadoop+HBase集群

下图配置的虚拟机*3,来搭建集群

Snipaste_2019-06-28_16-49-10.jpg

之前是在我吃灰的公网服务器上搭的,服务器网络环境比较复杂:共有三台公网服务器,两台处于同一内网,第三台单独在外网

搭建的时候Hadoop监听ip0.0.0.0,没有问题,集群可以正常访问,3台DataNodes全部在线;

但是搭建HBase的时候,如果Master监听0.0.0.0,就无法作为clinet访问hdfs://0.0.0.0:9000;如果Master监听127.0.0.1,就无法作为server向外网(这里指除loopback之外)广播本机端口导致zookeeper通信失败。如果都配置为外网ip,则根本无法监听。。。

笔者使用的腾讯云服务器类似亚马逊的EC2,问题详见

Hadoop Wiki - BindException

以及:

腾讯云论坛 - 【已解决】ifconfig看不到外网ip

搞了两天最后发现是这个NAT公网ip的问题,tears~

服务器上即使全写公网ip也不行,因为这种奇葩的NAT转换会导致服务无法直接监听自己的公网ip,换虚拟机正常的局域网ip就没问题,祭奠这两天来对着黑窗口看过的所有日志😭

如果头铁的话,应该也可以配置这种带NAT的复杂的内外网网络集群,只是针对每台主机需要单独配置hosts和对应的监听/访问地址配置。

SETP 1. 虚拟机配置

虚拟机操作系统使用 Ubuntu Server 18.04,VMware的NAT网卡在Windows上的地址是192.168.116.1。

搭建3台服务器构成的集群,每台配置如下:

  • 内存 2GB
  • 处理器 4核
  • 硬盘 128G(虚拟硬盘不要钱系列)

下面的操作先在一台服务器上完成,全部配置结束后直接将虚拟机或者虚拟磁盘复制3份就可以。如果是真实环境可以用scp命令同步文件以代替这个“复制”的操作

1.1 局域网ip配置

node1的ip分配为192.168.116.201

nano /etc/netplan/01-network-manager-all.yaml

01-network-manager-all.yaml

network:
  ethernets:
    ens33:
      dhcp4: no
      addresses: [192.168.116.201/24]

  version: 2

sudo netplan apply使之生效。注意netplan是Ubuntu 18.04特有的工具,如果版本较低或是其他发行版请自行Google配置方法

同理,更改后面两台机器的静态ip为192.168.116.202192.168.116.203

1.2 HOST文件

sudo nano /etc/hosts

按照规划的内网ip修改:

192.168.116.201 node1
192.168.116.202 node2
192.168.116.203 node3

如果你使用真实环境搭建,请将hosts文件同步到集群的其他机器(更改hosts需要root权限)

1.3 Java环境安装

之前搭建伪分布式的时候试了一下以前安装的JDK11,但是有兼容问题,缺少库,所以还是使用JDK8

安装openjdk-8

sudo apt install openjdk-8-jdk

1.4 配置密钥登陆

首先新建并切换到用户hadoop,不给他sudo权限,所有的程序都在这个账户上运行,这样可以一定程度上保证服务器安全

sudo adduser hadoop
# 按照提示填写
su hadoop

然后生成密钥对用来免密登录其他机器

ssh-keygen

过程中直接回车默认,不要添加密码

进入~/.ssh目录,可以看到刚刚生成的私钥id_rsa和公钥id_rsa.pub

使用cat id_rsa.pub >> authorized_keys写入公钥

因为公钥已经被写入进node1的authorized_keys文件中,此时node1就可以使用密钥免密登录自己了

后面我们复制虚拟机的时候使用的还是这一对密钥对,所以三台机器之间可以互相登录包括自己。如果你是在真实环境搭建,请使用scp命令将~/.ssh目录同步到集群的其他机器

STEP 2. 搭建Hadoop集群

2.1 下载、解压Hadoop

cd ~
wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz
tar -zxf hadoop-3.1.2.tar.gz
rm -r hadoop-3.1.2.tar.gz

2.2 配置环境变量

nano ~/.bashrc

添加Hadoop可执行目录进PATH,复制下面两行到.bashrc

export HADOOP_HOME=~/hadoop-3.1.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

使之立即生效

source ~/.bashrc

2.3 配置文件

2.3.1 hadoop-env.sh

去注释# export HADOOP_HOME=,设置为export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64

2.3.2 core-site.xml

fs.defaultFS指定NameNode的地址
hadoop.tmp.dir指定临时文件的目录

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://node1:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/hadoop/tmp</value>
        </property>

</configuration>

2.3.3 hdfs-site.xml

dfs.replication指定数据文件冗余的份数

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/hadoop/tmp</value>
        </property>
</configuration>

2.3.4 mapred-site.xml

指定运行mapreduce的框架为YARN

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

2.3.5 yarn-site.xml

指定运行YARN的主机、地址和reducer获取数据的方式

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>node1</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

2.3.6 workers

node1
node2
node3

2.4 Master机上把配置同步给另两台主机

如果你和我一样是虚拟机的话,直接把虚拟机复制两份,然后分别配置另两个虚拟机的ip和hosts就行了,如果是真实环境的话使用下面的命令把配置或整个$HADOOP_HOME同步给集群的其他机器,随意选择

scp -rp $HADOOP_HOME/etc/hadoop/* node2:$HADOOP_HOME/etc/hadoop
scp -rp $HADOOP_HOME/etc/hadoop/* node3:$HADOOP_HOME/etc/hadoop

这一步也可以等到后面HBase配置完一起同步

STEP 3. Enjoy Hadoop~

在Master运行

hdfs namenode -format
start-dfs.sh
start-yarn.sh

只有初次运行需要格式化hdfs,后面运行就不需要了。

9870端口是Hadoop管理页面,切到Datanodes选项卡可以看到集群所有Datanode的情况
Snipaste_2019-06-28_19-08-30.jpg
Snipaste_2019-06-28_19-08-49.jpg

8088是YARN管理页面,可以看到集群节点运行任务的情况
Snipaste_2019-06-28_19-10-04.jpg

STEP 4. 搭建HBase

4.1 下载、解压Hbase

cd ~
wget http://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.2.0/hbase-2.2.0-bin.tar.gz
tar -zxf hbase-2.2.0-bin.tar.gz
rm hbase-2.2.0-bin.tar.gz

4.2 配置文件

4.2.1 hbase-env.sh

和之前一样,去注释# export HADOOP_HOME=,设置为export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64

4.2.2 hbase-site.xml

hbase.rootdir表示HBase的存储目录,要和Hadoop的core-site.xml配置一致
hbase.cluster.distributed表示是否分布式存储
hbase.zookeeper.quorum指定ZooKeeper管理的机器,必须要是奇数个

<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://node1:9000/hbase</value>
        </property>
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>node1,node2,node3</value>
        </property>
        <property>
                <name>hbase.unsafe.stream.capability.enforce</name>
                <value>false</value>
        </property>
</configuration>

4.2.3 regionservers

这个和Hadoop的workers类似

node1
node2
node3

4.3 添加HBase可执行文件目录到PATH

nano ~/.bashrc
export HADOOP_HOME=~/hadoop-3.1.2
export HBASE_HOME=$HADOOP_HOME/hbase-2.2.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin
source ~/.bashrc

4.4 Master机上把配置复制给另两台主机

和Hbase同样的操作,只分发配置文件,务必先下载解压好环境

scp -rp $HBASE_HOME/conf/* node2:$HBASE_HOME/conf
scp -rp $HBASE_HOME/conf/* node3:$HBASE_HOME/conf

STEP 5. Enjoy HBase~

start-hbase.sh

Snipaste_2019-06-28_19-11-34.jpg

标签: 大数据, Hadoop, YARN, 集群

添加新评论