Hbase教程(四) Hbase数据库JavaAPI接口

来源:互联网 发布:熟悉office办公软件 编辑:程序博客网 时间:2024/05/16 17:31

 

 

Hbase教程() Hbase数据库JavaAPI接口

 

 

Hbase是一个分布式的、面向列的开源数据库,HDFS文件操作常有两种方式,一种是命令行方式,即Hbase提供了一套与Linux文件命令类似的命令行工具。另一种是JavaAPI,即利用HbaseJava库,采用编程的方式操作Hbase数据库。

 

1 软件下载及安装

 

1.1 相关下载

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


1.2 软件安装

JDK安装位置:D:\software\Java\jdk1.8

Eclipse安装位置:D:\software\Eclipse\eclipse_jee

Maven安装位置:D:\software\Maven


1.3 环境配置

1、Java环境变量http://jingyan.baidu.com/article/c85b7a6414f2ee003bac95d5.html

2、Maven环境变量http://jingyan.baidu.com/article/cb5d61050b8ee7005d2fe04e.html

3、Maven修改默认仓库配置

Maven的安装目录下新建repository做为默认仓库:

<localRepository>D:\software\Maven\repository</localRepository>

 找到修改D:\software\Maven\conf\settings.xml文件

   

4、Eclipse配置Maven


启动Eclipse后,找到Window -> Preference-> Maven -> Installation -> Add按钮,设置安装目录:

 


 

设置setting.xml,找到Window -> Preference-> Maven -> User Settings,设置settings.xml文件:

1.4 创建项目

打开Eclipse,创建Maven项目,依次点击File-->New-->Maven Project ,请选中Createa simple project(skip archetype selection),之后点击Next


 

填写Group idartifact id Version默认,Packaging默认为jar,NameDescription填,其他的不填,之后点击Finish


 

1.4 查看package视图

找到Package视图:Window -> ShowView-> Other,搜索PackageExplor


1.6 配置pom.xml文件

编写pom.xml文件引入依赖的Jar包:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.hbase</groupId>    <artifactId>hbase</artifactId>    <version>0.0.1-SNAPSHOT</version>    <packaging>jar</packaging>    <name>hbase</name>    <url>http://maven.apache.org</url>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <hbase.version>1.2.1</hbase.version>    </properties>    <dependencies>        <!--HBASE相关JAR包 -->        <dependency>            <groupId>org.apache.hbase</groupId>            <artifactId>hbase-client</artifactId>            <version>${hbase.version}</version>        </dependency>        <dependency>            <groupId>org.apache.hbase</groupId>            <artifactId>hbase-common</artifactId>            <version>${hbase.version}</version>        </dependency>        <dependency>            <groupId>org.apache.hbase</groupId>            <artifactId>hbase-protocol</artifactId>            <version>${hbase.version}</version>        </dependency>        <!-- Hadoop相关Jar包 -->        <dependency>            <groupId>org.apache.hadoop</groupId>            <artifactId>hadoop-common</artifactId>            <version>2.7.1</version>        </dependency>        <dependency>            <groupId>jdk.tools</groupId>            <artifactId>jdk.tools</artifactId>            <version>1.8</version>            <scope>system</scope>            <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>        </dependency>        <!-- 测试相关JAR包 -->        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <version>3.1</version>                <configuration>                    <source>1.8</source>                    <target>1.8</target>                </configuration>            </plugin>        </plugins>    </build></project>

2 Java- API操作

2.1 Java-API操作

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;@Beforepublic 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 */@Testpublic 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 最大版本为:3studentInfo.setMaxVersions(3);// 将列族添加到表中studentTable.addFamily(studentInfo);studentTable.addFamily(schoolInfo);// 创建表student表admin.createTable(studentTable);// 关闭链接admin.close();System.out.println("*********HbaseDemo.testCreateTable(),执行完毕*********");}/** * 插入数据 */@Testpublic 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(),执行完毕*********");}/** * 批量插入数据 */@Testpublic void testPuts() {System.out.println("*********HbaseDemo.testPuts(),执行开始*********");// 通过表名获得表对象try {HTable table = (HTable) conn.getTable(TableName.valueOf("student"));List<Put> puts = new ArrayList<Put>(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<Put>(10000);}}table.put(puts);table.close();} catch (IOException e) {e.printStackTrace();}System.out.println("*********HbaseDemo.testPuts(),执行完毕*********");}/** * 查询当条数据 */@Testpublic 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(),执行完毕*********");}/** * 查询区间数据 */@Testpublic 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(),执行完毕*********");}/** * 删除数据 */@Testpublic 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(),执行完毕*********");}}


2.2 执行结果

1、创建hbase表:

               

2、插入一条数据:

               

3、批量插入数据:

               

4、查询单条数据:


5、查询区间数据:


6、删除数据


 


                --以上为《Hbase教程(四) Hbase数据库JavaAPI接口》,如有不当之处请指出,我后续逐步完善更正,大家共同提高。谢谢大家对我的关注。

                                                                                                                                                                                      ——厚积薄发(yuanxw)