Hbase用法总结

Hbase用法总结

一、Hbase命令

进入hbase命令行

在hbase的安装目录下

bin/hbase shell

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

1、DDL操作

(1)创建表

创建表 person,列簇 info

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

2、DML操作

(1)查看表结构
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)
(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'
(3)查看数据
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 数据值(没有数据类型都以字节数组进行存储)
(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'
(5)修改数据
put 'person','1','info:age','80'
(6)删除数据
deleteall 'person','1'
delete 'person','1','info:age' 
(7)将info列族中的数据存放3个版本
alter 'person',{NAME=>'info',VERSIONS=>3}
get 'person','1',{COLUMN=>'info:name',VERSIONS=>3}

二、phoneix操作

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

1、基本操作

(1)查看表列表
!tables

!table也可以

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

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

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

2、映射

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

(1)创建视图进行关联
create view "person"
(
    id varchar primary key
   ,"info"."name" varchar
   ,"info"."age" varchar
   ,"info"."work" varchar
);

虽然在定义的时候没有定义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;

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和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

修改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>

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");

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

你可能感兴趣的:(大数据,hbase,网络,数据库)