提升HBase性能的几个地方

合集下载

如何提高HBase性能

如何提高HBase性能

提高HBase 性能使用LSI® Nytro™ WarpDrive® 闪存加速卡主要结果LSI 进行的测试表明:部署具备Nytro WarpDrive 卡的HBase BucketCache 功能为HBase 环境带来明显的性能优势。

测试结果中,对于数据统一分布,每秒操作数提高达40 倍,平均延迟降低达17 倍。

Apache HBase™是一种横向扩展分布式数据库,旨在实现不间断实时访问大量非结构化大数据的容错能力。

HBase的可扩展性在于支持包含数十亿行以及数百万列的海量数据库表。

分布数据和延迟基于Hadoop Distributed File System (HDFS),HBase用于为服务器集群的分散式HDFS 数据的并行处理提供低延迟随机存取和极其快速的插入和更新的性能。

然而,如果数据集超过可用的DRAM 高速缓存,这种分布式数据可对HBase读访问操作带来明显的性能损失。

挑战在于利用硬盘驱动器(HDD)体系结构有限的读写响应能力来优化低延迟随机及大批量吞吐速率。

满足对HBase的性能需求为了满足对HBase部署项目的严格性能需求,采用了多种方法,但每种方法都有自己的挑战。

打破成本和复杂性障碍的一个解决方案是采用固态PCIe®闪存存储。

每秒I/O数超过硬盘驱动器200倍的固态存储,SSD为打破HBase系统的性能瓶颈提供了现实的解决方案。

为了利用闪存的高性能,HBase的架构中集成了具备独特BucketCache功能的闪存存储。

BucketCache 为主机内存提供补充缓存,作为从主机DRAM(LRU)缓存退出数据的临时缓存。

一方面增加额外的主机内存有助于提高性能,基于闪存的缓存可成倍提高用于HBase Region Server的DRAM有效容量。

这样能够实现更大的工作集,从而比单独使用DRAM和硬盘驱动器更快地处理更大的数据集。

而增加额外内存的方案的每千兆成本比闪存高出约25 倍,易丢失数据,且显著增加服务器能耗,同时由于Java 缓存管理的低效和管理开销,降低了缓存能力。

Hbase关键的几个点

Hbase关键的几个点

Hbase关键的几个点荐书进行时•架构犹如探险,眼界必须超前(留言送书)一. 什么时候需要HBase1. 半结构化或非结构化数据对于数据结构字段不够确定或杂乱无章很难按一个概念去进行抽取的数据适合用HBase。

当业务发展需要增加存储比如一个用户的email,phone,address信息时RDBMS需要停机维护,而HBase支持动态增加.2. 记录非常稀疏RDBMS的行有多少列是固定的,为null的列浪费了存储空间。

而如上文提到的,HBase为null的Column不会被存储,这样既节省了空间又提高了读性能。

3. 多版本数据根据Row key和Column key定位到的Value可以有任意数量的版本值,因此对于需要存储变动历史记录的数据,用HBase就非常方便了。

对于某一值,业务上一般只需要最新的值,但有时可能需要查询到历史值。

4. 超大数据量当数据量越来越大,RDBMS数据库撑不住了,就出现了读写分离策略,通过一个Master专门负责写操作,多个Slave负责读操作,服务器成本倍增。

随着压力增加,Master撑不住了,这时就要分库了,把关联不大的数据分开部署,一些join查询不能用了,需要借助中间层。

随着数据量的进一步增加,一个表的记录越来越大,查询就变得很慢,于是又得搞分表,比如按ID取模分成多个表以减少单个表的记录数。

经历过这些事的人都知道过程是多么的折腾。

采用HBase就简单了,只需要加机器即可,HBase会自动水平切分扩展,跟Hadoop 的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce)。

二. HTable一些基本概念1. Row key行主键,HBase不支持条件查询和Order by等查询,读取记录只能按Row key(及其range)或全表扫描,因此Row key需要根据业务来设计以利用其存储排序特性(Table按Row key字典序排序如1,10,100,11,2)提高性能。

Hbase2.x新特性Hbase常见问题性优化小总结

Hbase2.x新特性Hbase常见问题性优化小总结

Hbase2.x新特性Hbase常见问题性优化⼩总结在很早之前,我曾经写过两篇关于Hbase的⽂章:如果你没有看过,推荐收藏看⼀看。

