📅  最后修改于: 2023-12-03 15:01:07.081000             🧑  作者: Mango
HBase是Apache Hadoop生态系统中的一个非常流行的NoSQL数据库,适用于海量数据存储和实时读写。它提供了一个分布式、可伸缩的数据存储系统,支持随机读写,并且非常适合处理大规模的结构化数据,例如用户数据、日志数据、实时指标和数据仓库等等。
HBase的架构是基于Google的Bigtable架构设计的,具有以下组件:
HBase使用Hadoop分布式文件系统(HDFS)来存储数据,并且数据分为region,每个region存储在一个RegionServer中。当数据不断增长时,HBase会自动切分region并将其分配给不同的RegionServer,以实现横向扩展。
HBase提供了Java和REST API来操作数据,包括读、写、扫描、过滤和管理等功能。这使得语言差异较大的各种应用程序都可以与HBase进行集成。
下面是一些常用的方法:
HBaseAdmin admin = new HBaseAdmin(configuration);
HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("testTable"));
tableDescriptor.addFamily(new HColumnDescriptor("cf1"));
tableDescriptor.addFamily(new HColumnDescriptor("cf2"));
admin.createTable(tableDescriptor);
HTableInterface table = connection.getTable(TableName.valueOf("testTable"));
Put put = new Put(Bytes.toBytes("row1"));
put.add(Bytes.toBytes("cf1"), Bytes.toBytes("col1"), Bytes.toBytes("value1"));
put.add(Bytes.toBytes("cf1"), Bytes.toBytes("col2"), Bytes.toBytes("value2"));
put.add(Bytes.toBytes("cf2"), Bytes.toBytes("col3"), Bytes.toBytes("value3"));
table.put(put);
HTableInterface table = connection.getTable(TableName.valueOf("testTable"));
Get get = new Get(Bytes.toBytes("row1"));
Result r = table.get(get);
System.out.println(Bytes.toString(r.getValue(Bytes.toBytes("cf1"), Bytes.toBytes("col1"))));
虽然HBase默认配置可以满足大多数场景,但有时我们可能需要针对特定的需求进行修改。以下是几个常见的配置修改:
hbase shell
# set the configuration for region size
hbase(main):001:0> alter 'testTable', {NAME => 'cf1', 'CONFIGURATION' => {'hbase.hregion.max.filesize' => '1073741824'}}
<configuration>
<property>
<name>hbase.regionserver.handler.count</name>
<value>128</value>
</property>
</configuration>
hbase-env.sh
export HBASE_OPTS="$HBASE_OPTS -XX:+UseParNewGC -XX:+UseConcMarkSweepGC \
-XX:CMSInitiatingOccupancyFraction=70 \
-XX:+CMSParallelRemarkEnabled \
-XX:SurvivorRatio=1024 \
-XX:MaxTenuringThreshold=12"
HBase是一个强大的NoSQL数据库,可以帮助解决处理大规模和结构化数据的问题。在使用HBase时,我们需要了解其架构和API,以便正确集成和管理。此外,了解如何修改配置是非常重要的,这有助于优化性能并满足特定需求。