本文介绍如何配置一个HBase集群以及HBase存储服务使用流程。

为了更好地使用HBase,在创建集群过程中,推荐您使用如下配置:

  • 公网状态选择打开。

  • 可用区选择为访问HBase的应用服务器所在的可用区,请勿选择随机分配。

  • 硬件节点数请选择4个及以上,其包含了Master和Slave节点,E-MapReduce会在这些节点上创建NameNode、DataNode、JournalNode、HMaster、RegionServer和ZooKeeper角色。

  • 服务器配置推荐选择4核16G或8核32G这两款机型,过低的配置可能导致HBase集群无法稳定运行。

  • 数据盘类型建议选择SSD云盘,会有更好的成本性价比。对于访问少,存储量大的业务,可以选择普通云盘。

  • 数据容量请按实际需求配置。

  • HBase集群支持扩容。

HBase配置

创建HBase集群的时候,在创建页面可以利用软件配置功能,结合使用场景,对HBase的默认参数配置做一些优化修改,示例如下。
{
  "configurations": [
    {
      "classification": "hbase-site",
      "properties": {
        "hbase.hregion.memstore.flush.size": "268435456",
        "hbase.regionserver.global.memstore.size": "0.5",
        "hbase.regionserver.global.memstore.lowerLimit": "0.6"
      }
    }
  ]
}

HBase集群一些默认的配置如下所示。

key value
zookeeper.session.timeout 180000
hbase.regionserver.global.memstore.size 0.35
hbase.regionserver.global.memstore.lowerLimit 0.3
hbase.hregion.memstore.flush.size 128MB

访问HBase

注意
  • 由于网络性能的考虑,通过E-MapReduce创建的HBase集群,我们只建议从同个可用区的ECS上发起访问。
  • 访问HBase集群的ECS必须和HBase集群处于同一个安全组内,否则无法访问,所以在EMR中创建Hadoop、Spark或Hive集群时,如果它们需要访问HBase,则在创建集群的时候一定要选择和HBase集群相同的安全组。

通过E-MapReduce控制台创建完HBase集群以后,您可以开始使用HBase存储服务。其操作步骤如下:

  1. 获取Master IP地址和集群Zookeeper访问地址(内网IP地址)。通过E-MapReduce控制台集群详情页面,您可以查看集群的Master节点IP和Zookeeper访问地址,如下图所示。create_cluster1create_cluster2

    对于开通了公网IP的Master节点,您可以浏览HMaster的WEB UI(例如:localhost:16010),详情请参见通过SSH隧道方式访问开源组件Web UI

  2. SSH连接到集群主节点,使用HBase Shell。您可以直接通过SSH连接到集群的Master节点,切换到HDFS用户,通过HBase Shell访问集群。更多HBase Shell介绍,请参见Apache HBase官网
    [root@emr-header-1 ~]# su hdfs
    [hadoop@emr-header-1 root]$ hbase shell
    HBase Shell; enter 'help<RETURN>' for list of supported commands.
    Type "exit<RETURN>" to leave the HBase Shell
    Version 1.1.1, r374488, Fri Aug 21 09:18:22 CST 2015
    hbase(main):001:0>
  3. 从其他ECS节点(同一个安全组内),使用HBase Shell访问集群。从Apache HBase的官网下载HBase-1.x版本的资源包(下载链接),解压后,修改conf/hbase-site.xml,添加集群的Zookeeper访问地址,如下所示:
    <configuration>
         <property>
             <name>hbase.zookeeper.quorum</name>
             <value>$ZK_IP1,$ZK_IP2,$ZK_IP3</value>
         </property>
    </configuration>

    然后就可以通过命令 bin/hbase shell 访问集群了。

    若ECS是通过EMR创建的,则只需修改hbase-site.xml,无需下载HBase-1.x版本的资源包。

    3.2.0及以上版本配置位于: /etc/ecm/hbase-conf/hbase-site.xml

    3.2.0以下版本位于:/etc/emr/hbase-conf/hbase-site.xml

  4. 通过API访问HBase集群,引入Maven依赖。
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>1.1.1</version>

    配置正确的Zookeeper访问地址,连接集群。

    Configuration config = HBaseConfiguration.create();
    config.set(HConstants.ZOOKEEPER_QUORUM,"$ZK_IP1,$ZK_IP2,$ZK_IP3");
    Connection connection = ConnectionFactory.createConnection(config);
    try {
         Table table = connection.getTable(TableName.valueOf("myLittleHBaseTable"));
         try {
             //Do table operation
         }finally {
             if (table != null) table.close();
         }
    } finally {
         connection.close();
    }

示例

  • 前提条件

    访问HBase集群的ECS必须和HBase集群处于同一个安全组内。

  • Spark访问Hbase

    请参见spark-hbase-connector

  • Hadoop访问Hbase

    请参见HBase MapReduce Examples

  • Hive访问HBase
    EMR 1.2.0及以上主版本的集群中的Hive才能访问Hbase集群。其步骤如下:
    1. 登录Hive集群,修改hosts,增加如下一行:
      $zk_ip emr-cluster //$zk_ip为Hbase集群的Zookeeper节点IP
    2. 进行Hive操作,具体Hive操作请参见 Hive HBase Integration