Hbase教程(四) Hbase数据库JavaAPI接口
Hbase是一个分布式的、面向列的开源数据库,HDFS文件操作常有两种方式,一种是命令行方式,即Hbase提供了一套与Linux文件命令类似的命令行工具。另一种是JavaAPI,即利用Hbase的Java库,采用编程的方式操作Hbase数据库。
1、JDK下载:Java是运行在JVM虚拟机 (Java Virtual Machine)之上,因此它的运行需要JDK环境的支持,建议下载Oracle官方发布的JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
2、Eclipse下载:开发Java程序需要强大的Java集成开发环境(IDE)支持,目前最新版本MARS-1版,下载地址:http://mirrors.neusoft.edu.cn/eclipse/technology/epp/downloads/release/mars/1/eclipse-jee-mars-1-win32-x86_64.zip
3、Maven下载:Maven是一个项目管理和构建自动化工具。使用Maven管理项目的整个声明周期,包括编译,构建,测试,发布,报告等等。而Maven本身还支持多种插件,可以方便更灵活的控制项目。下载地址:http://maven.apache.org/download.html
JDK安装位置:D:\software\Java\jdk1.8
Eclipse安装位置:D:\software\Eclipse\eclipse_jee
Maven安装位置:D:\software\Maven
1、Java环境变量:http://jingyan.baidu.com/article/c85b7a6414f2ee003bac95d5.html
2、Maven环境变量:http://jingyan.baidu.com/article/cb5d61050b8ee7005d2fe04e.html
3、Maven修改默认仓库配置:
在Maven的安装目录下新建repository做为默认仓库:
找到修改D:\software\Maven\conf\settings.xml文件
4、Eclipse配置Maven:
启动Eclipse后,找到Window -> Preference-> Maven -> Installation -> Add按钮,设置安装目录:
设置setting.xml,找到Window -> Preference-> Maven -> User Settings,设置settings.xml文件:
打开Eclipse,创建Maven项目,依次点击File-->New-->Maven Project ,请选中Createa simple project(skip archetype selection),之后点击Next:
填写Group id和artifact id, Version默认,Packaging默认为jar,Name,Description选填,其他的不填,之后点击Finish:
找到Package视图:Window -> ShowView-> Other,搜索PackageExplor
编写pom.xml文件引入依赖的Jar包:
4.0.0
com.hbase
hbase
0.0.1-SNAPSHOT
jar
hbase
http://maven.apache.org
UTF-8
1.2.1
org.apache.hbase
hbase-client
${hbase.version}
org.apache.hbase
hbase-common
${hbase.version}
org.apache.hbase
hbase-protocol
${hbase.version}
org.apache.hadoop
hadoop-common
2.7.1
jdk.tools
jdk.tools
1.8
system
${JAVA_HOME}/lib/tools.jar
junit
junit
4.12
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.8
Java代码实现:对Hbase数据库的增、删、改、查等操作。
代码实现:
package com.hadoop.hbase;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Before;
import org.junit.Test;
/**
* Java - API操作Hbase数据库
*
* @author yuanxw
*/
public class HbaseDemo {
// Hbase数据库配置
private Configuration conf;
// 数据库连接
private Connection conn;
@Before
public void init() {
System.out.println("*********HbaseDemo.init(),执行开始*********");
// 指定zk的地址,多个用“,”分割
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "Hadoop4:2181,Hadoop5:2181,Hadoop6:2181");
try {
conn = ConnectionFactory.createConnection(conf);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("*********HbaseDemo.init(),执行结束*********");
}
/**
* 创建表
*
* @throws IOException
*/
@Test
public void testCreateTable() throws IOException {
System.out.println("*********HbaseDemo.testCreateTable(),执行开始*********");
// 获得管理员
HBaseAdmin admin = (HBaseAdmin) conn.getAdmin();
// 创建表
HTableDescriptor studentTable = new HTableDescriptor(TableName.valueOf("student"));
// 添加[student_info、school_info]列族
HColumnDescriptor studentInfo = new HColumnDescriptor("student_info");
HColumnDescriptor schoolInfo = new HColumnDescriptor("school_info");
// 设置student_info 最大版本为:3
studentInfo.setMaxVersions(3);
// 将列族添加到表中
studentTable.addFamily(studentInfo);
studentTable.addFamily(schoolInfo);
// 创建表student表
admin.createTable(studentTable);
// 关闭链接
admin.close();
System.out.println("*********HbaseDemo.testCreateTable(),执行完毕*********");
}
/**
* 插入数据
*/
@Test
public void testPut() {
System.out.println("*********HbaseDemo.testPut(),执行开始*********");
try {
// 通过表名获得表对象
HTable table = (HTable) conn.getTable(TableName.valueOf("student"));
// 插入rowkey行键
Put put = new Put(Bytes.toBytes("rowkey001"));
put.addColumn(Bytes.toBytes("student_info"), Bytes.toBytes("seq_no"), Bytes.toBytes("001"));
put.addColumn(Bytes.toBytes("student_info"), Bytes.toBytes("real_name"), Bytes.toBytes("wangjiajia"));
put.addColumn(Bytes.toBytes("student_info"), Bytes.toBytes("student_name"), Bytes.toBytes("王佳佳"));
put.addColumn(Bytes.toBytes("student_info"), Bytes.toBytes("school_seq_no"), Bytes.toBytes("s001"));
table.put(put);
table.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("*********HbaseDemo.testPut(),执行完毕*********");
}
/**
* 批量插入数据
*/
@Test
public void testPuts() {
System.out.println("*********HbaseDemo.testPuts(),执行开始*********");
// 通过表名获得表对象
try {
HTable table = (HTable) conn.getTable(TableName.valueOf("student"));
List puts = new ArrayList(10000);
for (int i = 1; i <= 1000050; i++) {
// 插入rowkey行键
Put put = new Put(Bytes.toBytes("rowkey" + i));
put.addColumn(Bytes.toBytes("school_info"), Bytes.toBytes("school_seq_no"),Bytes.toBytes("seq_no" + i));
puts.add(put);
if (i % 10000 == 0) {
table.put(puts);
puts = new ArrayList(10000);
}
}
table.put(puts);
table.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("*********HbaseDemo.testPuts(),执行完毕*********");
}
/**
* 查询当条数据
*/
@Test
public void testGet() {
System.out.println("*********HbaseDemo.testGet(),执行开始*********");
// 通过表名获得表对象
try {
// 获得表
HTable table = (HTable) conn.getTable(TableName.valueOf("student"));
// 通过Rowkey获得行
Get get = new Get(Bytes.toBytes("rowkey1000"));
Result result = table.get(get);
// 查询Hbase获得结果
byte[] bytes = result.getValue(Bytes.toBytes("school_info"), Bytes.toBytes("school_seq_no"));
String str = Bytes.toString(bytes);
// 打印输出的结果
System.out.println(str);
table.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("*********HbaseDemo.testGet(),执行完毕*********");
}
/**
* 查询区间数据
*/
@Test
public void testScan() {
System.out.println("*********HbaseDemo.testScan(),执行开始*********");
// 通过表名获得表对象
try {
// 获得表
HTable table = (HTable) conn.getTable(TableName.valueOf("student"));
// 查询rowkey10000到rowkey15000的范围的数据
Scan scan = new Scan(Bytes.toBytes("rowkey10000"), Bytes.toBytes("rowkey15000"));
ResultScanner resultScanner = table.getScanner(scan);
for (Result result : resultScanner) {
byte[] bytes = result.getValue(Bytes.toBytes("school_info"), Bytes.toBytes("school_seq_no"));
String str = Bytes.toString(bytes);
System.out.println(str);
}
table.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("*********HbaseDemo.testScan(),执行完毕*********");
}
/**
* 删除数据
*/
@Test
public void testDelete() {
System.out.println("*********HbaseDemo.testDelete(),执行开始*********");
// 通过表名获得表对象
try {
// 获得表
HTable table = (HTable) conn.getTable(TableName.valueOf("student"));
Delete delete = new Delete(Bytes.toBytes("rowkey1000050"));
table.delete(delete);
table.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("*********HbaseDemo.testDelete(),执行完毕*********");
}
}
1、创建hbase表:
2、插入一条数据:
3、批量插入数据:
4、查询单条数据:
5、查询区间数据:
6、删除数据
——厚积薄发(yuanxw)