另外,在我的CSDN有专门的HBase专栏可以系统学习,参考:《Hbase专栏》本⽂在上⾯⽂章的基础上,新增了更多的内容,并且增加了Hbase2.x版本的新功能。

Hbase常见问题集合问: Hbase⼤量写⼊很慢,⼀个列族,每个200多列,⼀秒写30000条数据,使⽤mutate添加数据,clientbuffer缓存⼤⼩为10M,四台测试机,128G内存,分配60G给Hbase,该怎么优化?答:可以使⽤bulkload⽅式写⼊,通过mr程序⽣产hfile⽂件,直接⽤bulkload导⼊⽣成的hfile⽂件,速度⾮常快。

问: hbase⼤规模的丢数据,整个数据库系统都挂掉了,然后发错误⽇志,说Hdfs内部的配置⽂件,hbase.version,丢失了。

⼤家有遇到过类似的问题吗?⾃建的集群。

答:检查⼀下⼀些服务的端⼝有没有暴露到公⽹,是不是集群被攻击了。

⾃建还是有⼀些风险的。

然后检查下⾃⼰的hbase配置。

看看数据的备份情况。

问: start-hbase.sh中有这么⼀段:if [ "$distMode" == 'false' ]then"$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master $@else"$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" $commandToRun zookeeper"$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master"$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \--hosts "${HBASE_REGIONSERVERS}" $commandToRun regionserver"$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \--hosts "${HBASE_BACKUP_MASTERS}" $commandToRun master-backupfidistMode为false时表⽰单机,true时表⽰集群,看脚本好像是单机只启动master,是否是说单机环境下不需要zookeeper,regionserver这些的意思,可是⽹上搜了下⼜有⼈说单机环境下master和 zookeeper会运⾏在同⼀个jvm。

HBase性能优化方法总结

HBase性能优化方法总结

HBase性能优化方法总结本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法。

1. 表的设计1.1 Pre-Creating Regions默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分。

一种可以加快批量写入速度的方法是通过预先创建一些空的regions,这样当数据写入HBase时,会按照region分区情况,在集群内做数据的负载均衡。

