VMware下Hbases完全分布式安装-1master+2slave
资料准备
参考博客
Hbase快速单机部署和伪分布式部署,完全分布式部署这里面写了Hbase配置的作用挺详细的
全分布式下安装hbase(使用hbase自带的zookeeper)
使用到的文件
onedrive下载地址(不限速)
VMware和XshellXftp可以用我的,其他的你有别的版本也可以用自己的
清华镜像
Hbase文档
版本适配
官网搬运的
绿色就可用
黄色是没测试,可能可以、可能不可以
红色就是没法用
我这里直接用的比较新的Hadoop3.1.3+Hbase2.2.4
安装VMware
提供的文件里把这个下下来,然后安装。
一路装下去就好,安装完毕,第一次打开会让你输入密钥
用这个生成密钥复制粘贴即可XD
VMware网络设置
打开控制面板
之后一路双击
这里要勾选然后双击
然后这样设置
然后打开VMware
找到这里
先给权限
按照我给顺序一路设置好
弄好之后一路确定
这样VMware网络就设置好了
安装Ubuntu(后面配置比较麻烦就不推荐了,还是老老实实用CentOS)
之前都是用的centOS感觉安装很麻烦,这次试试Ubuntu。
先创建一个虚拟机
选择你的镜像文件路径
这里随便写记住密码就好了,全名是你系统登录时的名字,用户名是你终端的名字,这里我填填反了哈哈哈
虚拟机起名master
位置随意
这样设置
自定义
这样设置比较好
接下来等他自己安装就好了XD,等了有几十分钟吧,回来的时候卡住了,但是重启一下虚拟机就好了。Ubuntu真的省事不知道后面会不会出啥问题
root密码
好吧第一个问题它的root密码默认不启动,是自动生成的每次登录都不一样
解决办法:打开终端输入
sudo passwd root
然后输入在创建虚拟机时我叫你记住的密码
一路走下来就OK了,Linux密码不回显的跟着提示做就好了
中文设置
系统自带英文,中文需要下载语言包。这个我就不写了吧,百度一下就好了。
写到这里,再往后写我发现Ubuntu和CentOS差异太大,网络配置之类的区别很大,练得研究了。还是用回CentOS吧T^T
安装CentOS 8(7也可以自己找教程哦)
创建虚拟机
自定义
以下除了我列出来的全部直接下一步
VMware暂不支持CentOS8故先选择Red Had Linux 8
名字填master位置随意
剩下的一直点下一步即可
编辑虚拟机选择镜像位置
确定后开启虚拟机
选择安装
语言翻到最下面选中文,你要是会别的也行hhh
我选的最小安装,你也可以安装GUI不过可能会装的久点,记住到网络和主机名里把网连上(右上角有个滑块,点击就打开了)
安装界面可以设置root密码和添加用户等,这里我已经添加好了,静待安装完成。
重启
输入用户名和密码(这里也可以直接输入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,选择克隆
用同样方法克隆slave1
完成后
slave0和slave1的网络配置
首先打开slave0登录root账户
输入vi /etc/sysconfig/network-scripts/ifcfg-ens160
最后一个字段是你的网卡名,具体是啥自己改呀。可以先进入/etc/sysconfig/network-scripts
再ls即可看到
修改ip地址即可,改为192.168.56.111
同样的方法更改slave1的ip地址为192.168.56.112
同步时间
关闭三台虚拟机
将三台机器都设置成这样
Xshell5的安装与使用
Xshell可以连接多台服务器,并进行命令操作
1、安装
双击
位置随意
其余的直接下一步就行了
2、Xshell5的使用
名字最好和虚拟机相同,ip地址对应好就行
master:192.168.56.110
slave0:192.168.56.111
slave1:192.168.56.112
首次连接要输入用户名和密码,记得点保存
双击
记住用户名
记住密码
出现如下字样就成功了
其它两台从机同样的操作
这之后只需要打开虚拟机,Xshell里输入命令就好了,Xshell里可以复制粘贴(终于不用手敲命令了yes!!!)
Xftp5的安装与使用
Xftp5的作用
可以同时连接多台服务器,将多台服务器连接在一台机器上操作,这样就不用在每台服务器上进行操作,方便远程操作服务器;主要是对服务器进行文件传输操作
Xftp5的安装
双击
后面随意就好了
Xftp5的使用
如果FTP协议不行就换SFTP
防止乱码
slave0和slave1用同样的方法连上
关闭防火墙
首先打开并登陆master服务器
先查看防火墙状态
systemctl status firewalld.service
绿色部分不表示防火墙已打开
关闭防火墙
systemctl stop firewalld.service
已关闭
防止重启服务器防火墙启动
systemctl disable firewalld.service
这样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
然后按四次回车,出现下面内容
然后输入下面命令进入ssh文件夹
cd ~/.ssh
输入下面命令可以看文件夹里面的内容
ls -l
然后输入下面命令把公钥文件发送到自己和其它服务器
发送给自己
ssh-copy-id -i id_rsa.pub root@master
输入yes
输入密码
成功后显示如下内容
然后再分别发送给slave0和slave1
验证是否成功
在master服务器输入下面的命令,都不需要输入密码,就说明成功了,注意每执行完一条命令都用exit退出一下再执行下一条
ssh master
ssh slave0
ssh slave1
安装JDK
首先在master服务器的usr/local目录下新建一个java文件夹,用下面命令就可以完成
mkdir /usr/local/java
然后用Xftp连接master服务器,打开usr/local/java这个目录,把jdk-8u162-linux-x64.tar复制进去
接着用下面的命令进入到该目录
cd /usr/local/java
接着用下面的命令进行解压
tar -zxvf jdk-8u162-linux-x64.tar.gz
然后就解压好了
接下来开始配置环境变量,先用cd命令回到总目录
输入下面命令开始配置
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环境
这样就安装好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
然后在slave0中输入下面内容使环境变量生效
source /root/.bash_profile
java -version
验证下
这样 slave0中的jdk就安装成功了,slave1,与slave0类似,这里不做演示
Hadoop安装与环境配置
先用下面的命令给opt文件夹中新建一个hapoop文件夹
mkdir /opt/hadoop
把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
使用下面命令把hadoop-2.7.5文件夹重命名成hadoop
mv hadoop-3.1.3 hadoop
配置hadoop-env.sh
该文件设置的是Hadoop运行时需要的环境变量。JAVA_HOME是必须设置的,即使我们当前的系统设置了JAVA_HOME,它也是不认识的,因为Hadoop即使是在本机上执行,它也是把当前执行的环境当成远程服务器。所以这里设置的目的是确保Hadoop能正确的找到jdk。
先用cd回到主目录
然后输入下面命令进入该文件所在的文件夹
cd /opt/hadoop/hadoop/etc/hadoop
用ls就可以看到该文件
然后输入下面命令打开该文件
vi hadoop-env.sh
然后修改成下面的内容
export JAVA_HOME=/usr/local/java/jdk1.8.0_162/
配置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>
配置hdfs-site.xml
hdfs-site.xml所在的目录和上面的目录一样,所以直接使用下面命令打开该文件即可
vi hdfs-site.xml
接着把下面命令写入
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
配置yarn-site.xml
yarn-site.xml所在的目录和上面的目录一样,所以直接使用下面命令打开该文件即可
vi yarn-site.xml
接着把下面命令写入
<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>
配置mapred-site.xml
然后用下面命令打开该文件
vi mapred-site.xml
接着把下面命令写入
<!-- 指定mr运行时框架,这里指定在yarn上,默认是local -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
配置slaves(3.0以上变为workers)
slaves所在的目录和上面的目录一样,所以直接使用下面命令打开该文件即可
vi slaves(workers)
把下面代码写进去(删掉localhost)
master
slave0
slave1
配置Hadoop环境变量
先用cd命令回到总目录
输入下面命令开始配置
vi /root/.bash_profile
把下面命令输入进去
export HADOOP_HOME=/opt/hadoop/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
然后保存退出输入下面内容使环境变量生效
source /root/.bash_profile
新建Hadoop运行时产生文件的储存目录
先用cd命令回到总目录
接着用下面命令新建目录
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
报错(如问题指南中最后一个问题)
解决后重新启动,各个结点显示如下信息
在浏览器中输入
192.168.56.110:9870
可通过web端查看
关闭Hadoop
只需要在master服务器输入下面命令即可
stop-all.sh
Hbase安装与配置
master节点
新建hbase文件夹
mkdir /opt/hbase
把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
在~/.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
配置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也可)
大功告成!!!!
问题指南
无法连接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页面
打开日志
报错
hbase-site.xml添加配置
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>