当前位置:   article > 正文

Hbase概念、分布式集群部署和使用_hbase检查hregionserver数据库存储目录与hadoop的core-site.xml一致

hbase检查hregionserver数据库存储目录与hadoop的core-site.xml一致

一、概述

HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统;
数据量小的场景不适合用HBASE;
HBASE写的时候非常慢,因为文件存在HDFS上;
(读和写是一个此消彼长的过程,因为向快速的查,就必须建索引,写的时候就必须维护索引,就会变慢)
HBASE的元数据表hbase:meta的位置存放在zookeeper上,HBASE从这个位置读取元数据,再根据元数据从HDFS读取数据;

二、部署

配套安装:
分布式hadoop2.6:三节点hadoop101、hadoop102、hadoop103
zookeeper3.5

2.1 下载

下载官网
在这里插入图片描述
把安装包上传到虚拟机hadoop101。

2.2 分布式HBASE部署

1.解压、修改环境变量

tar zxvf hbase-2.2.0-bin.tar.gz
  • 1

vi ~/.bash_profile 在~/.bash_profile添加如下内容

HBASE_HOME=/usr/local/src/hbase-2.2.0
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin:
export JAVA_HOME HADOOP_HOME CLASSPATH HIVE_HOME ZOOKEEPER_HOME HBASE_HOME PATH
  • 1
  • 2
  • 3

在这里插入图片描述
source ~/.bash_profile使其生效。
把环境变量同步到其他两节点:

scp ~/.bash_profile root@hadoop102:~/
scp ~/.bash_profile root@hadoop103:~/
  • 1
  • 2

在这里插入图片描述
切换到hadoop102,hadoop103使环境变量生效:source ~/.bash_profile
2.修改配置文件
1)vim hbase-env.sh 添加如下内容

export JAVA_HOME=/usr/local/src/jdk8u292-b10
export HBASE_MANAGES_ZK=false
  • 1
  • 2

解释:

HBASE_MANAGES_ZK=false 时使用独立的,为true时使用默认自带的。我已经装了分布式的zookeeper,所以不适用自带的。

2)配置hbase-site.xml文件 vi hbase-site.xml
添加如下内容:

<property>
    <!-- hbase在HDFS上的存储路径,与hadoop core-site.xml 中的fs.defaultFS保持严格一致,不然HMaster启动失败.-->
    <name>hbase.rootdir</name>
    <value>hdfs://hadoop101:9820/hbase</value>
</property>
<property>
    <!-- 是否是分布式 -->
    <name>hbase.cluster.distributed</name>
    <value>true</value>
</property>
<property>
    <!-- 集群的所有节点 -->
    <name>hbase.zookeeper.quorum</name>
    <value>hadoop101,hadoop102,hadoop103</value>
</property>
<property>
    <!-- HBASE的web端口号 -->
    <name>hbase.master.info.port</name>
    <value>60010</value>
</property>
<property>
    <name>hbase.master.maxclockskew</name>
    <value>180000</value>
    <description>Time difference of regionserver from master</description>
</property>
<property>
    <!-- 如果coprocessor加载失败或者初始化失败或者抛出Throwable对象,设置为false会让系统继续运行,默认是true -->
    <name>hbase.coprocessor.abortonerror</name>
    <value>false</value>
</property>
<property>
    <!-- 在分布式情况下, 一定设置为false -->
    <name>hbase.unsafe.stream.capability.enforce</name>
    <value>false</value>
</property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

3)配置regionservers
regionservers里面配的是数据存储的节点
vi regionservers

hadoop101
hadoop102
hadoop103

4)配置高可用(不是必须)
在conf下创建back-masters文件,用来指定备用的Hmaster,主Hmaster挂了以后备Hmaster会启动。

[root@hadoop101 conf]# touch backup-masters
[root@hadoop101 conf]# vi backup-masters
  • 1
  • 2

指定hadoop102为备用,backup-masters的内容是hadoop102

  1. 拷贝到其他集群
scp -r hbase-2.2.0 root@hadoop102:/usr/local/src/
scp -r hbase-2.2.0 root@hadoop103:/usr/local/src/
  • 1
  • 2
  1. 启动
    启动HBSE之前确认hadoop和zookeeper已经启动;
    在这里插入图片描述
    在主节点启动HBASE,启动命令:start-hbase.sh
    在哪个节点启动hbase,哪个就是主节点,也就是HMaster进程所在的节点
    启动后可看到多出HMaster和HRegionServer进程,同时hadoop102和hadoop103也启动了HRegionServer进程,表示启动成功
    在这里插入图片描述

