VMware下Hbases完全分布式安装-1master+2slave

资料准备

参考博客

Hadoop完全分布式

Hbase完全分布式安装

Hbase快速单机部署和伪分布式部署,完全分布式部署这里面写了Hbase配置的作用挺详细的

全分布式下安装hbase(使用hbase自带的zookeeper)

使用到的文件

onedrive下载地址(不限速)

https://mailszpteducn-my.sharepoint.com/:f:/g/personal/15020739_mail_szpt_edu_cn/Eh0lYpfEn2ZAga928a9A3HUBtIU4qwzJEN3rzjId1tApyA?e=OB68NP

VMware和XshellXftp可以用我的,其他的你有别的版本也可以用自己的

清华镜像

Hadoop

Hbase文档

中文文档

官方文档

版本适配

官网搬运的

绿色就可用

黄色是没测试,可能可以、可能不可以

红色就是没法用

我这里直接用的比较新的Hadoop3.1.3+Hbase2.2.4

安装VMware

提供的文件里把这个下下来,然后安装。

image-20200506195233435

一路装下去就好,安装完毕,第一次打开会让你输入密钥

image-20200506195503406

用这个生成密钥复制粘贴即可XD

VMware网络设置

打开控制面板

之后一路双击

image-20200506195807230

image-20200506195852303

image-20200506195927847

这里要勾选然后双击

然后这样设置

然后打开VMware

找到这里

先给权限

按照我给顺序一路设置好

弄好之后一路确定

这样VMware网络就设置好了

安装Ubuntu(后面配置比较麻烦就不推荐了,还是老老实实用CentOS)

之前都是用的centOS感觉安装很麻烦,这次试试Ubuntu。

先创建一个虚拟机

选择你的镜像文件路径

这里随便写记住密码就好了,全名是你系统登录时的名字,用户名是你终端的名字,这里我填填反了哈哈哈

虚拟机起名master

位置随意

这样设置

自定义

这样设置比较好

接下来等他自己安装就好了XD,等了有几十分钟吧,回来的时候卡住了,但是重启一下虚拟机就好了。Ubuntu真的省事不知道后面会不会出啥问题

root密码

好吧第一个问题它的root密码默认不启动,是自动生成的每次登录都不一样

解决办法:打开终端输入sudo passwd root

然后输入在创建虚拟机时我叫你记住的密码

一路走下来就OK了,Linux密码不回显的跟着提示做就好了

中文设置

系统自带英文,中文需要下载语言包。这个我就不写了吧,百度一下就好了。

写到这里,再往后写我发现Ubuntu和CentOS差异太大,网络配置之类的区别很大,练得研究了。还是用回CentOS吧T^T

安装CentOS 8(7也可以自己找教程哦)

创建虚拟机

image-20200506210239369

自定义

以下除了我列出来的全部直接下一步

VMware暂不支持CentOS8故先选择Red Had Linux 8

名字填master位置随意

剩下的一直点下一步即可

编辑虚拟机选择镜像位置

确定后开启虚拟机

选择安装

语言翻到最下面选中文,你要是会别的也行hhh

我选的最小安装,你也可以安装GUI不过可能会装的久点,记住到网络和主机名里把网连上(右上角有个滑块,点击就打开了)

安装界面可以设置root密码和添加用户等,这里我已经添加好了,静待安装完成。

重启

image-20200506233043176

输入用户名和密码(这里也可以直接输入root 和root密码进入管理员)

这样就登录成功了

Master网络配置

输入cd /etc/sysconfig/network-scripts(这里告诉大家一个小技巧alt+tab可以补全命令自己试试吧)

进入该目录后输入ls查看配置文件名

输入vi ifcfg-ens160出现以下内容

改成这样

按i编辑

按esc进入普通(命令)模式

按“shift+:”进入命令行模式,此时输入wq即可保存并退出

重启网络service network restart

此时会报错:Failed to restart network.service: Unit network.service not found.

出现这个错误的原因是CentOS8已经废弃network.service。只能通过其他方法进行网络配置包括NM命令工具集

可以参考:https://www.cnblogs.com/RXDXB/p/11660184.html

