欢迎回家
我们一直在改变

HBase Java Api

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

配置pom.xml文件

<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>

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;
 
	@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<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(),执行完毕*********");
	}
 
	/**
	 * 查询当条数据
	 */
	@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、删除数据

原文链接:https://blog.csdn.net/yuan_xw/article/details/76064261

赞(0)
未经允许不得转载:91coding » HBase Java Api
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

立即登录   注册

91CODING 小白轻松上手,大牛稳健进步

关于我们免责声明