走向云计算之HBase的shell命令和JavaAPI详解

本文详细介绍了HBase的启动过程,包括HBase Shell的基本操作,如进入Shell、创建与删除表、增删改查。接着深入探讨了HBase的Java API,包括HBaseConfiguration、HBaseAdmin、HTableDescriptor等关键类的使用,并给出了创建表、写入数据、读取数据的实例。最后,讨论了如何将HBase与MapReduce结合,实现数据导入与查询。
摘要由CSDN通过智能技术生成

一、HBase的启动

由上一篇可知,HBase是建立在Hadoop HDFS之上的,因此在启动HBase之前要确保已经启动了Hadoop,启动Hadoop的命令是:start-all.sh。在hadoop2.x中,启动hadoop推荐使用start-hdfs.shstart-yarn.sh两个命令来代替start-all.sh。hadoop集群启动后,启动HBase使用命令:start-hbase.sh
我这里配置的是完全分布模式,一台机器作为NameNode和HMaster,另外两台作为DataNode和HRegionServer。Hadoop和HBase启动完毕后,通过jps命令查看结果如下:
机器一:
这里写图片描述
机器二:
这里写图片描述
机器三:
这里写图片描述
通过访问页面:http://192.168.2.120:60010/master-status可以看到HBase集群的相关情况。
这里写图片描述

可能会遇到的问题
有时候,我们启动Hadoop和Hbase后,访问Hadoop集群的web端口页面可以显示,但是访问HBase的web页面时却显示不出来。这时候再使用jps命令查看发现HMaster这个HBase主进程自动退出了。我们可以通过查看HBase的log日志来定位问题,对于我的情况来说,是因为三台虚拟机的物理时间不一致导致的,通过在三台虚拟机上执行命令:ntpdate time.nist.gov来同步时间,然后执行命令stop-hbase.sh,再执行start-habse.sh就行了。

二、HBase Shell的相关操作。

1、进入Hbase shell

通过运行命令hbase shell来进入:
这里写图片描述
首先需要注意,在hbase shell中使用回退键是无效的,如果输错信息要回退,请按住ctrl键再按回退键。

2、列出所有表

通过list命令得出:
这里写图片描述
可以看到这里已经有一张“users”的表,这是我之前自主创建的,如果第一次执行HBase,list结果肯定是空。

3、删除表

在HBase中删除表需要两步,首先disable,其次drop
这里写图片描述

4、创建表:

这里创建了一张表users,有三个列族user_id,address,info

create 'users','user_id','address','info'

这里写图片描述

5、获取表的具体描述:

通过命令describe 'users'即可。
这里写图片描述

6、增删改查

  • 增加记录:put
    put 'users','xiaoming','info:age','24'
    这个命令的意思就是向表users的行xiaoming、列info:age添加数据24。同理依次执行如下语句:
put 'users','xiaoming','info:birthday','1987-06-17'
put 'users','xiaoming','info:company','alibaba'
put 'users','xiaoming','address:contry','china'
put 'users','xiaoming','address:province','zhejiang'
put 'users','xiaoming','address:city','hangzhou'

这里写图片描述

  • 扫描users表的所有记录:scan
    通过命令scan ‘users’即可。
    这里写图片描述
  • 获取一条记录
    ①取得一个id(row_key)的所有数据
    get 'users','xiaoming'
    这里写图片描述
    ②获取一个id的一个列族的所有数据
    get 'users','xiaoming','info'
    这里写图片描述
    ③获取一个id,一个列族中一个列的所有数据
    get 'users','xiaoming','info:age'
    这里写图片描述
  • 更新一条记录:put
    更新users表中小明的年龄为29
    put 'users','xiaoming','info:age' ,'29'
    这里写图片描述
  • 删除记录:delete与deleteall
    ①删除xiaoming的值的’info:age’字段
    delete 'users','xiaoming','info:age'
    这里写图片描述
    ②删除xiaoming的整行信息
    deleteall 'users','xiaoming'
  • 其他几个比较有用的命令
    count:统计行数
    count 'users'
    这里写图片描述
    当前users表中只有xiaoming一行数据。
    truncate:清空指定表
    `truncate 'users'
    这个操作实际上是先删除表,然后又创建了一张相同的表。

三、HBase的JavaAPI详解

1、JavaAPI和HBase数据模型之间的关系

这里写图片描述

2、HBaseConfiguration

该类主要对HBase进行配置。主要方法如下:
这里写图片描述
示例:

 Configuration conf = HBaseConfiguration.create();

该方法用HBase的默认资源来创建Configuration,它默认会加载classpath下的habse-site.xml来初始化Configuration。

3、HBaseAdmin

该类主要提供一个接口来管理HBase数据库的表信息,包括方法如下:
这里写图片描述
使用示例:

HBaseAdmin admin = new HBaseAdmin(conf);
admin.disableTable(tableName);
admin.deleteTable(tableName);

4、HTableDescriptor

该类包含了表的名字即对应表的列族,主要方法如下:
这里写图片描述
示例:

HTableDescriptor tableDesc = new HTableDescriptor(tableName);
for (int i = 0; i < familys.length; i++) {
        tableDesc.addFamily(new HColumnDescriptor(familys[i]));
            }

5、HColumnDescriptor

该类主要用于维护关于列族的信息例如版本号,压缩设置等。通常在创建表或为表添加列族时使用。主要方法如下:
这里写图片描述
示例:

HTableDescriptor tableDesc = new HTableDescriptor(tableName);
for (int i = 0; i < familys.length; i++) {
        tableDesc.addFamily(new HColumnDescriptor(familys[i]));
            }

6、HTable

该类主要用于和HBase的表进行通信,对更新操作来说是非线程安全的。在多线程操作的环境下,建议使用HTablePool类进行操作。主要方法如下:
这里写图片描述

示例:

HTable table = new HTable(conf, tableName);
Scan s = new Scan();
ResultScanner ss = table.getScanner(s);

7、Put

该类主要对单个行执行添加或者更新操作。主要方法如下:
这里写图片描述
示例:

HTable table = new HTable(conf, tableName);
Put put = new Put(Bytes.toBytes(rowKey));
put.add(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));
table.put(put);

8、Get

该类主要用于获取单个行的相关信息。主要方法如下:
这里写图片描述

示例:

HTable table = new HTable(conf, tableName);
Get get = new Get(rowKey.getBytes());
Result rs = table.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值