这里我已经完成了网络的配置,此时只需要使用这个命令使其生效即可(别问我我也不知道啥是NM)

nmcli c reload

如果还是不行先输入service NetworkManager start开启NetworkManager

想要开机自启NetworkManager 输入chkconfig NetworkManager on

NetworkManager(NetworManager)是检测网络、自动连接网络的程序。无论是无线还是有线连接,它都可以令您轻松管理。对于无线网络,网络管理器可以自动切换到最可靠的无线网络。利用网络管理器的程序可以自由切换在线和离线模式。网络管理器可以优先选择有线网络,支持 VPN。网络管理器最初由 Redhat 公司开发,现在由 GNOME 管理。
————————————————
版权声明:本文为CSDN博主「xtggbmdk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xtggbmdk/java/article/details/80921606

ping 一下自己

ping 192.168.56.110

这样就成功了。Ctrl c停止

然后输入shutdown now关机为下一步做准备

从master克隆slave0和slave1

右击master,选择克隆

image-20200507132815330

image-20200507141713543

image-20200507141814282

用同样方法克隆slave1

完成后

image-20200507142636837

slave0和slave1的网络配置

首先打开slave0登录root账户

输入vi /etc/sysconfig/network-scripts/ifcfg-ens160最后一个字段是你的网卡名,具体是啥自己改呀。可以先进入/etc/sysconfig/network-scripts再ls即可看到

修改ip地址即可,改为192.168.56.111

image-20200507143456174

image-20200507143719803

同样的方法更改slave1的ip地址为192.168.56.112

image-20200507144304328

同步时间

关闭三台虚拟机

image-20200507144442814

image-20200507144613003

将三台机器都设置成这样

image-20200507144825635

Xshell5的安装与使用

Xshell可以连接多台服务器,并进行命令操作

1、安装

双击

image-20200507145405702

image-20200507145458266

位置随意

image-20200507145610765

其余的直接下一步就行了

2、Xshell5的使用

image-20200507145754170

名字最好和虚拟机相同,ip地址对应好就行

master:192.168.56.110

slave0:192.168.56.111

slave1:192.168.56.112

image-20200507150155831

首次连接要输入用户名和密码,记得点保存

双击

image-20200507152706488

记住用户名

image-20200507152755726

记住密码

image-20200507152826345

出现如下字样就成功了

image-20200507152905988

其它两台从机同样的操作

这之后只需要打开虚拟机,Xshell里输入命令就好了,Xshell里可以复制粘贴(终于不用手敲命令了yes!!!)

Xftp5的安装与使用

Xftp5的作用

可以同时连接多台服务器,将多台服务器连接在一台机器上操作,这样就不用在每台服务器上进行操作,方便远程操作服务器;主要是对服务器进行文件传输操作

Xftp5的安装

双击

image-20200605150243358

image-20200605150456205

image-20200605150518195

后面随意就好了

Xftp5的使用

image-20200605150907193

image-20200605151032367

如果FTP协议不行就换SFTP

防止乱码

image-20200605151121369

slave0和slave1用同样的方法连上

关闭防火墙

首先打开并登陆master服务器

先查看防火墙状态

systemctl status firewalld.service

image-20200605161347558

绿色部分不表示防火墙已打开

关闭防火墙

systemctl stop firewalld.service

image-20200605161626746

已关闭

防止重启服务器防火墙启动

systemctl disable firewalld.service

image-20200605161804798

这样master的防火墙就关闭了,另外两台操作相同

设置主机名

先在master服务器上操作’,输入下面命令

vi /etc/sysconfig/network

按 i 编辑,输入如下代码,按esc>shift+:>wq

# Created by anaconda
NETWORKING=yes
HOSTNAME=master//另外两台改成slave0和slave1

这样从起后又会变成localhost

修改静态主机名

vi /etc/hostname

删掉原来的改为

maser

重启主机,就发现主机名变了,另外两台同理

hosts设置

如果要使用计算机名进行网络访问,需要修改hosts文件的主机名IP地址对照表,(root用户下操作)

输入

vi /etc/hosts

再输入

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.56.110 master
192.168.56.111 slave0
192.168.56.112 slave1

三台都需要这样设置

免密钥登陆配置

