Hadoop3 + HBase2 集群搭建
在虚拟机上搭建Hadoop+HBase集群
下图配置的虚拟机*3,来搭建集群
之前是在我吃灰的公网服务器上搭的,服务器网络环境比较复杂:共有三台公网服务器,两台处于同一内网,第三台单独在外网
搭建的时候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,问题详见
以及:
搞了两天最后发现是这个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.202
和192.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的情况
8088是YARN管理页面,可以看到集群节点运行任务的情况
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