下载安装

版本支持:
http://hbase.apache.org/book.html#configuration
在这里插入图片描述

http://hbase.apache.org/downloads.html在这里插入图片描述
对应版本下载

上传到虚拟机

sudo cp hbase-2.4.2-bin.tar.gz /usr/local/
sudo tar -xzvf hbase-2.4.2-bin.tar.gz
sudo mv hbase-2.4.2 hbase
sudo chown -R hadoop:hadoop hbase

配置

cd /usr/local/hbase/conf
sudo vim hbase-env.sh

添加或修改成:

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export HBASE_CLASSPATH=/usr/local/hbase/conf #这个有教程说不要添加 设置为本机HBase安装目录下的conf目录(即/usr/local/hbase/conf)
export HBASE_MANAGES_ZK=true #为true,表示由hbase自己管理zookeeper,不需要单独的zookeeper。

配置hbase-site.xml
sudo vim hbase-site.xml

在启动HBase前需要设置属性hbase.rootdir,用于指定HBase数据的存储位置,因为如果不设置的话,hbase.rootdir默认为/tmp/hbase-${user.name},这意味着每次重启系统都会丢失数据。此处设置为HBase安装目录下的hbase-tmp文件夹即(/usr/local/hbase/hbase-tmp),添加配置如下:

<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>file:///usr/local/hbase/hbase-tmp</value>
        </property>
</configuration>

建议使用伪分布式配:

    <configuration>
            <property>
                    <name>hbase.rootdir</name>
                    <value>hdfs://localhost:9000/hbase</value>
            </property>
            <property>
                    <name>hbase.cluster.distributed</name>
                    <value>true</value>
            </property>
            <property>
            <name>hbase.unsafe.stream.capability.enforce</name>
            <value>false</value>
        </property>
    </configuration>

其中localhost改成虚拟机的名称或者虚拟机IP(cat /etc/hosts 查看IP时候绑定为0.0.0.0)
hbase.rootdir指定HBase的存储目录;hbase.cluster.distributed设置集群处于分布式模式.

配置环境变量

export HBASE_HOME=/usr/local/hbase
export PATH=$PATH:$HBASE_HOME/bin

运行

先启动hadoop节点

 /usr/local/hadoop/sbin/stop-all.sh     #关闭
 /usr/local/hadoop/sbin/start-all.sh

打开HBase:

/usr/local/hbase/bin/start-hbase.sh

JPS检查是否启动
在这里插入图片描述

打开HBASE shell:

./bin/hbase shell

habse shell内操作:

列出 HBase 所有的表的相关信息,例如表名;

List

在这里插入图片描述

创建表:

  create 'student','Sname','Ssex','Sage','Sdept','course'

向已经创建好的表添加和删除指定的列族或列

put 'student','95003','Sname','wangjinxuan' 

查看数据

HBase中有两个用于查看数据的命令:1. get命令,用于查看表的某一行数据;2. scan命令用于查看某个表的全部数据

在终端打印出指定的表的所有记录数据;

scan 'student'
get 'student','95001'

在这里插入图片描述

删除数据

删除列族,因为hbase中没有删除shell命令直接删除指定行的列族信息(包括其中的列的信息),所以需要先将所有指定行的列族信息的所有信息,然后使用delete一个一个作删除。

delete 'student' ,’95003’,’Sname:123’

delete 'student' ,’95003’,’Sname’

student为表名,95003为行键,Sname为列族名,123为列名

删除表有两步,第一步先让该表不可用,第二步删除表。

    disable 'student'  
    drop 'student'

查询表历史数据

查询表的历史版本,需要两步。
1、在创建表的时候,指定保存的版本数(假设指定为5)

create 'teacher',{NAME=>'username',VERSIONS=>5}

2、插入数据然后更新数据,使其产生历史版本数据,注意:这里插入数据和更新数据都是用put命令

    put 'teacher','91001','username','Mary'
    put 'teacher','91001','username','Mary1'
    put 'teacher','91001','username','Mary2'
    put 'teacher','91001','username','Mary3'
    put 'teacher','91001','username','Mary4'  
    put 'teacher','91001','username','Mary5'

3、查询时,指定查询的历史版本数。默认会查询出最新的数据。(有效取值为1到5)

  get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5}

在这里插入图片描述

退出HBase数据库表操作

exit

JAVA API

配置环境

复制/usr/local/hbase/lib出来,IDEA导入client-facing-thirdparty文件夹下的包和根目录下的所有包。 导入lib下的所有包。
org.apache.hadoop.conf.Configuration
引入如图的包
org.apache.hadoop.hbase.HBaseConfiguration
在这里插入图片描述

实验代码

错误

1

java.lang.NoClassDefFoundError: com/ctc/wstx/io/InputBootstrapper
还是导入包的问题 把hadoop/common/lib下的包导入

2

Exception in thread “main” java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

删除低版本的guava.jar 其中一个在hbase的lib里

hive中guava.jar位置/hive/lib/
hadoop中guava.jar位置/hadoop/share/hadoop/common/lib/

3

java.lang.NoSuchMethodError: org.apache.hadoop.security.HadoopKerberosName.setRuleMechanism(Ljava/lang/String;)V
包的问题在这里插入图片描述

删除hbase里的这个包 hadoop-auth,保留hadoop里的。

4

zookeeper.ReadOnlyZKClient (ReadOnlyZKClient.java:exec(192)) - 0x436813f3 to 127.0.0.1:2181 failed for get of /hbase/hbaseid, code = CONNECTIONLOSS, retries = 4
hbase错误

5

这个错误是因为hbase是单机配置,要改成分布式配置,并且配置里的hbase.rootdir 里的ip使用虚拟机的名称(对用host里的本机IP)

修改后还是有问题 尝试端口转发 没用
在这里插入图片描述

问题所在是配置zookeeper的配置
在这里插入图片描述

在这里插入图片描述

java本地连接远程Hbase可是返回zookeeper的地址是localhost
https://blog.csdn.net/qq_39161804/article/details/109438529

最终加一句

configuration.set("hbase.zookeeper.quorum", "192.168.2.128:2181");

用户是先访问zookeeper俩获取-ROOT-表的位置信息,然后再访问-ROOT-表,获得.META.表信息,接着访问.META.表,找到所需要的Region具体位置…

这里没有设置指定IP,默认访问了本地IP上的zookeeper,访问不了所以出错。

6

下一个问题16020端口没有开放,端口在本地。
16020端口
查JAVA/PID
在这里插入图片描述查官方文档

https://hbase.apache.org/book.html#configuration
在这里插入图片描述

16020是hbase的region服务器开放的端口。
解决1 改配置hbase-env.xml

<property>
	<name>hbase.zookeeper.quorum</name>
	<value>192.168.2.128:2181</value>
</property>

解决2 端口转发16020端口

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