首先在master服务器输入下面命令

ssh-keygen -t rsa

然后按四次回车,出现下面内容

image-20200605170544966

然后输入下面命令进入ssh文件夹

cd ~/.ssh

输入下面命令可以看文件夹里面的内容

ls -l

image-20200605170706851

然后输入下面命令把公钥文件发送到自己和其它服务器

发送给自己

ssh-copy-id -i id_rsa.pub root@master

输入yes

image-20200605170900345

输入密码

image-20200605170918538

成功后显示如下内容

image-20200605171047116

然后再分别发送给slave0和slave1

image-20200605171155057

image-20200605171232377

验证是否成功

在master服务器输入下面的命令,都不需要输入密码,就说明成功了,注意每执行完一条命令都用exit退出一下再执行下一条

ssh master
ssh slave0
ssh slave1

image-20200605171407604

安装JDK

首先在master服务器的usr/local目录下新建一个java文件夹,用下面命令就可以完成

mkdir /usr/local/java

然后用Xftp连接master服务器,打开usr/local/java这个目录,把jdk-8u162-linux-x64.tar复制进去

image-20200605182309254

接着用下面的命令进入到该目录

cd /usr/local/java

接着用下面的命令进行解压

tar -zxvf jdk-8u162-linux-x64.tar.gz

然后就解压好了

image-20200605183315649

接下来开始配置环境变量,先用cd命令回到总目录

img

输入下面命令开始配置

vi /root/.bash_profile

按照我的配置来

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export JAVA_HOME=/usr/local/java/jdk1.8.0_162
export PATH=$JAVA_HOME/bin:$PATH

然后保存退出输入下面内容使环境变量生效

source /root/.bash_profile

然后输入java、javac和java -version验证,如果都出现一大堆代码说明配置成功了,如果其中有一个或多个出现不是内部或外部命令,也不是可运行的程序或批处理文件等类似语句,就说明配置失败了,需要重新配置jdk环境

image-20200605184135102

这样就安装好master服务器的jdk了,但是还没有安装好slave0和slave1的jdk,我们可以用下面命令把master中的jdk复制到slave0上面

scp -r /usr/local/java root@slave0:/usr/local

这时已经把jdk复制到slave0了,但是slave0的环境变量还没有配置,我们同样可以使用下面命令来复制环境变量

scp -r /root/.bash_profile root@slave0:/root

img

然后在slave0中输入下面内容使环境变量生效

source /root/.bash_profile
java -version

验证下

这样 slave0中的jdk就安装成功了,slave1,与slave0类似,这里不做演示

Hadoop安装与环境配置

先用下面的命令给opt文件夹中新建一个hapoop文件夹

mkdir /opt/hadoop

image-20200605190027193

把hadoop-3.1.3.tar.gz复制到hadoop文件夹(从左边本地拖过去即可)

使用下面命令进入到hadoop文件夹

cd /opt/hadoop

使用下面命令把hadoop-3.1.3.tar.gz进行解压

tar -zxvf hadoop-3.1.3.tar.gz

image-20200605190907924

使用下面命令把hadoop-2.7.5文件夹重命名成hadoop

mv hadoop-3.1.3 hadoop

image-20200605191005437

配置hadoop-env.sh

该文件设置的是Hadoop运行时需要的环境变量。JAVA_HOME是必须设置的,即使我们当前的系统设置了JAVA_HOME,它也是不认识的,因为Hadoop即使是在本机上执行,它也是把当前执行的环境当成远程服务器。所以这里设置的目的是确保Hadoop能正确的找到jdk。

先用cd回到主目录

img

然后输入下面命令进入该文件所在的文件夹

cd /opt/hadoop/hadoop/etc/hadoop

img

用ls就可以看到该文件

image-20200605191317728

然后输入下面命令打开该文件

vi hadoop-env.sh

然后修改成下面的内容

export JAVA_HOME=/usr/local/java/jdk1.8.0_162/

image-20200605191823053

配置core-site.xml

core-site.xm所在的目录和上面的目录一样,所以直接使用下面命令打开该文件即可

vi core-site.xml

接着把下面命令写入中,注释不用写