有关预分区,详情参见:Table Creation: Pre-Creating Regions,下面是一个例子:[html]view plain copy1.public static boolean createTable(HBaseAdmin admin, HTableDescriptor table, byte[][] splits)2.throws IOException {3. try {4. admin.createTable(table, splits);5. return true;6. } catch (TableExistsException e) {7. ("table " + table.getNameAsString() + " already exists");8. // the table already exists...9. return false;10. }11.}12.13.public static byte[][] getHexSplits(String startKey, String endKey, int numRegions) {14. byte[][] splits = new byte[numRegions-1][];15. BigInteger lowestKey = new BigInteger(startKey, 16);16. BigInteger highestKey = new BigInteger(endKey, 16);17. BigInteger range = highestKey.subtract(lowestKey);18. BigInteger regionIncrement = range.divide(BigInteger.valueOf(numRegions));19.lowestKey = lowestKey.add(regionIncrement);20. for(int i=0; i <numRegions-1;i++) {21. BigInteger key = lowestKey.add(regionIncrement.multiply(BigInteger.valueOf(i)));22. byte[] b = String.format("%016x", key).getBytes();23. splits[i] = b;24. }25. return splits;26.}1.2 Row KeyHBase中row key用来检索表中的记录,支持以下三种方式:•通过单个row key访问:即按照某个row key键值进行get操作;•通过row key的range进行scan:即通过设置startRowKey和endRowKey,在这个范围内进行扫描;•全表扫描:即直接扫描整张表中所有行记录。

hbase 使用场景

hbase 使用场景

hbase 使用场景
HBase是一个分布式的、面向列的数据库,它在大数据存储和分析领域有着广泛的应用。

以下是 HBase 的一些使用场景:
1. 实时数据处理:HBase 支持高并发的读写操作,可以快速处理海量的实时数据。

一些实时数据处理场景,例如实时日志分析、实时数据监控等,都可以使用 HBase 实现。

2. 大数据存储:HBase 适合存储大规模的结构化数据,例如用户行为数据、日志数据等。

由于 HBase 是分布式的,可以轻松地实现数据的横向扩展,支持 PB 级别的数据存储。

3. 数据库缓存:HBase 可以作为数据库的缓存层,将数据缓存在内存中,提高访问速度和效率。

在读写频繁的场景下,使用 HBase 作为缓存层可以有效减轻数据库的负担。

4. 时序数据存储:HBase 支持按时间顺序存储数据,特别适合存储时间序列数据,例如传感器数据、股票行情数据等。

5. 图数据库:HBase 支持快速的图遍历和查询操作,可以作为图数据库使用。

在社交网络、推荐系统等场景中,使用 HBase 作为图数据库可以提高查询效率。

总之,HBase 在大数据存储和分析领域有着广泛的应用,可以满足各种不同的数据存储需求。

- 1 -。

hbase概述

hbase概述

hbase概述HBase是Apache Hadoop生态系统中的一个分布式非关系型数据库。

它是以Google的Bigtable为基础实现的,旨在为大规模分布式系统提供高可靠性、高性能的数据存储和处理能力。

HBase的设计目标是适用于海量数据环境下的随机实时读写,并能够容忍硬件故障。

HBase的特点和优势主要包括以下几个方面:1.分布式架构:HBase使用分布式架构来存储数据,数据可以水平扩展到数千台机器上。

它采用了Hadoop的HDFS(Hadoop Distributed File System)作为底层存储,可以自动在集群中多节点上复制数据,实现分布式存储和高可靠性。

2.高可扩展性:由于HBase采用分布式架构,可以通过简单地增加集群中的机器来扩展系统的容量和性能。

通过添加更多的Region Server节点,HBase能够支持PB级别的数据规模。

3.列式存储:HBase将数据以列式存储在磁盘上,相比传统的行式数据库,这种存储方式在某些场景下可以提供更好的查询性能。

此外,HBase还支持列族的概念,可以将相关的列进行组织,提高查询效率。

4.高性能读写:HBase支持高性能的读写操作,可以满足实时查询和更新的需求。

HBase的数据模型和存储方式使得它在随机读写方面表现出色,适合处理大量的随机访问操作。

5.强一致性:HBase提供强一致性的数据一致性模型,即读取操作总是可以看到最新的数据。

这种特性使得HBase适用于许多需要数据一致性的应用场景,如金融、电信等领域。

6.数据复制和容错:HBase采用副本机制来实现数据的复制和容错。

可以将数据副本存储在不同的Region Server上,以提高系统的容错能力和可靠性。

当某个副本节点发生故障时,可以自动切换到其他副本节点进行读写操作。

7.可伸缩的数据模型:HBase数据模型是非常灵活和可伸缩的,可以存储具有不同结构的数据。

HBase支持动态添加和删除列族,以及在行级别上进行事务处理。

阐述hbase的基本特点和概念。

阐述hbase的基本特点和概念。

HBase是一个分布式的、面向列的开源数据库存储系统,具有高可靠性、高性能和可伸缩性,它可以处理分布在数千台通用服务器上的PB级的海量数据。

以下是HBase的基本特点和概念:1.高可靠性:HBase使用Hadoop分布式文件系统(HDFS)作为其文件存储系统,具有高可靠性。

它利用Zookeeper作为协同服务,确保在系统出现故障时,数据不会丢失。

2.高性能:HBase具有高性能,可以在廉价的PC Server上搭建大规模结构化存储集群。

它使用Hadoop MapReduce来处理海量数据,确保数据能够快速地被访问和处理。

3.面向列:HBase是一个面向列的数据库,这意味着它以列族的形式存储数据,而不是以行的形式存储。

这使得HBase非常适合于处理大型数据集,因为它可以更快地访问和过滤数据。

4.可伸缩性:HBase可以轻松地扩展到数千台服务器,使其能够处理PB级别的数据。

这使得HBase成为处理大规模数据的理想选择。

5.适合非结构化数据存储:HBase不限制存储的数据的种类,允许动态的、灵活的数据模型。

它适合于存储非结构化数据,如文本、图像或音频等。

6.主从架构:HBase是主从架构,其中HMaster作为主节点,HRegionServer作为从节点。

HMaster负责协调和分配任务给各个HRegionServer,而HRegionServer则负责处理和存储数据。

7.多版本数据:HBase为null的记录不会被存储,同时它也支持多版本号数据。

这使得HBase可以方便地存储变动历史记录,比如用户的Address变更。

总的来说,HBase是一个非常强大和灵活的数据库系统,适用于处理大规模的非结构化数据。

hbase高可用原理

hbase高可用原理

hbase高可用原理HBase(Hadoop数据库)的高可用原理包括以下几个方面:1. 数据复制:HBase使用Hadoop的HDFS作为底层存储,HDFS自身提供了数据复制机制。

当一个数据块被写入HDFS时,会自动对其进行多次复制,默认情况下是3次。

这样可以确保即使在某个节点出现故障时,仍然可以从其他节点读取数据。

2. HBase主从复制:在HBase中,一个RegionServer可以托管多个Region,而每个Region有多个副本。

HBase使用主从复制机制,将主副本存储在不同的RegionServer上。

当主副本所在的RegionServer发生故障时,HBase可以通过切换到副本来保证数据的可用性。

3. ZooKeeper:HBase使用ZooKeeper来实现分布式协调和管理。

ZooKeeper 可以监控HBase集群中各个节点的状态,并在节点发生故障时进行快速的故障检测和恢复。

通过ZooKeeper,HBase可以实现集群的自动故障转移和负载均衡。

4. RegionServer故障转移:当一个RegionServer发生故障时,HBase会通过ZooKeeper检测到该故障,并将该RegionServer上的Region重新分配到其他正常的RegionServer上。

这样可以确保整个HBase集群中的数据在某个节点故障时仍然可以持续可用。

5. 自动负载均衡:HBase会根据集群中各个RegionServer的负载情况,动态将Region分配到不同的RegionServer上,以实现负载均衡。

这样可以确保各个RegionServer的负载相对均衡,提高整个集群的运行效率和可用性。

总之,HBase的高可用性主要是通过数据复制、主从复制、ZooKeeper、故障转移和负载均衡等机制来实现的。

这些机制可以确保在节点故障或负载不平衡时,HBase集群仍然能够提供高可用和高性能的数据访问服务。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

提升HBase性能的几个地方
1、使用bloomfilter和mapfile_index_interval
注意:在1.9.3版本的hbase中,bloomfilter是不支持的,存在一个bug,可以通过如下的修改加以改正:
(1)、在方法org.apache.hadoop.hbase.regionserver.HStore.createReaders()中,找到如下行
BloomFilterMapFile.Reader reader = file.getReader(fs, false, false);
将其改成
BloomFilterMapFile.Reader reader = file.getReader(fs,
this.family.isBloomfilter(), false);
(2)、在方法org.apache.hadoop.hbase.HColumnDescriptor.toString()中,找到如下的代码行
if (key != null && key.toUpperCase().equals(BLOOMFILTER)) {
// Don't emit bloomfilter. Its not working.
continue;
}
将其注释掉
2、hbase对于内存有特别的嗜好,在硬件允许的情况下配足够多的内存给它。

通过修改hbase-env.sh中的
export HBASE_HEAPSIZE=3000 #这里默认为1000m
3、修改java虚拟机属性
(1)、在环境允许的情况下换64位的虚拟机
(2)、替换掉默认的垃圾回收器,因为默认的垃圾回收器在多线程环境下会有更多的wait 等待
export HBASE_OPTS="-server -XX:NewSize=6m -XX:MaxNewSize=6m
-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode"
4、增大RPC数量
通过修改hbase-site.xml中的
hbase.regionserver.handler.count属性,可以适当的放大。

默认值为10有点小
5、做程序开发是注意的地方
(1)、需要判断所求的数据行是否存在时,尽量不要用HTable.exists(final byte [] row) 而用HTable.exists(final byte [] row, final byte[] column)等带列族的方法替代。

(2)、不要使用HTable.get(final byte [] row, final byte [] column) == null来判断所求的数据存在,而是用HTable.exists(final byte [] row, final byte[] column)替代
(3)、HTable.close()方法少用.因为我遇到过一些很令人费解的错误
6、记住HBase是基于列模式的存储,如果一个列族能搞定就不要把它分开成两个,关系数据库的那套在这里很不实用.分成多个列来存储会浪费更多的空间,除非你认为现在的硬盘和白菜一个价。

7、如果数据量没有达到TB级别或者没有上亿条记录,很难发挥HBase的优势,建议换关系数据库或别的存储技术。

本文转载自:
/chenjingjing/archive/2010/01/26/1656895.html。

相关文档
最新文档