VMware下Hbases完全分布式安装-1master+2slave 资料准备 安装VMware VMware网络设置 安装Ubuntu(后面配置比较麻烦就不推荐了,还是老老实实用CentOS) 安装CentOS 8(7也可以自己找教程哦) Master网络配置 从master克隆slave0和slave1 slave0和slave1的网络配置 同步时间 Xshell5的安装与使用 Xftp5的安装与使用 关闭防火墙 设置主机名 hosts设置 免密钥登陆配置 安装JDK Hadoop安装与环境配置 Hbase安装与配置 问题指南
参考博客
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 管理。
————————————————
版权声明:本文为****博主「xtggbmdk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.****.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>