最近一次发现导入10几T数据到HBase(自动分配regions模式)表中,该表只占用55个resions匪夷所思, 根据每个resions存储文件的大小10G( hbase.hregion.max.filesize设置的值是10G), hbase表压缩方式为:“SNAPPY”格式.此类压缩比在60%左右. 根据以上计算,数据表最少分配600个resions. 实际通过查看hbase表各个resion的文件大小,发现有的regions文件有600G的数据量,这种数据存储严重异常.
通过数天排查(每个resionServer最大可以分配的resions个数),测试环境的集群中各种尝、验证,最终使用指定分隔点个数去分配regions的方式成功导入数据,并且数据分配也很均衡. (分隔点如何确定:根据全量的rowkey分割600份,然后抽取每份的最后一个rowkey值作为分割点)
此次排查思路主要参考了之前成功导入数据表的meta信息,
查看某个表的meta信息:echo "scan 'hbase:meta'" | hbase shell | grep 'hbase_table_name' , 然后观察每个regions的 startKey 及 endKey
根据hbase的建表手册, 创建hbase表时预分regions有俩种方式:
1、如果整个导入的数据集是已知的,并且也知道所有Hbase表的Rowkey的分布情况,通过Region的startkey和endkey的方式预分区,此种方式完全可以满足存储在每个regions上的数据均衡分布, 这种方式有2种建表方式, 如果分割点比较少,可以在建表语句中直接指定,
1.1、例如:
create 'card_active_quota', {NAME =>'n',VERSIONS => 1, COMPRESSION => 'SNAPPY'}, {SPLITS => ['10', '20', '30', '40']}
以上的分割点是:第一resions是 startkey=>'' endKey=>'10',第二个regions的startKey => '10' endKey => '20'依次类推, 第五个regions的startkey=>'40' endKey=>''. 规律是第一个region是没有startkey的,最后一个region是没有stopkey的
如果分割点比较多,可以通过splits_file的文件行数预分区regions个数,例如像我们此次通过计算可能需要599个分割点,那么通过把分割点(文件中每一行代表一个分割点)写入文件中,创建表时直接引用分割文件即可,
1.2、例如:
create 'card_active_quota', {NAME =>'n',VERSIONS => 1, COMPRESSION => 'SNAPPY'}, {SPLITS_FILE => '/home/part/splits.txt'}
注意:splits.txt 内容格式:
每一行都认为是分隔点:
400258AD77AD659C7D9B8BB2D718488A016D9074DD39F2AC391AB573C2908017
7FF9001D147A700B73BDD18378C62C47C8D22680718503A7F6E078186086029A
BFEDF91AFE392EDF60CE378C8D2E5CAFDB8D6F0B249CC9A8AF4962788B1D8108
.......
注意:如果 进入hbase shell 是包含 splits.txt 的目录下,那么可以在建表语句中使用
SPLITS_FILE => 'splits.txt' ,同样也可以指定本地文件的绝对路径.
2、导入的数据集是规则的,那么可以通过Hbase的分区算法方式进行分割:目前系统有2种:1、HexStringSplit,2、UniformSplit,3 或在自定义一个实现类的方式进行预分区.如果将来的数据存储是十六进制的那么比较使用 “HexStringSplit”,作为pre-split的算法.
建表语句:
create 'card_active_quota', {NAME => 'n', VERSIONS => 1, COMPRESSION => 'SNAPPY'}, {NUMREGIONS => 3, SPLITALGO => 'HexStringSplit'}".
分享到:
相关推荐
3. **配置HBase**:编辑`conf/hbase-site.xml`,设置HBase的主配置,如`hbase.rootdir`(HDFS中的HBase目录)和`hbase.zookeeper.quorum`(Zookeeper集群地址)。 4. **启动与停止**:使用`start-hbase.sh`启动HBase...
4. 分布式架构:HBase能够自动分区和复制数据,以实现水平扩展和高可用性。 5. 弹性扩展:根据数据量的增长,可以通过增加节点来扩展集群。 6. MapReduce支持:HBase与Hadoop生态系统紧密集成,支持MapReduce进行...
HBase(hbase-2.4.9-bin.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System...
4. **启动服务**:通过bin目录下的start-hbase.sh脚本启动HBase集群,包括Master节点和RegionServer节点。 5. **监控与管理**:HBase提供了Web UI,用户可以访问http://localhost:16010查看集群状态。此外,命令行...
Q:缺失hbase.version文件 A:加上选项 -fixVersionFile 解决 Q:如果一个region即不在META表中,又不在hdfs上面,但是在regionserver的online region集合中 A:加上选项 -fixAssignments 解决 Q:如果一个...
基于kafka和spark streaming和hbase的日志统计分析系统.zip基于kafka和spark streaming和hbase的日志统计分析系统.zip基于kafka和spark streaming和hbase的日志统计分析系统.zip基于kafka和spark streaming和hbase的...
5. **表分区**:通过Region进行分区,每个Region包含一部分行,当表变得非常大时,Region会自动分裂,确保性能不因数据量增长而下降。 6. **Bigtable启发**:HBase的设计灵感来源于Google的Bigtable,但HBase是开源...
每个Region Server负责一部分数据,当数据量增长时,可以通过分裂Region来分配负载。 3. **强一致性**:HBase使用ZooKeeper进行协调,确保了在分布式环境下的数据一致性。写操作首先写入内存,然后刷入HLog,最后...
HBase是Apache Hadoop生态系统中的一个分布式、版本化、基于列族的NoSQL数据库,它在大规模数据存储和实时查询方面表现出色。"hbase-1.2.0-cdh5.14.0.tar.gz" 是针对Cloudera Distribution Including Apache Hadoop ...
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储...
例如,设置HDFS为默认的Hadoop安装:`<property><name>hbase.rootdir</name><value>hdfs://namenode_host:port/hbase</value></property>`。 启动HBase集群,需要启动Zookeeper和HBase守护进程: ```bash # 启动...
2. Region管理:HBase的Region是数据分区的基本单位,你可以通过Ambari监控Region分布,进行手动Split或Merge操作。 3. 性能调优:通过调整HBase的配置参数,如MemStore大小、BlockCache设置等,可以优化读写性能。...
7. **刷写与合并策略**:`hbase.hregion.flushsize`设定Region刷写到HDFS的阈值,`hbase.hregion.majorcompaction.interval`和`hbase.hregion.minorcompaction.interval`分别是大、小合并的间隔时间,影响数据的紧凑...
- **预读取(Block Prefetching)**:在读取数据时,预先加载相邻的数据块,减少I/O延迟。 - **Compaction**:合并Region内的文件,减少磁盘碎片和读取时间。 6. **安全与监控**: - **访问控制**:支持ACL...
* hbase.master.logcleaner.plugins:org.apache.hadoop.hbase.master.cleaner.TimeToLiveLogCleaner, org.apache.hadoop.hbase.master.cleaner.TimeToLiveProcedureWALCleaner,这个参数指定了预写日志的清理插件。...
在单机模式下,可以使用`start-hbase.sh`命令;在分布式模式下,需要先启动Hadoop服务,然后启动HBase: ```bash # 单机模式 start-hbase.sh # 分布式模式 start-dfs.sh start-yarn.sh start-hbase.sh ``` HBase...
<name>hbase.cluster.distributed <value>true <name>hbase.zookeeper.quorum <value>zookeeper_server_host:port ``` 请替换 `namenode_host` 和 `zookeeper_server_host` 为实际的主机名或IP地址,以及...
HBase是Apache软件基金会的一个开源项目,是一款基于Google Bigtable理念设计的分布式列式数据库,专为处理海量数据而设计。HBase属于Apache Hadoop生态系统的一部分,与HDFS(Hadoop Distributed File System)紧密...