通过java API来操作Hbae
准备工具
- 三台安装了hadoop集群,zookeeper,Hbase集群的虚拟机
启动Hbase
-
启动Hadoop集群
start-all.sh -
启动zookeeper
zkServer.sh start -
启动Hbase集群
start-hbase.sh
主节点:
一、NameNode:Hdfs的管理者
二、QuorumPeerMain:zkServer
三、ResourceManager:yarn管理者
四、HMaster:Hbase的管理者
副节点:
一、DataNode:Hdfs的工作者
二、QuorumPeerMain:zkServer
三、DataNode:Hdfs的工作者
如果启动失败,使用以下命令查看错误日志:tail -100f /home/hadoop/apps/hadoop/hadoop-2.7.3/logs/hadoop-root-namenode-Centos161.log
java操作
使用java实现Hbase创建表的功能
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 void createTable() throws IOException {
//获取配置对象
Configuration entries = HBaseConfiguration.create();
//配置连接地址
entries.set("hbase.zookeeper.quorum","Centos161:2181,Centos162:2181,Centos163:2181");
//连接Hbase
Connection connection = ConnectionFactory.createConnection(entries);
//获取表的管理对象
Admin admin = connection.getAdmin();
//创建表对象
HTableDescriptor student = new HTableDescriptor(TableName.valueOf("student"));
//创建一个列族对象
HColumnDescriptor a1 = new HColumnDescriptor("a1");
HColumnDescriptor a2 = new HColumnDescriptor("a2");
//把列族发放到表中
student.addFamily(a1);
student.addFamily(a2);
//创建表
admin.createTable(student);
//关流
admin.close();
connection.close();
}
配置连接地址根据如下所示:
在主机hosts文件上需要配置主机名与ip的映射
运行结果:
使用java实现Hbase向表中添加数据和查看所有数据的功能
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
/**
* 向表中添加数据
* shell =======> put '表名','键值','列族:列名','值'
*/
@Test
public void addInformation() throws IOException {
Configuration entries = HBaseConfiguration.create();
entries.set("hbase.zookeeper.quorum","Centos161:2181,Centos162:2181,Centos163:2181");
Connection connection = ConnectionFactory.createConnection(entries);
//获取Hbase中指定的表
Table student = connection.getTable(TableName.valueOf("student"));
//指定输入对象的键值
Put put = new Put("01".getBytes());
put.addColumn("a1".getBytes(),"name".getBytes(), Bytes.toBytes("张三"));
put.addColumn("a1".getBytes(),"age".getBytes(),"23".getBytes());
put.addColumn("a2".getBytes(),"name".getBytes(),Bytes.toBytes("李四"));
put.addColumn("a2".getBytes(),"age".getBytes(),"24".getBytes());
//添加数据
student.put(put);
//关闭资源
connection.close();
}
/**
* 查看表中所有数据
* shell =======> scan '表名'
*/
@Test
public void scanInformation() throws IOException {
Configuration entries = HBaseConfiguration.create();
entries.set("hbase.zookeeper.quorum","Centos161:2181,Centos162:2181,Centos163:2181");
Connection connection = ConnectionFactory.createConnection(entries);
Table student = connection.getTable(TableName.valueOf("student"));
Scan scan = new Scan();
ResultScanner scanner = student.getScanner(scan);
for (Result result:scanner
) {
String name = Bytes.toString(result.getValue("a1".getBytes(), "name".getBytes()));
String age = Bytes.toString(result.getValue("a1".getBytes(), "age".getBytes()));
System.out.println(name+"===============>"+age);
String name1 = Bytes.toString(result.getValue("a2".getBytes(), "name".getBytes()));
String age1 = Bytes.toString(result.getValue("a2".getBytes(), "age".getBytes()));
System.out.println(name1+"==============>"+age1);
}
connection.close();
}
使用java实现查看一行记录
/**
* 查看表中一行的数据
* shell =======> get '表名','键值'
*/
@Test
public void testGet() throws IOException {
Configuration entries = HBaseConfiguration.create();
entries.set("hbase.zookeeper.quorum","Centos161:2181,Centos162:2181,Centos163:2181");
Connection connection = ConnectionFactory.createConnection(entries);
Table student = connection.getTable(TableName.valueOf("student"));
//查找指定的键
Get get = new Get("01".getBytes());
//指定列族
get.addColumn("a1".getBytes(),"name".getBytes());
Result result = student.get(get);
String name = Bytes.toString(result.getValue("a1".getBytes(), "name".getBytes()));
String age = Bytes.toString(result.getValue("a1".getBytes(), "age".getBytes()));
System.out.println(name);
System.out.println(age);
connection.close();
}
运行结果:
使用java删除表中的数据
/**
* 删除表中一行的数据
* shell =======> delete '表名','主键','列族:列名'
*/
@Test
public void deleteDel() throws IOException {
Configuration entries = HBaseConfiguration.create();
entries.set("hbase.zookeeper.quorum","Centos161:2181,Centos162:2181,Centos163:2181");
Connection connection = ConnectionFactory.createConnection(entries);
Table student = connection.getTable(TableName.valueOf("student"));
Delete delete = new Delete("01".getBytes());
delete.addColumn("a1".getBytes(),"name".getBytes());
student.delete(delete);
connection.close();
}
使用java完成数字的累加
@Test
public void testIncreate() throws IOException {
Configuration entries = HBaseConfiguration.create();
entries.set("hbase.zookeeper.quorum","Centos161:2181,Centos162:2181,Centos163:2181");
Connection connection = ConnectionFactory.createConnection(entries);
Table student = connection.getTable(TableName.valueOf("student"));
student.incrementColumnValue(Bytes.toBytes("03"),Bytes.toBytes("a1"),Bytes.toBytes("age"),20L);
Get get = new Get("03".getBytes());
//指定列族
get.addColumn("a1".getBytes(),"age".getBytes());
Result result = student.get(get);
Long age = Bytes.toLong(result.getValue("a1".getBytes(), "age".getBytes()));
System.out.println(age);
connection.close();
}