当前位置:   article > 正文

Hbase用法总结_hbase怎么用

hbase怎么用

Hbase用法总结

一、Hbase命令

进入hbase命令行

在hbase的安装目录下

bin/hbase shell
  • 1

虽然类似sql命令,但所有执行都不需要加分号结束,有SQL编写强迫症的需要注意适应

1、DDL操作

(1)创建表

创建表 person,列簇 info

create 'person','info'
  • 1
(2)删除表
disable 'person'
drop 'person'
  • 1
  • 2
(3)清空表
truncate 'person'
  • 1

2、DML操作

(1)查看表结构
describe 'person'
  • 1

查看结果如下

Table person is ENABLED                                                                                                                                                
person                                                                                                                                                                 
COLUMN FAMILIES DESCRIPTION                                                                                                                                            
{NAME => 'info', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DAT
A_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)

QUOTAS                                                                                                                                                                 
0 row(s)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
(2)插入数据
put 'person','1','info:name','ergou'
put 'person','1','info:age','18'
put 'person','2','info:name','goudan'
put 'person','2','info:work','chiruanfan'
  • 1
  • 2
  • 3
  • 4
(3)查看数据
scan 'person'
  • 1

查看到的结果如下

ROWCOLUMN+CELL
1column=info:age, timestamp=1703231425295, value=18
1column=info:name, timestamp=1703231425266, value=ergou
2column=info:name, timestamp=1703231425321, value=goudan
2column=info:work, timestamp=1703231426561, value=chiruanfan
属性说明
Row数据检索的依据,每行数据都必须有RowKey
Column由Column Family(列族)和Column Qualifier(列限定符)构成
Time Stamp时间版本。如果写入时不指定,系统会自动将写入Hbase的时间添加到该字段
Cell数据值(没有数据类型都以字节数组进行存储)
(4)选择查看
-- 按照RowKey筛选查看(左闭右开区间)
scan 'person',{STARTROW => '1', STOPROW  => '2'}
-- 查看RowKey为 1 的数据
get 'person','1'
-- 查看RowKey为 1 的列簇 info
get 'person','1','info'
-- 查看RowKey为 1 的列簇 info,列 age
get 'person','1','info:age'
-- 查看数据条目数
count 'person'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
(5)修改数据
put 'person','1','info:age','80'
  • 1
(6)删除数据
deleteall 'person','1'
delete 'person','1','info:age' 
  • 1
  • 2
(7)将info列族中的数据存放3个版本
alter 'person',{NAME=>'info',VERSIONS=>3}
get 'person','1',{COLUMN=>'info:name',VERSIONS=>3}
  • 1
  • 2

二、phoenix操作

在初次接触Hbase的时候猜测beeline是用来操作hive的sql工具,那hbase是有也有相应的工具呢。必然有

1、基本操作

(1)查看表列表
!tables
  • 1

!table也可以

(2)创建表
CREATE TABLE IF NOT EXISTS person(
id VARCHAR primary key,
name VARCHAR);
  • 1
  • 2
  • 3

hbase会自动将对象名转换为大写。如果想要小写的表名需要加双引号

(3)插入数据
upsert into person values('1001','goudan');
  • 1
(4)查询数据
select * from person
  • 1
(5)退出
quit!
  • 1

2、映射

发现一个问题,之前在Hbase创建的表在phoenix中看不到了。看来这玩意和hive与beeline的关系还不太一样。百度原来是要建立映射才能看得到Hbase中的表。

(1)创建视图进行关联
create view "person"
(
    id varchar primary key
   ,"info"."name" varchar
   ,"info"."age" varchar
   ,"info"."work" varchar
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

虽然在定义的时候没有定义id,但是RowKey是必然会有的

创建视图虽然可以访问之前Hbase的数据,但是仅能查看不能对数据进行DML操作。

(2)创建同名表
create table "person"
(
    id varchar primary key
   ,"info"."name" varchar
   ,"info"."age" varchar
   ,"info"."work" varchar
) column_encoded_bytes=0;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

column_encoded_bytes=0 可以防止在列映射的过程中发生错误

phoenix在进行表创建的时候,会将用户指定的列名替换为较短的名字,这样可以节省数据的存储空间。用户查询的时候会在底层进行列名转换。

新建表默认开启列映射,如需关闭则需要添加 column_encoded_bytes=0 做限制

也可以直接添加hbase参数配置phoenix.default.column.encoded.bytes.attrib 做永久限制,但不建议如此做。

<property>
    <name>phoenix.default.column.encoded.bytes.attrib</name>
    <value>0</value>
 </property>
  • 1
  • 2
  • 3
  • 4

三、hive和hbase对接

hive和hbase各自都有自己的优势。hive方便数据查询,但查询性能较慢,更适用于OLAP的诉求。Hbase的访问相较与hive是快的,但同时操作有限且不便于数据的修改。所以有的时候需要将hive和Hbase打通,从而方便分析使用。

1、对接配置

创建软链接,让HIve有Hbase的jar的相关操作

ln -s $HBASE_HOME/lib/hbase-common-1.3.1.jar  $HIVE_HOME/lib/hbase-common-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-server-1.3.1.jar $HIVE_HOME/lib/hbase-server-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-client-1.3.1.jar $HIVE_HOME/lib/hbase-client-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-protocol-1.3.1.jar $HIVE_HOME/lib/hbase-protocol-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-it-1.3.1.jar $HIVE_HOME/lib/hbase-it-1.3.1.jar
ln -s $HBASE_HOME/lib/htrace-core-3.1.0-incubating.jar $HIVE_HOME/lib/htrace-core-3.1.0-incubating.jar
ln -s $HBASE_HOME/lib/hbase-hadoop2-compat-1.3.1.jar $HIVE_HOME/lib/hbase-hadoop2-compat-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-hadoop-compat-1.3.1.jar $HIVE_HOME/lib/hbase-hadoop-compat-1.3.1.jar
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

修改hive中的zookeeper属性(hive-site.xml)

<property>
  <name>hive.zookeeper.quorum</name>
  <value>hadoop102,hadoop103,hadoop104</value>
  <description>The list of ZooKeeper servers to talk to. This is only needed for read/write locks.</description>
</property>
<property>
  <name>hive.zookeeper.client.port</name>
  <value>2181</value>
  <description>The port of ZooKeeper servers to talk to. This is only needed for read/write locks.</description>
</property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2、在HIVE中创建Hbase的关联使用表

CREATE TABLE hive_hbase_test(
 id int
,name string
,job string
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job")
TBLPROPERTIES ("hbase.table.name" = "hive_hbase_test");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意:不可以将数据load到该表中。且该表在Hbase中可见但在phoenix中不可见

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号