以下是工作中使用Hbase遇到的问题记录

 

目录

 

HBase常用 Shell 命令

常见问题 

删除列族和某一列值:

无法插入Null空值

hbase的主键相同,列值插入会覆盖

hbase shell 列出所有rowkey

truncate清除表数据

Hbase写入报错与zookeeper的连接数

HBase统计表行数(RowCount)的四种方法


 

HBase常用 Shell 命令

参考文章:HBase常用 Shell 命令

 

常见问题 

删除列族和某一列值:

hbase put操作报错空指针异常 hbase null值_zookeeper


无法插入Null空值

向Hbase写入数据时,如果列族值为NULL,那么会报错java.lang.IllegalArgumentException:No columns to insert。

解决方法:在SQL语句中把NULL值过滤。

hbase的主键相同,列值插入会覆盖

测试:name字段为主键,第一次插入Jame:31  Marry:24,

修改hive表字段:Jame:13  Marry:12,

修改hive表后插入hbase,列族值被覆写。

hbase put操作报错空指针异常 hbase null值_hbase put操作报错空指针异常_02

hbase shell 列出所有rowkey

count 'tablename', INTERVAL=>1

hbase put操作报错空指针异常 hbase null值_zookeeper_03

truncate清除表数据

要保留分区应该使用 truncate_preserve 'tablename'命令

truncate命令会默认把表的region置为1

Hbase写入报错与zookeeper的连接数

在执行ETL任务过程中,发现Hbase写入过两周左右的时间就会报错,每次都是重启ETL工具解决。

经排查发现,hbase需要与zookeeper连接,而zookeeper在CDH中有设定最大的连接数限制

解决方法1:可在CDH中修改maxClientCnxns参数

这个配置参数将限制连接到ZooKeeper的客户端的数量,限制并发连接的数量,它通过IP来区分不同的客户端。此配置选项可以用来阻止某些类别的Dos攻击。该参数默认是60,将它设置为0将会取消对并发连接的限制。

首先这个连接数不是针对某个ip的,请注意这个限制的使用范围,

仅仅是单台客户端机器与单台zookeeper服务器之间的连接数限制,(***)

不是针对指定客户端IP,也不是zookeeper集群的连接数限制,

也不是单台zookeeper对所有客户端的连接数限制。

hbase put操作报错空指针异常 hbase null值_hbase put操作报错空指针异常_04

解决方法2:优化ETL工具中hbase与zookeeper的连接 

如何查看zookeeper连接数已经有多少了呢?

因为2181是zookeeper的端口,运行如下命令可统计连接数的数量:

netstat -na | grep 2181 | wc -l

可具体确定的zookeeper连接地址来统计客户端的连接数。

HBase统计表行数(RowCount)的四种方法

HBase统计表行数(RowCount)的四种方法