HBase是一个分布式、面向列的开源数据库,其基于Hadoop的分布式文件系统(HDFS)进行存储。它既具有分布式、可扩展、高可靠性等优点,也具备NoSQL、schema-free、实时访问等特性。HBase遵循Google BigTable的计算模型,可以用于存储非常大的数据集,适用于不断积累的数据,提供高效地实时读写访问。HBase作为Hadoop生态系统中的一个重要组成部分,可与Hadoop及其它组件如Hive、Pig、Storm等相互配合,构建具有高性能、可靠性和扩展性的大数据处理平台。
在这里不在赘述。
解压安装包
$ tar xzvf hbase-2.5.1-bin.tar.gz
$ cd hbase-2.4.0/
配置HBASE_HOME环境变量
vi /etc/profile
export HBASE_HOME=/opt/bigdata/hbase-2.5.1
export PATH=$PATH:$HBASE_HOME/bin
source /etc/profile
修改hbase-env.sh
最好使用jdk1.8,配置jdk8的路径
export JAVA_HOME=/usr/jdk64/jdk1.8.0_112
修改hbase-site.xml
默认不用修改。
bin/start-hbase.sh
启动成功:
[root@node01 conf]# start-hbase.sh
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/bigdata/hadoop-2.6.5/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/bigdata/hbase-2.5.1/lib/client-facing-thirdparty/log4j-slf4j-impl-2.17.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
running master, logging to /opt/bigdata/hbase-2.5.1/logs/hbase-root-master-node01.out
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/bigdata/hadoop-2.6.5/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/bigdata/hbase-2.5.1/lib/client-facing-thirdparty/log4j-slf4j-impl-2.17.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
2023-04-16 07:03:20,996 INFO [main] master.HMaster (HMaster.java:main(3289)) - STARTING service HMaster
2023-04-16 07:03:21,001 INFO [main] util.VersionInfo (VersionInfo.java:logVersion(112)) - HBase 2.5.1
2023-04-16 07:03:21,001 INFO [main] util.VersionInfo (VersionInfo.java:logVersion(112)) - Source code repository git://buildbox.localdomain/home/apurtell/tmp/RM/hbase revision=894ac15342ae9ac1e0d7c827c00fda4b83627758
2023-04-16 07:03:21,001 INFO [main] util.VersionInfo (VersionInfo.java:logVersion(112)) - Compiled by apurtell on Mon Oct 17 15:41:08 PDT 2022
2023-04-16 07:03:21,001 INFO [main] util.VersionInfo (VersionInfo.java:logVersion(112)) - From source with checksum 57c1d2c9c03f18d35860e6733447968d1711dae96b0b7d35b2d1e029a5d91423cf65a6063cfbe3b736907b7b20fb94d82a443b65982f4c973a72fb71cd7f2e47
http://node01:16010/master-status
hbase shell
启动报错
版本不兼容
需要换版本 hbase shell
LoadError: load error: irb/completion -- java.lang.IncompatibleClassChangeError: Implementing class
require at org/jruby/RubyKernel.java:974
require at uri:classloader:/METAINF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:54
<main> at classpath:/jar-bootstrap.rb:42
[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
解决方法
#hadoop目录下存在老版本jline:
cd $HADOOP_HOME/share/hadoop/yarn/lib
rm -f jline-0.9.94.jar
hbase(main):030:0> help
常用命令
#命令组 COMMAND GROUPS:
Group name: general
Commands: processlist, status, table_help, version, whoami
# ddl表定义语言 Group name: ddl
Commands: alter, alter_async, alter_status,
create,
describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, list_regions, locate_region, show_filters
#数据库 Group name: namespace
Commands:
alter_namespace,
create_namespace,
describe_namespace,
drop_namespace, list_namespace, list_namespace_tables
#操作语言 Group name: dml
Commands:
append,
count,
delete, deleteall, get, get_counter, get_splits, incr,
put, #插入数据
scan, #查询
truncate #删除表数据
hbase(main):009:0* create 'user','cf'
Created table user
Took 0.7635 seconds
=> Hbase::Table - user
hbase(main):010:0> list 'user'
TABLE
user
1 row(s)
Took 0.0328 seconds
=> ["user"]
hbase(main):012:0> describe 'user'
Table user is ENABLED
user
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_
VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BL
OCKCACHE => 'true', BLOCKSIZE => '65536'}
1 row(s)
Took 0.1756 seconds
hbase(main):013:0> put 'user','1','cf:username','elite'
Took 0.1000 seconds
hbase(main):014:0> put 'user','1','cf:age','22'
Took 0.0052 seconds
hbase(main):015:0> put 'user','1','cf:address','xxpro'
Took 0.0047 seconds
One of the ways to get data from HBase is to scan. Use the scan command to scan the table for data. You can limit your scan, but for now, all data is fetched.
hbase(main):016:0> scan 'user'
ROW COLUMN+CELL
1 column=cf:address, timestamp=1681776414492, value=xxpro
1 column=cf:age, timestamp=1681776404658, value=22
1 column=cf:username, timestamp=1681776395675, value=elite
hbase(main):024:0> scan 'user'
ROW COLUMN+CELL
1 column=cf:address, timestamp=1681776414492, value=xxpro
1 column=cf:age, timestamp=1681776404658, value=22
1 column=cf:username, timestamp=1681776540360, value=elite2
2 column=cf:address, timestamp=1681776520152, value=xx2pro
2 column=cf:age, timestamp=1681776533412, value=24
2 column=cf:username, timestamp=1681776546625, value=elite2
2 row(s)
Took 0.0144 seconds
hbase(main):025:0> get 'user','2'
COLUMN CELL
cf:address timestamp=1681776520152, value=xx2pro
cf:age timestamp=1681776533412, value=24
cf:username timestamp=1681776546625, value=elite2
1 row(s)
Took 0.0069 seconds
If you want to delete a table or change its settings, as well as in some other situations, you need to disable the table first, using the disable command. You can re-enable it using the enable command.
#创建表
hbase(main):031:0> create 'test','cf'
Created table test
Took 0.7353 seconds
=> Hbase::Table - test
#看表描述是enabled状态
hbase(main):032:0> desc 'test'
Table test is ENABLED
test
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false',
KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL
=> 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON
_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN
=> 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}
1 row(s)
Took 0.0253 seconds
# 直接删除表提示 Table test is enabled. Disable it first.
hbase(main):033:0> drop 'test'
ERROR: Table test is enabled. Disable it first.
Drop the named table. Table must first be disabled:
hbase> drop 't1'
hbase> drop 'ns1:t1'
Took 0.0192 seconds
#禁用表
hbase(main):035:0> disable 'test'
Took 0.4833 seconds
# 删除表
hbase(main):036:0> drop 'test'
Took 0.2657 seconds
quit
$ ./bin/stop-hbase.sh