HBASE的web端:http://hadoop101:60010/master-status
在这里插入图片描述
启动成功以后在HDFS的根目录会出现一个hbase的文件夹,这个路径可以通过配置文件修改。
在这里插入图片描述

总结:
HBASE出问题解决办法:

  1. 首先关闭HBASE:stop-hbase.sh
  2. 然后查看日志logs下面的.log文件,根据具体错误去解决;
  3. 初始化hbase,删除hdfs上的/hbase文件路径,删除hbase安装路径下的log、logs文件夹

三、使用

安装好的HBASE只是工具,会使用才是王道,接下来演示一些基本操作。

hbase shell

创建了一个名为myHbase的表,表里面有1个列簇,名为myCard,保留5个版本信息

create 'myHbase',{NAME => 'myCard',VERSIONS => 5}
  • 1

查看list:
在这里插入图片描述
所有的表明、列名都需要加上引号
1、查看状态、版本:
status
version
2、查看所有表:
list
3、退出:
quit

DDL
4、创建表
create ‘test’,’testcf’
create ‘test1’,{NAME => ‘name’,VERSIONS => 5}
create ‘test2’,{NAME => ‘name’,VERSIONS => 5},{NAME => ‘age’,VERSIONS => 3}
5、查看表
desc ‘test’
6、使表不可用(在删除或者修改表设置,都需要禁用表)
disable ‘test’
启用表:
enable ‘test’
7、删除表
drop ‘test’
8、判断表是否存在
exists ‘test’
9、刷新内存数据到HFile
flush ‘test’
10、修改表
create ‘test’,’testcf’
put ‘test’,‘rk1’,‘testcf:a’,‘fisrt’
disable ‘test’
alter ‘test’,{NAME=>’testcf’,TTL=>5}
enable ‘test’

DML
create ‘test’,‘cftest’
1、向表中插入数据
put ‘test’,‘rk1’,‘cftest:a’,‘fisrt’
put ‘test’,‘rk1’,‘cftest:a’,‘fisrt’
put ‘test’,‘rk1’,‘cftest:a’,‘second’
put ‘test’,‘rk1’,‘cftest:a’,‘three’
put ‘test’,‘rk2’,‘cftest:a’,‘four’
put ‘test’,‘rk2’,‘cftest:b’,‘four’
put ‘test’,‘rk3’,‘cftest:c’,‘five’
2、扫描全表中数据
scan ‘test’
指定返回条数
scan ‘test’,{LIMIT=>2}
3、获取一行数据
get ‘test’,‘rk2’
4、获取一行某一列的值
get ‘test’,‘rk2’,‘cftest:a’
5、更新数据
put ‘test’,‘rk2’,‘cftest:a’,‘hadoop’
6、删除数据
删除指定行中的指定列
delete ‘test’,‘rk2’,‘cftest:a’
删除指定行所有的列
deleteall ‘test’,‘rk2’
清空表数据
truncate ‘test’
7、显示行数
count ‘test’

HBase原生态编程

四大Nosql:
图数据库:任务关系;
文档数据库:
键值对数据库:
列簇数据库:

四、采坑记录

1. HMaster启动后闪退

hbase启动之后,hmaster几秒钟后又挂掉,rs和zk在各个节点的进程均正常
然后我查看hbase的logs,发现以下问题:

