以下是工作中使用Hbase遇到的问题记录
目录
HBase常用 Shell 命令
常见问题
删除列族和某一列值:
无法插入Null空值
hbase的主键相同,列值插入会覆盖
hbase shell 列出所有rowkey
truncate清除表数据
Hbase写入报错与zookeeper的连接数
HBase统计表行数(RowCount)的四种方法
HBase常用 Shell 命令
参考文章:HBase常用 Shell 命令
常见问题
删除列族和某一列值:
无法插入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 shell 列出所有rowkey
count 'tablename', INTERVAL=>1
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对所有客户端的连接数限制。
解决方法2:优化ETL工具中hbase与zookeeper的连接
如何查看zookeeper连接数已经有多少了呢?
因为2181是zookeeper的端口,运行如下命令可统计连接数的数量:
netstat -na | grep 2181 | wc -l
可具体确定的zookeeper连接地址来统计客户端的连接数。
HBase统计表行数(RowCount)的四种方法
HBase统计表行数(RowCount)的四种方法