进入hbase命令行
在hbase的安装目录下
bin/hbase shell
虽然类似sql命令,但所有执行都不需要加分号结束,有SQL编写强迫症的需要注意适应
创建表 person,列簇 info
create 'person','info'
disable 'person'
drop 'person'
truncate 'person'
describe 'person'
查看结果如下
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)
put 'person','1','info:name','ergou'
put 'person','1','info:age','18'
put 'person','2','info:name','goudan'
put 'person','2','info:work','chiruanfan'
scan 'person'
查看到的结果如下
ROW | COLUMN+CELL |
---|---|
1 | column=info:age, timestamp=1703231425295, value=18 |
1 | column=info:name, timestamp=1703231425266, value=ergou |
2 | column=info:name, timestamp=1703231425321, value=goudan |
2 | column=info:work, timestamp=1703231426561, value=chiruanfan |
属性 | 说明 |
---|---|
Row | 数据检索的依据,每行数据都必须有RowKey |
Column | 由Column Family(列族)和Column Qualifier(列限定符)构成 |
Time Stamp | 时间版本。如果写入时不指定,系统会自动将写入Hbase的时间添加到该字段 |
Cell | 数据值(没有数据类型都以字节数组进行存储) |
-- 按照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'
put 'person','1','info:age','80'
deleteall 'person','1'
delete 'person','1','info:age'
alter 'person',{NAME=>'info',VERSIONS=>3}
get 'person','1',{COLUMN=>'info:name',VERSIONS=>3}
在初次接触Hbase的时候猜测beeline是用来操作hive的sql工具,那hbase是有也有相应的工具呢。必然有
!tables
!table也可以
CREATE TABLE IF NOT EXISTS person(
id VARCHAR primary key,
name VARCHAR);
hbase会自动将对象名转换为大写。如果想要小写的表名需要加双引号
upsert into person values('1001','goudan');
select * from person
quit!
发现一个问题,之前在Hbase创建的表在phoenix中看不到了。看来这玩意和hive与beeline的关系还不太一样。百度原来是要建立映射才能看得到Hbase中的表。
create view "person"
(
id varchar primary key
,"info"."name" varchar
,"info"."age" varchar
,"info"."work" varchar
);
虽然在定义的时候没有定义id,但是RowKey是必然会有的
创建视图虽然可以访问之前Hbase的数据,但是仅能查看不能对数据进行DML操作。
create table "person"
(
id varchar primary key
,"info"."name" varchar
,"info"."age" varchar
,"info"."work" varchar
) column_encoded_bytes=0;
column_encoded_bytes=0 可以防止在列映射的过程中发生错误
phoenix在进行表创建的时候,会将用户指定的列名替换为较短的名字,这样可以节省数据的存储空间。用户查询的时候会在底层进行列名转换。
新建表默认开启列映射,如需关闭则需要添加 column_encoded_bytes=0 做限制
也可以直接添加hbase参数配置phoenix.default.column.encoded.bytes.attrib 做永久限制,但不建议如此做。
<property>
<name>phoenix.default.column.encoded.bytes.attribname>
<value>0value>
property>
hive和hbase各自都有自己的优势。hive方便数据查询,但查询性能较慢,更适用于OLAP的诉求。Hbase的访问相较与hive是快的,但同时操作有限且不便于数据的修改。所以有的时候需要将hive和Hbase打通,从而方便分析使用。
创建软链接,让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
修改hive中的zookeeper属性(hive-site.xml)
<property>
<name>hive.zookeeper.quorumname>
<value>hadoop102,hadoop103,hadoop104value>
<description>The list of ZooKeeper servers to talk to. This is only needed for read/write locks.description>
property>
<property>
<name>hive.zookeeper.client.portname>
<value>2181value>
<description>The port of ZooKeeper servers to talk to. This is only needed for read/write locks.description>
property>
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");
注意:不可以将数据load到该表中。且该表在Hbase中可见但在phoenix中不可见