2021-08-02 21:38:00,474 WARN  [master/hadoop101:16000:becomeActiveMaster] ipc.Client: Failed to connect to server: hadoop101/192.168.1.101:9000: try once and fail.
java.net.ConnectException: 拒绝连接
	at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
	at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:716)
	at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
	at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531)
	at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:685)
	at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:788)
	at org.apache.hadoop.ipc.Client$Connection.access$3500(Client.java:410)
	at org.apache.hadoop.ipc.Client.getConnection(Client.java:1550)
	at org.apache.hadoop.ipc.Client.call(Client.java:1381)
	at org.apache.hadoop.ipc.Client.call(Client.java:1345)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:227)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:116)
	at com.sun.proxy.$Proxy18.setSafeMode(Unknown Source)
	at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.setSafeMode(ClientNamenodeProtocolTranslatorPB.java:691)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:409)
	at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeMethod(RetryInvocationHandler.java:163)
	at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invoke(RetryInvocationHandler.java:155)
	at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeOnce(RetryInvocationHandler.java:95)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:346)
	at com.sun.proxy.$Proxy19.setSafeMode(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.hadoop.hbase.fs.HFileSystem$1.invoke(HFileSystem.java:372)
	at com.sun.proxy.$Proxy20.setSafeMode(Unknown Source)
	at org.apache.hadoop.hdfs.DFSClient.setSafeMode(DFSClient.java:2143)
	at org.apache.hadoop.hdfs.DistributedFileSystem.setSafeMode(DistributedFileSystem.java:1359)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.hadoop.hbase.util.FSUtils.isInSafeMode(FSUtils.java:287)
	at org.apache.hadoop.hbase.util.FSUtils.waitOnSafeMode(FSUtils.java:699)
	at org.apache.hadoop.hbase.master.MasterFileSystem.checkRootDir(MasterFileSystem.java:250)
	at org.apache.hadoop.hbase.master.MasterFileSystem.createInitialFileSystemLayout(MasterFileSystem.java:153)
	at org.apache.hadoop.hbase.master.MasterFileSystem.<init>(MasterFileSystem.java:124)
	at org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:922)
	at org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2353)
	at org.apache.hadoop.hbase.master.HMaster.lambda$run$0(HMaster.java:598)
	at java.lang.Thread.run(Thread.java:748)
2021-08-02 21:38:00,499 WARN  [master/hadoop101:16000:becomeActiveMaster] ipc.Client: Failed to connect to server: hadoop101/192.168.1.101:9000: try once and fail.
java.net.ConnectException: 拒绝连接
	at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
	at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:716)
	at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
	at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531)
	at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:685)
	at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:788)
	at org.apache.hadoop.ipc.Client$Connection.access$3500(Client.java:410)
	at org.apache.hadoop.ipc.Client.getConnection(Client.java:1550)
	at org.apache.hadoop.ipc.Client.call(Client.java:1381)
	at org.apache.hadoop.ipc.Client.call(Client.java:1345)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:227)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:116)
	at com.sun.proxy.$Proxy18.setSafeMode(Unknown Source)
	at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.setSafeMode(ClientNamenodeProtocolTranslatorPB.java:691)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:409)
	at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeMethod(RetryInvocationHandler.java:163)
	at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invoke(RetryInvocationHandler.java:155)
	at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeOnce(RetryInvocationHandler.java:95)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:346)
	at com.sun.proxy.$Proxy19.setSafeMode(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.hadoop.hbase.fs.HFileSystem$1.invoke(HFileSystem.java:372)
	at com.sun.proxy.$Proxy20.setSafeMode(Unknown Source)
	at org.apache.hadoop.hdfs.DFSClient.setSafeMode(DFSClient.java:2143)
	at org.apache.hadoop.hdfs.DistributedFileSystem.setSafeMode(DistributedFileSystem.java:1359)
	at org.apache.hadoop.hdfs.DistributedFileSystem.setSafeMode(DistributedFileSystem.java:1343)
	at org.apache.hadoop.hbase.util.FSUtils.isInSafeMode(FSUtils.java:293)
	at org.apache.hadoop.hbase.util.FSUtils.waitOnSafeMode(FSUtils.java:699)
	at org.apache.hadoop.hbase.master.MasterFileSystem.checkRootDir(MasterFileSystem.java:250)
	at org.apache.hadoop.hbase.master.MasterFileSystem.createInitialFileSystemLayout(MasterFileSystem.java:153)
	at org.apache.hadoop.hbase.master.MasterFileSystem.<init>(MasterFileSystem.java:124)
	at org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:922)
	at org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2353)
	at org.apache.hadoop.hbase.master.HMaster.lambda$run$0(HMaster.java:598)
	at java.lang.Thread.run(Thread.java:748)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91

解决方案:
将hbase-site.xml中的配置项中的端口号9000改为hdfs在运行的端口号9820

<property>
      <name>hbase.rootdir</name>
      <value>hdfs://Hadoop01:9000/hbase</value>
</property> 
  • 1
  • 2
  • 3
  • 4

又查看到在core-site.xml中查到hdfs在运行的端口号为9820

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://Hadoop01:9820</value>
</property>
  • 1
  • 2
  • 3
  • 4

有时间了在写
HBASE图形化软件:phoenix
http://phoenix.apache.org/download.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/666190
推荐阅读
相关标签
  

闽ICP备14008679号