本文共 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/