MacOS安装并使用HBase

安装 HBase

brew install hbase
# 安装目录 /usr/local/Cellar/hbase/2.*.*/
# 配置java路径
vi /usr/local/Cellar/hbase/x.x.x/libexec/conf/hbase-env.sh

export JAVA_HOME="xxxx"

配置

vi /usr/local/Cellar/hbase/x.x.x/libexec/conf/hbase-site.xml

<configuration>
  <property>
    <name>hbase.rootdir</name>
    //这里设置让HBase存储文件的地方
    <value>file:///Users/jordan/Downloads/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    //这里设置让HBase存储内建zookeeper文件的地方
    <value>/Users/jordan/Downloads/zookeeper</value>
  </property>
</configuration>

启动

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

/usr/local/Cellar/hbase/x.x.x/bin/hbase shell

HBase Shell 基础操作

tool

compact
flush
major_compact

ddl

create_namespace '命名空间'
list_namespace
drop_namespace '命名空间'
# drop namespace, the namespace must be empty
create 
# create '命名空间:表名', '列族', '列族'
# 表至少要有一个列族
drop
# drop '表名' 删除前需先 disable '表名'
alter
# alter '表名', {NAME=> '列族', VERSIONS=> x}
describe
# describe '表名'
list

dml

put
# put '命名空间:表名', 'rowkey', '列族:列', '值'
# rowkey相同就认做同一条数据, rowkey相同视为修改
delete
delteall
# delete '命名空间:表名', 'rowkey', '列族:列'
scan
# scan '命名空间:表名' [ ,{STARTROW=>'rowkey', STOPROW=>'rowkey'} ]
# 范围 左闭右开, rowkey字典序
# 扫描全表

get
# get '命名空间:表名', 'rowkey' [, '列']
truncate
列簇设计

追求的原则是:目前Hbase官方建议不超过2~3个column family。因为某个column family在flush的时候,它邻近的column family也会因关联效应被触发flush,最终导致系统产生更多的I/O。

最优设计是:将所有相关性很强的 key-value 都放在同一个列簇下,这样既能做到查询效率 最高,也能保持尽可能少的访问不同的磁盘文件。

以用户信息为例,可以将必须的基本信息存放在一个列族,而一些附加的额外信息可以放在 另一列族

Rowkey 设计三原则

一条数据的唯一标识就是 rowkey,那么这条数据存储于哪个分区,取决于 rowkey 处于哪个一个预分区的区间内,设计 rowkey 的主要目的, 就是让数据均匀的分布于所有的 region 中,在一定程度上防止数据倾斜。接下来我们就谈一谈 rowkey 常用的设计方案。

rowkey 长度原则

Rowkey 是一个二进制码流,Rowkey 的长度被很多开发者建议说设计在 10~100 个字节,不过建议是越短越好,不要超过 16 个字节,存为byte[]字节数组,一般设计成定长的。

原因如下:

1、数据的持久化文件 HFile 中是按照 KeyValue 存储的,如果 Rowkey 过长比如 100 个字 节,1000 万列数据光 Rowkey 就要占用 100*1000 万=10 亿个字节,将近 1G 数据,这会极大 影响 HFile 的存储效率;

2、MemStore 将缓存部分数据到内存,如果 Rowkey 字段过长内存的有效利用率会降低, 系统将无法缓存更多的数据,这会降低检索效率。因此 Rowkey 的字节长度越短越好。

3、目前操作系统是都是 64 位系统,内存 8 字节对齐。控制在 16 个字节,8 字节的整数 倍利用操作系统的最佳特性。

rowkey 散列原则

如果 Rowkey 是按时间戳的方式递增,不要将时间放在二进制码的前面,建议将 Rowkey 的高位作为散列字段,由程序循环生成,低位放时间字段,这样将提高数据均衡分布在每个 Regionserver 实现负载均衡的几率。如果没有散列字段,首字段直接是时间信息将产生所有 新数据都在一个 RegionServer 上堆积的热点现象,这样在做数据检索的时候负载将会集中 在个别 RegionServer,降低查询效率。

row key是按照字典序存储,因此,设计row key时,要充分利用这个排序特点,将经常一起读取的数据存储到一块,将最近可能会被访问的数据放在一块。

举个例子:如果最近写入HBase表中的数据是最可能被访问的,可以考虑将时间戳作为row key的一部分,由于是字典序排序,所以可以使用Long.MAX_VALUE - timestamp作为row key,这样能保证新写入的数据在读取时可以被快速命中。

rowkey 唯一原则

必须在设计上保证其唯一性。rowkey 是按照字典顺序排序存储的,因此,设计 rowkey 的时候,要充分利用这个排序的特点,将经常读取的数据存储到一块,将最近可能会被访问 的数据放到一块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值