HBase启动完成后,查看各节点Java进程:
[hadoop@centos01 hbase-1.2.4]$ jps 12544 DataNode 13584 HQuorumPeer 13074 NodeManager 12916 ResourceManager 14661 Jps 14311 HMaster 12745 SecondaryNameNode 12428 NameNode 14447 HRegionServer [hadoop@centos02 zookeeper-3.4.9]$ jps 13632 DataNode 13761 NodeManager 14199 HRegionServer 14343 Jps 14093 HQuorumPeer [hadoop@centos03 zookeeper-3.4.9]$ jps 8994 DataNode 9458 HQuorumPeer 9114 NodeManager 9546 HRegionServer 9679 Jps从上述查看结果中可以看出,centos01节点上出现了HMaster、HQuorumPeer和HRegionServer进程,centos02和centos03节点上出现了HQuorumPeer和HRegionServer进程。这说明启动成功了。
HBase1.0以后的Web端访问默认端口变为了16010,浏览器地址输入:16010,查看HBase的运行状态,如下图所示。
HBase 为用户提供了一个非常方便的命令行操作方式,我们称之为HBase Shell。
HBase Shell 提供了大多数的 HBase 命令,通过 HBase Shell 用户可以方便地创建、删除及修改表,还可以向表中添加数据、列出表中的相关信息等。
在启动 HBase 之后,我们可以通过下面的命令进入 HBase Shell 之中:
[hadoop@centos01 hbase-1.2.4]$ bin/hbase shell下面通过实际操作来介绍HBase Shell的使用。
1.创建表创建表t1,列族f1,命令如下:
create 't1','f1' 2.添加数据向表t1中添加一条数据,rowkey为row1,列name的值为zhangsan。命令如下:
put 't1','row1','f1:name','zhangsan'再向表t1中添加一条数据,rowkey为row2,列age为18。命令如下:
put 't1','row2','f1:age','18' 3.扫描表扫描表t1,查看数据描述,命令如下:
scan 't1'执行结果如下:
hbase(main):005:0> scan 't1' ROW COLUMN+CELL row1 column=f1:name, timestamp=1509344793600, value=zhangsan row2 column=f1:age, timestamp=1509345245541, value=18 2 row(s) in 0.0450 seconds可以看到,表t1中已经存在两条已添加的数据了。
4.修改表修改row1中的name值,将zhangsan改为lisi,仍然使用put命令:
put 't1','row1','f1:name','lisi'再扫描表t1,此时row1中name的值已经变为了“lisi”:
hbase(main):002:0> scan 't1' ROW COLUMN+CELL row1 column=f1:name, timestamp=1509345996225, value=lisi row2 column=f1:age, timestamp=1509345245541, value=18 2 row(s) in 0.1000 seconds 5.删除特定单元格删除表中rowkey为row1的行的name单元格,命令如下:
delete 't1','row1','f1:name'扫描表t1,发现rowkey为row1的行不存在了,因为row1只有一个name单元格,name被删除了,row1一整行也就不存在了。
hbase(main):006:0> scan 't1' ROW COLUMN+CELL row2 column=f1:age, timestamp=1509345245541, value=18 1 row(s) in 0.0750 seconds 6.删除一整行数据删除rowkey为row2的行中所有单元格,命令如下:
deleteall 't1','row2'扫描表t1,发现owkey为row2的行已不存在了:
hbase(main):008:0> scan 't1' ROW COLUMN+CELL 0 row(s) in 0.0250 seconds 7.删除整张表删除整张表,需要先禁用表,然后再删除表。例如,删除表t1,命令如下:
disable 't1' drop 't1' 9.3 Java API操作使用HBase Java API可以对表进行创建、添加数据、修改删除数据等。本例在eclipse中编写Java API进行测试,测试前需先启动HBase集群。
9.3.1 创建Java工程在eclipse中新建maven项目hbasedemo,然后在项目pom.xml中加入hbase的客户端jar包依赖:
<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>1.2.4</version> </dependency>加入以后发现pom.xml报如下错误:
Missing artifact jdk.tools:jdk.tools:jar:1.7
原因是,pom.xml中加入的hbase客户端jar包隐式依赖tools.jar包,而tools.jar并未存在于maven仓库中,tools.jar包是JDK自带的。因此我们需要在pom.xml中继续引入tools.jar包,代码如下:
此时问题得到解决。
9.3.2 创建表(1)在maven项目hbasedemo中新建Java类HBaseCreateTable.java,在main函数中写入创建表的代码,如下:
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; public class HBaseCreateTable{ public static void main(String[] args) throws Exception { //创建Hadoop配置对象 Configuration conf=HBaseConfiguration.create(); //指定ZooKeeper集群地址 conf.set("hbase.zookeeper.quorum", "192.168.170.128:2181,192.168.170.129:2181,192.168.170.130:2181"); //创建连接对象Connection Connection conn=ConnectionFactory.createConnection(conf); //得到数据库管理员对象 Admin admin=conn.getAdmin(); TableName tableName=TableName.valueOf("t1"); //创建表描述,并指定表名 HTableDescriptor desc=new HTableDescriptor(tableName); //创建列族描述 HColumnDescriptor family=new HColumnDescriptor("f1"); //指定列族 desc.addFamily(family); //创建表 admin.createTable(desc); System.out.println("create table success!!"); } }