<!-- 指定Hadoop所使用的文件系统schema(URL),HDFS的老大(NameNode)的地址 -->
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://master:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的储存目录,默认是/tmp/hadoop-${user.name} -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/opt/hadoop/hadoopdata</value>
</property>

image-20200605192135194

配置hdfs-site.xml

hdfs-site.xml所在的目录和上面的目录一样,所以直接使用下面命令打开该文件即可

vi hdfs-site.xml

接着把下面命令写入中,注释不用写

<!-- 指定HDFS副本的数量 -->
<property>
	<name>dfs.replication</name>
	<value>1</value>
</property>

img

配置yarn-site.xml

yarn-site.xml所在的目录和上面的目录一样,所以直接使用下面命令打开该文件即可

vi yarn-site.xml

img

接着把下面命令写入中,里面自带的注释不用删除

<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
<property>
	<name>yarn.resourcemanager.address</name>
	<value>master:18040</value>
</property>
<property>
	<name>yarn.resourcemanager.scheduler.address</name>
	<value>master:18030</value>
</property>
<property>
	<name>yarn.resourcemanager.resource-tracker.address</name>
	<value>master:18025</value>
</property>
<property>
	<name>yarn.resourcemanager.admin.address</name>
	<value>master:18141</value>
</property>
<property>
	<name>yarn.resourcemanager.webapp.address</name>
	<value>master:18088</value>
</property>

image-20200605192836598

配置mapred-site.xml

然后用下面命令打开该文件

vi mapred-site.xml

接着把下面命令写入中,注释不用写

<!-- 指定mr运行时框架,这里指定在yarn上,默认是local -->
<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>

img

配置slaves(3.0以上变为workers)

img

slaves所在的目录和上面的目录一样,所以直接使用下面命令打开该文件即可

vi slaves(workers)

把下面代码写进去(删掉localhost)

master
slave0
slave1

配置Hadoop环境变量

先用cd命令回到总目录

img

输入下面命令开始配置

vi /root/.bash_profile

image-20200605194010429

把下面命令输入进去

export HADOOP_HOME=/opt/hadoop/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

image-20200605194116048

然后保存退出输入下面内容使环境变量生效

source /root/.bash_profile

新建Hadoop运行时产生文件的储存目录

先用cd命令回到总目录

img

接着用下面命令新建目录

mkdir /opt/hadoop/hadoopdata

给slave0和slave1复制Hadoop

用下面命令就可以把master的Hadoop复制到slave0

scp -r /opt/hadoop root@slave0:/opt

用下面命令把master的Hadoop复制到slave1

scp -r /opt/hadoop root@slave1:/opt

接着用下面命令把master的环境变量复制到slave0上

scp -r /root/.bash_profile root@slave0:/root

然后在slave0中输入下面内容使环境变量生效

source /root/.bash_profile

slave1与slave0类似,这里不做演示

格式化文件系统

在master中输入下面命令格式化文件系统,其余俩台服务器不用,注意该命令只能使用一次

hadoop namenode -format

启动Hadoop

在master服务器上,先用下面命令进入Hadoop的sbin目录

cd /opt/hadoop/hadoop/sbin

然后输入下面命令启动

start-all.sh

报错(如问题指南中最后一个问题)

解决后重新启动,各个结点显示如下信息

image-20200605231008241

image-20200605231908256

image-20200605231049710

在浏览器中输入

192.168.56.110:9870

可通过web端查看

image-20200606091840717

关闭Hadoop

只需要在master服务器输入下面命令即可

stop-all.sh

Hbase安装与配置

master节点

新建hbase文件夹

mkdir /opt/hbase

image-20200606100937731

把hbase-2.2.4-bin.tar.gz复制到hbase文件夹(从左边本地拖过去即可)

使用下面命令进入到hadoop文件夹

cd /opt/hbase

使用下面命令把hbase-2.2.4-bin.tar.gz进行解压

tar -zxvf hbase-2.2.4-bin.tar.gz

重命名文件夹

mv hbase-2.2.4 hbase

image-20200606104551477

~/.bash-profile中配置环境变量

vi /root/.bash_profile
//添加下面两个参数
export HBASE_HOME=/opt/hbase/hbase
export PATH=$HBASE_HOME/bin:$PATH

