博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HBase 注意事项
阅读量:4221 次
发布时间:2019-05-26

本文共 2928 字,大约阅读时间需要 9 分钟。

启动HBase注意事项:

HBase中集群的参数配置好后,只要启动master所在的HBase中bin下的start-hbase.sh,启动的时候需要去看下logs下的hbase-root-master-nps.master.log的日志(或者通过下面的基于Web的UI查看log),看启动有无问题,可能的问题如下:

1、RegionServer与Master的时间最大误差时间不能超过3000ms,一旦超过这个值,从节点中启动的hhase的进程少了HRegionServer.

比如:报错的信息如下:

Servernps.slave1,16020,1482565170972 has been rejected; Reported time is too far outof sync with master.  Time difference of87047ms > max allowed of 30000ms

解决办法:

1、同步网络时间

2、Root手动设置系统时间:Date -s “2016-12-24 15:58:00”

 

基于Web的UI

基于Web UI可以查看集群状态以及数据表的服务状态。

设置本机host:

10.206.30.10    nps.master

10.206.30.14    nps.slave1

10.206.30.18    nps.slave2

1、master的UI 默认端口号:60010,在新版中改为:16010

比如:本地docker中的集群的master UI的地址为:

2、region服务器的UI默认的端口号:60030,在新版中改为:16030

 

将Master和HRegionServer服务器分开

一般来说Master节点也可以作为HRegion存储服务器,如果要去掉的话,可以在conf/regionservers中配置为:

nps.slave1

nps.slave2

注意:master的重要性大于slave,master并不需要大存储空间

推荐配置:

Master机器要运行NameNode、SecondNameNode、JobTracker(这个是hadoop mr的)和Hbase的master         推荐24G内存

Slave机器运行:DataNode、TaskTracker和Hbase的HRegionServer推荐24G内存

设置HBase的堆大小

默认是1G大小,通常我们会根据实际内存改大点,在hbase-env.sh文件中修改:

#exportHBASE_HEAPSIZE=1G

exportHBASE_HEAPSIZE=4G

改好后,重启master中的./start-hbase.sh,可以通过Web UI中的页面看到每个服务器的最大的堆大小,以及当前已使用的堆大小。

hbase-env.sh中的其他参数解释:

#配置java目录

exportJAVA_HOME=/data/program/jdk

#配置hadoop目录

exportHADOOP_HOME=/data/program/hadoop

#exportHBASE_SLAVE_SLEEP=0.1

#false表示不适用HBase自带的Zookeeper,自带的是以H开头的

exportHBASE_MANAGES_ZK=false

#HBase的安装目录

exportHBAE_HOME=/data/program/hbase

 

Window使用客户端操作API报错:

[ERROR]2016-12-24 20:06:38,752 [org.apache.hadoop.util.Shell]- Failed to locate thewinutils binary in the hadoop binary path

java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoopbinaries.

解决办法设置hadoop中添加:

 static{

        System.setProperty("hadoop.home.dir","D:\\hadoop");

    }

 

HBase中查看当前集群可用的服务器的个数:

除了在Web UI中可以看到,也可以在hbase shell中输入status查看。

HBase建表的特点

HBase建表的时候,要设置表名和列簇,具体的列(或者叫做限定符)可以不用设置,当然列簇在后期也是可以修改的。

HBase集群所需要的其他相关集群包括:Hadoop集群和ZooKeeper集群

 

HBase和hadoop中的配置文件,如果是以-site.xml结尾表示定位文件,如果是-env.xml结尾的文件表示的环境相关的文件。

HBase中把同一个列簇里面的数据存储在同一目录下,所以获取数据的时候,过滤掉不需要的列簇,只返回需要的列簇应该可以提高性能。

 

HBase列簇的数量设置的越少越好

当前对于两个或两个以上的列簇,HBase并不能很好的处理,这是因为HBase的Flushing(冲洗,即将内存中的数据写入磁盘)和压缩是基于Region的。当一个列簇所存储的数据达到Flushing的阈值时,该表中的所有列簇将同时进行Flushing操作。这将带来不必要的I/O开销,列簇越多,该特性带来的影响越大。对于压缩也是同样的道理。

 

两个列簇数量相差太大的影响

当两个列簇数量差别过大时将会是包含记录数量较少的数据分散在多个Region上,而Region有可能存储在不同的RegionServer上。这样,当进行查询或scan操作的时候,系统的效率会受到一定的影响。该影响的大小具体情况而定。

 

连续的rowKey带来的问题

使用时序或单调行键,那么连续到来的数据将会被分配到同一个Region中,也就是产生了一个写热点。

 

HBase存储的版本数

HBase存储的值,在默认情况下,会存储三个版本(内网docker中默认是1份),这个值可以通过HColumnDescriptor设置。

在HBase shell中查看当前的表结构,用命令desc

{NAME=> 'cf1', BLOOMFILTER => 'ROW', VERSIONS => '5', IN_MEMORY=> 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING =>'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE=> 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}

上述中的VERSIONS=5,表明会存储5份数据,如果不指定版本号将会返回最新的数据。

 

RPC:Remote Procedure Call 远程过程调用,在HBase中客户端与Hbase Regions中常会涉及到这个概念

转载地址:http://phomi.baihongyu.com/

你可能感兴趣的文章
栈与队列的应用——计算表达式的值
查看>>
静态链表——sharing
查看>>
静态链表——sorting
查看>>
DFS——背包问题
查看>>
DFS——选数问题
查看>>
BFS——求矩阵中“块”的个数
查看>>
BFS——走迷宫的最小步数
查看>>
并查集——好朋友
查看>>
关键路径
查看>>
Web前端学习笔记——JavaScript之事件详解
查看>>
Web前端学习笔记——JavaScript之事件、创建元素、节点操作
查看>>
Web前端学习笔记——JavaScript之正则表达式、伪数组、垃圾回收
查看>>
Web前端学习笔记——JavaScript 之继承、函数进阶
查看>>
Web前端学习笔记——JavaScript之面向对象游戏案例:贪吃蛇
查看>>
不做单元测试?小心得不偿失!嵌入式系统单元测试工具,自动生成测试用例
查看>>
一种实用的联网汽车无线攻击方法及车载安全协议
查看>>
光靠欺骗检测是不够的:对抗多目标跟踪的攻击
查看>>
基于微区块链的V2X地理动态入侵检测
查看>>
面向V2C场景的ADAS数字孪生模型构建方法
查看>>
Comma2k19数据集使用
查看>>