在文件存储 HDFS 版上使用Apache HBase

更新时间:
复制 MD 格式

本文主要介绍在文件存储 HDFS 版上使用Apache HBase的方法。

前提条件

说明

如果您使用的是阿里云E-MapReduce中内置的HBase,请参见在文件存储HDFS版上使用E-MapReduce

步骤一:Hadoop集群挂载文件存储 HDFS 版实例

Hadoop集群中配置文件存储 HDFS 版实例。具体操作,请参见挂载文件存储 HDFS 版文件系统

步骤二:配置Apache HBase

  1. Hadoop中配置的core-site.xml复制到${HBASE_HOME}/conf目录下。

    cp ${HADOOP_HOME}/etc/hadoop/core-site.xml ${HBASE_HOME}/conf
  2. 配置${HBASE_HOME}/conf/hbase-site.xml

    <property>
        <!-- 使用分布式模式运行HBase -->
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <!-- 指定HBase存储目录,f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com为您的挂载点域名,根据实际情况修改 -->
        <name>hbase.rootdir</name>
        <value>dfs://f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com:10290/hbase</value>
    </property>
    <property>
        <!-- 在文件存储 HDFS 版上使用HBase时该配置必须设置为false -->
        <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
    </property>
    <property>
        <!-- 依赖的ZooKeeper配置, 请根据实际情况修改 -->
        <name>hbase.zookeeper.quorum</name>
        <value>hostname:2181</value>
    </property>
  3. 配置${HBASE_HOME}/conf/hbase-env.sh。

    ## HBase不使用自己的ZooKeeper
    export HBASE_MANAGES_ZK=false
    ## 在HBASE_CLASSPATH中添加文件存储 HDFS 版Java SDK
    export HBASE_CLASSPATH=/path/to/aliyun-sdk-dfs-x.y.z.jar:${HBASE_CLASSPATH}

步骤三:验证Apache HBase

  1. 执行以下命令,启动HBase。

    ${HBASE_HOME}/bin/start-hbase.sh
    重要

    启动分布式HBase集群前确保ZooKeeper已经启动。

  2. 创建测试文件(例如dfs_test.txt)并写入如下内容。

    create 'dfs_test', 'cf'
    for i in Array(0..9999)
     put 'dfs_test', 'row'+i.to_s , 'cf:a', 'value'+i.to_s
    end
    list 'dfs_test'
    scan 'dfs_test', {LIMIT => 10, STARTROW => 'row1'}
    get 'dfs_test', 'row1'
  3. 执行以下命令,在HBase中创建表并写入10000条数据。

    ${HBASE_HOME}/bin/hbase shell dfs_test.txt

    其中,dfs_test.txt为刚创建的测试文件,请根据实际情况替换。

    ROW                                     COLUMN+CELL
     row1                                   column=cf:a, timestamp=2021-12-01T15:02:43.900, value=value1
     row10                                  column=cf:a, timestamp=2021-12-01T15:02:43.926, value=value10
     row100                                 column=cf:a, timestamp=2021-12-01T15:02:44.592, value=value100
     row1000                                column=cf:a, timestamp=2021-12-01T15:02:52.516, value=value1000
     row1001                                column=cf:a, timestamp=2021-12-01T15:02:52.517, value=value1001
     row1002                                column=cf:a, timestamp=2021-12-01T15:02:52.517, value=value1002
     row1003                                column=cf:a, timestamp=2021-12-01T15:02:52.518, value=value1003
     row1004                                column=cf:a, timestamp=2021-12-01T15:02:52.557, value=value1004
     row1005                                column=cf:a, timestamp=2021-12-01T15:02:52.558, value=value1005
     row1006                                column=cf:a, timestamp=2021-12-01T15:02:52.559, value=value1006
    10 row(s)
    Took 0.0395 seconds
    COLUMN                                  CELL
     cf:a                                   timestamp=2021-12-01T15:02:43.900, value=value1
  4. 使用MapReduce计算行数。

    重要

    YARN上执行MapReduce计数前需要先在Hadoop集群中启动YARN服务。

    • 执行命令

      HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp` \
      ${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/lib/hbase-mapreduce-2.3.7.jar \
      rowcounter dfs_test
    • 返回信息

      如果计算行数与写入数据一致,则表示Apache HBase配置成功。

      HBaseCounters
              BYTES_IN_REMOTE_RESULTS=0
              BYTES_IN_RESULTS=427780
              MILLIS_BETWEEN_NEXTS=593
              NOT_SERVING_REGION_EXCEPTION=0
              REGIONS_SCANNED=1
              REMOTE_RPC_CALLS=0
              REMOTE_RPC_RETRIES=0
              ROWS_FILTERED=0
              ROWS_SCANNED=10000
              RPC_CALLS=2
              RPC_RETRIES=0
      org.apache.hadoop.hbase.mapreduce.RowCounter$RowCounterMapper$Counters
              ROWS=10000
      File Input Format Counters
              Bytes Read=0

    如果在环境变量中已配置HADOOP_HOMEHADOOP_CLASSPATH也可以执行以下命令进行RowCounter计算。

    ${HBASE_HOME}/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter dfs_test