配置生效

source /root/.bash_profile

配置hbase-env.sh

cd /opt/hbase/hbase/conf
vi hbase-env.sh

然后修改成c下面的内容

export JAVA_HOME=/usr/local/java/jdk1.8.0_162/
#使用自带zk,false为使用外部zk
export HBASE_MANAGES_ZK=true

image-20200606105124111

配置hbase-site.xml

新建zookeeper数据文件夹

cd /opt/hbase
mkdir hbasedata
cd hbasedata
mkdir zookeeper

{$HBASE_HOME}/conf/hbase-site.xml

cd /opt/hbase/hbase/conf
vi hbase-site.xml
<!--将本地文件系统更改为HDFS实例的地址,即hbase产生的数据将位于hdfs集群上 -->
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://master:9000/hbase</value>
  </property>
 <!--hbase依赖于zookeeper,指定zookeeper产生的数据位置 -->
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/opt/hbase/hbasedata/zookeeper</value>
  </property>
   <property>
        <name>hbase.master</name>
        <value>master</value>
  </property>
 
  <!--该属性默认为true -->
  <!--指示HBase以分布式模式运行 -->
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
<!--指示使用zk的主机地址,奇数个 -->
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>master,slave0,slave1</value>
  </property>
<property>
  <name>hbase.unsafe.stream.capability.enforce</name>
  <value>false</value>
</property>

配置regionservers

修改{$HBASE_HOME}/conf/regionservers,原文件内容为localhost

vi regionservers
slave0
slave1

配置高可用备份master(可以不配)

在conf下创建backup-masters文件并添加备用master节点信息

slave0

配置zookeeper服务所在的节点,在hbase-site.xml下添加

  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>master,slave0,slave1</value>
  </property>

给slave0和slave1复制Hbase

用下面命令就可以把master的Hbase复制到slave0

scp -r /opt/hbase root@slave0:/opt

用下面命令就可以把master的Hbase复制到slave1

scp -r /opt/hbase root@slave1:/opt

接着用下面命令把master的环境变量复制到slave0上

scp -r /root/.bash_profile root@slave0:/root

然后在slave0中输入下面内容使环境变量生效

source /root/.bash_profile

slave1与slave0类似,这里不做演示

启动Hbase

先启动hdfs

vi /opt/hadoop/hadoop/sbin/start-dfs.sh

再启动Hbase

cd /opt/hbase/hbase/bin
start-hbase.sh

访问web页面

192.168.56.110:16010(master:16010也可)

image-20200606142512401

大功告成!!!!

问题指南

无法连接Xshell或者Xftp

如果Xshell或者Xftp连接不上,看看虚拟机ping自己能不能连上,不行的话需要重启网络

先输入第一个命令,能ping通就好,不行就再输入下面两个应该就可以了

nmcli c reload
nmcli networking off
nmcli networking on

Hadoop 3.0的坑

1、hdfs的web页面默认端口是9870 yarn的web页面端口是8088
2、配置文件中的slaves文件没了,变成了workers文件,在里面配置datanode节点
3、在进行namenode格式化是有几个Fail,不要因此怀疑自己,只要common.Storage: Storage directory /usr/local/hadoop-3.0.2/hdfs/name has been successfully formatted. 这个提醒是存在的就没有问题
4、在启动时,start-dfs.sh start-yarn.sh时报错

Starting namenodes on [namenode]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [datanode1]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
Starting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.

解决办法:

进入sbin目录

cd /opt/hadoop/hadoop/sbin

在里面修改四个文件

vi start-dfs.sh
vi stop-dfs.sh
vi start-yarn.sh
vi stop-yarn.sh

注意是在文件开始空白处
对于start-dfs.sh和stop-dfs.sh中:

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:

#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

这样就解决了

Hmaster先打开又关闭,导致无法访问web页面

打开日志

报错

image-20200606140320949

hbase-site.xml添加配置

    <property>
      <name>hbase.unsafe.stream.capability.enforce</name>
      <value>false</value>
    </property>
posted @ 2020-06-05 23:14  你当像鸟飞往你的山  阅读(965)  评论(0编辑  收藏  举报