`
king_c
  • 浏览: 222708 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hbase java编程实例

 
阅读更多

 

HBase提供了java api来对HBase进行一系列的管理涉及到对表的管理、数据的操作等。常用的API操作有:

  1、  对表的创建、删除、显示以及修改等,可以用HBaseAdmin,一旦创建了表,那么可以通过HTable的实例来访问表,每次可以往表里增加数据。

  2、  插入数据

    创建一个Put对象,在这个Put对象里可以指定要给哪个列增加数据,以及当前的时间戳等值,然后通过调用HTable.put(Put)来提交操作,子猴在这里提请注意的是:在创建Put对象的时候,你必须指定一个行(Row)值,在构造Put对象的时候作为参数传入。

  3、  获取数据

    要获取数据,使用Get对象,Get对象同Put对象一样有好几个构造函数,通常在构造的时候传入行值,表示取第几行的数据,通过HTable.get(Get)来调用。

  4、  浏览每一行

    通过Scan可以对表中的行进行浏览,得到每一行的信息,比如列名,时间戳等,Scan相当于一个游标,通过next()来浏览下一个,通过调用HTable.getScanner(Scan)来返回一个ResultScanner对象。HTable.get(Get)和HTable.getScanner(Scan)都是返回一个Result。Result是一个

KeyValue的链表。

  5、  删除

    使用Delete来删除记录,通过调用HTable.delete(Delete)来执行删除操作。(注:删除这里有些特别,也就是删除并不是马上将数据从表中删除。)

  6、  锁

    新增、获取、删除在操作过程中会对所操作的行加一个锁,而浏览却不会。

  7、  簇的访问

    客户端代码通过ZooKeeper来访问找到簇,也就是说ZooKeeper quorum将被使用,那么相关的类(包)应该在客户端的类(classes)目录下,即客户端一定要找到文件hbase-site.xml。

  以下是一个完整的代码示例,基于hbase-0.90.3编写(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.KeyValue;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
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.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
 
public class HBaseTest {
    
    private static Configuration conf = null;
     
    /**
     * 初始化配置
     */
    static {
        Configuration HBASE_CONFIG = new Configuration();
        //与hbase/conf/hbase-site.xml中hbase.zookeeper.quorum配置的值相同 
        HBASE_CONFIG.set("hbase.zookeeper.quorum", "10.1.1.1");
        //与hbase/conf/hbase-site.xml中hbase.zookeeper.property.clientPort配置的值相同
        HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181");
        conf = HBaseConfiguration.create(HBASE_CONFIG);
    }
    
    /**
     * 创建一张表
     */
    public static void creatTable(String tableName, String[] familys) throws Exception {
        HBaseAdmin admin = new HBaseAdmin(conf);
        if (admin.tableExists(tableName)) {
            System.out.println("table already exists!");
        } else {
            HTableDescriptor tableDesc = new HTableDescriptor(tableName);
            for(int i=0; i<familys.length; i++){
                tableDesc.addFamily(new HColumnDescriptor(familys[i]));
            }
            admin.createTable(tableDesc);
            System.out.println("create table " + tableName + " ok.");
        
    }
    
    /**
     * 删除表
     */
    public static void deleteTable(String tableName) throws Exception {
       try {
           HBaseAdmin admin = new HBaseAdmin(conf);
           admin.disableTable(tableName);
           admin.deleteTable(tableName);
           System.out.println("delete table " + tableName + " ok.");
       } catch (MasterNotRunningException e) {
           e.printStackTrace();
       } catch (ZooKeeperConnectionException e) {
           e.printStackTrace();
       }
    }
     
    /**
     * 插入一行记录
     */
    public static void addRecord (String tableName, String rowKey, String family, String qualifier, String value)
            throws Exception{
        try {
            HTable table = new HTable(conf, tableName);
            Put put = new Put(Bytes.toBytes(rowKey));
            put.add(Bytes.toBytes(family),Bytes.toBytes(qualifier),Bytes.toBytes(value));
            table.put(put);
            System.out.println("insert recored " + rowKey + " to table " + tableName +" ok.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    /**
     * 删除一行记录
     */
    public static void delRecord (String tableName, String rowKey) throws IOException{
        HTable table = new HTable(conf, tableName);
        List list = new ArrayList();
        Delete del = new Delete(rowKey.getBytes());
        list.add(del);
        table.delete(list);
        System.out.println("del recored " + rowKey + " ok.");
    }
     
    /**
     * 查找一行记录
     */
    public static void getOneRecord (String tableName, String rowKey) throws IOException{
        HTable table = new HTable(conf, tableName);
        Get get = new Get(rowKey.getBytes());
        Result rs = table.get(get);
        for(KeyValue kv : rs.raw()){
            System.out.print(new String(kv.getRow()) + " " );
            System.out.print(new String(kv.getFamily()) + ":" );
            System.out.print(new String(kv.getQualifier()) + " " );
            System.out.print(kv.getTimestamp() + " " );
            System.out.println(new String(kv.getValue()));
        }
    }
     
    /**
     * 显示所有数据
     */
    public static void getAllRecord (String tableName) {
        try{
             HTable table = new HTable(conf, tableName);
             Scan s = new Scan();
             ResultScanner ss = table.getScanner(s);
             for(Result r:ss){
                 for(KeyValue kv : r.raw()){
                    System.out.print(new String(kv.getRow()) + " ");
                    System.out.print(new String(kv.getFamily()) + ":");
                    System.out.print(new String(kv.getQualifier()) + " ");
                    System.out.print(kv.getTimestamp() + " ");
                    System.out.println(new String(kv.getValue()));
                 }
             }
        } catch (IOException e){
            e.printStackTrace();
        }
    }
    
    public static void  main (String [] agrs) {
        try {
            String tablename = "scores";
            String[] familys = {"grade", "course"};
            HBaseTest.creatTable(tablename, familys);
             
            //add record zkb
            HBaseTest.addRecord(tablename,"zkb","grade","","5");
            HBaseTest.addRecord(tablename,"zkb","course","","90");
            HBaseTest.addRecord(tablename,"zkb","course","math","97");
            HBaseTest.addRecord(tablename,"zkb","course","art","87");
            //add record  baoniu
            HBaseTest.addRecord(tablename,"baoniu","grade","","4");
            HBaseTest.addRecord(tablename,"baoniu","course","math","89");
             
            System.out.println("===========get one record========");
            HBaseTest.getOneRecord(tablename, "zkb");
             
            System.out.println("===========show all record========");
            HBaseTest.getAllRecord(tablename);
             
            System.out.println("===========del one record========");
            HBaseTest.delRecord(tablename, "baoniu");
            HBaseTest.getAllRecord(tablename);
             
            System.out.println("===========show all record========");
            HBaseTest.getAllRecord(tablename);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  程序编译为一个jar包hbtest.jar,执行脚本:

#!/bin/sh
 
source ~/.bash_profile
export HADOOP_CLASSPATH=/home/admin/hadoop/hadoop-core-0.20.2-CDH3B4.jar:/home/admin/hbase/hbase-0.90.3.jar:/home/admin/zookeeper/zookeeper-3.3.2.jar
 
hadoop jar hbtest.jar

  输出结果是:

create table scores ok.
11/09/16 00:45:39 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=10.1.1.1:2181 sessionTimeout=180000 watcher=hconnection
11/09/16 00:45:39 INFO zookeeper.ClientCnxn: Opening socket connection to server /10.1.1.1:2181
11/09/16 00:45:39 INFO zookeeper.ClientCnxn: Socket connection established to search041134.sqa.cm4.tbsite.net/10.1.1.1:2181, initiating session
11/09/16 00:45:39 INFO zookeeper.ClientCnxn: Session establishment complete on server search041134.sqa.cm4.tbsite.net/10.1.1.1:2181, sessionid = 0x132614b5411007f, negotiated timeout = 180000
insert recored zkb to table scores ok.
insert recored zkb to table scores ok.
insert recored zkb to table scores ok.
insert recored zkb to table scores ok.
insert recored baoniu to table scores ok.
insert recored baoniu to table scores ok.
===========get one record========
zkb course: 1316105139153 90
zkb course:art 1316105139156 87
zkb course:math 1316105139154 97
zkb grade: 1316105139149 5
===========show all record========
baoniu course:math 1316105139159 89
baoniu grade: 1316105139158 4
zkb course: 1316105139153 90
zkb course:art 1316105139156 87
zkb course:math 1316105139154 97
zkb grade: 1316105139149 5
===========del one record========
del recored baoniu ok.
zkb course: 1316105139153 90
zkb course:art 1316105139156 87
zkb course:math 1316105139154 97
zkb grade: 1316105139149 5
===========show all record========
zkb course: 1316105139153 90
zkb course:art 1316105139156 87
zkb course:math 1316105139154 97
zkb grade: 1316105139149 5

 

参考文献:

  HBase Java客户端编程

  HBase client API Guide(推荐,对hbase client API的说明比较详细)

 

 

另外一个例子:

package gucas.xiaoxia;

import java.io.IOException;
import java.nio.charset.Charset;

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

public class MyClient {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//read config-file  hbase-site.xml, hbase-default.xml
		 Configuration conf = HBaseConfiguration.create();
		 
		 //create table   client Admin
		 HBaseAdmin admin = new HBaseAdmin(conf);
		 
		 HColumnDescriptor[] columns = new HColumnDescriptor[2];
		 
		 columns[0] = new HColumnDescriptor("books");
		 columns[1] = new HColumnDescriptor("catalogs");
		 
		 HTableDescriptor htd =  new HTableDescriptor("mytable");
		 
		 htd.addFamily(columns[0]);
		 htd.addFamily(columns[1]);
		 
		 //create table  mytable
		 admin.createTable(htd);
		 
		 //Run some operations 
		 HTable table = new HTable(conf, htd.getNameAsString());
		 //Put opt
		 Put p1 = new Put(Bytes.toBytes("row1"));
		 //Byte p1.add(byte[] column family, byte[] qualifier, byte[] value)
		 p1.add( Bytes.toBytes("books"), Bytes.toBytes("name"), Bytes.toBytes("west jury"));
		 table.put(p1);
		 
		 p1 = new Put(Bytes.toBytes("row2"));
		 p1.add( Bytes.toBytes("books"), Bytes.toBytes("author"), Bytes.toBytes("xiaoxia"));
		 table.put(p1);
		 
		 p1 = new Put(Bytes.toBytes("row2"));
		 p1.add( Bytes.toBytes("catalogs"), Bytes.toBytes("name"), Bytes.toBytes("xiaoxia-catalogs"));
		 table.put(p1);
		 
		 //edit row2 books:author value
		 p1 = new Put(Bytes.toBytes("row2"));
		 p1.add( Bytes.toBytes("books"), Bytes.toBytes("author"), Bytes.toBytes("xiaoxia-books"));
		 table.put(p1);
		 
		 
		 Scan scan = new Scan();
		 ResultScanner scanner = table.getScanner(scan);
		 
		 for (Result result2 : scanner) {
			System.out.println("Scan : "+ result2);
		 }
		 scanner.close();
		
		 //get field value
		 Get get = new Get("row1".getBytes());
		 
		 Result result = table.get(get);
		 
		 System.out.println("get : "+ new String(result.getRow(),Charset.defaultCharset())+", "+new String(result.getValue("books".getBytes(), "name".getBytes())));
		 
		 
		 System.in.read();
		 
		 //disable table first ,then delete the table
		 System.out.println("disable table ");
		 admin.disableTable("mytable".getBytes());
		 System.out.println("delete table ");
		 admin.deleteTable("mytable".getBytes());
		 
	}

}
 
分享到:
评论

相关推荐

    HBase Java API编程实例

    本节通过一个具体的编程实例来学习如何使用 HBase Java API 解决实际问题。在本实例中,首先创建一个学生成绩表 scores,用来存储学生各门课程的考试成绩,然后向 scores 添加数据。 表 scores 的概念视图如图 1 所...

    Hadoop+HBase+Java API

    **Java API** 是Java编程语言提供的应用程序接口,允许开发者使用Java来访问和操作Hadoop和HBase的功能。对于Hadoop,Java API主要包括`org.apache.hadoop.mapreduce`包下的类,如Job、Mapper、Reducer等,用于实现...

    HBase MapReduce完整实例.rar

    2. **代码示例**:提供实际的Java代码,演示如何编写Map和Reduce函数来处理HBase中的数据,以及如何使用HBaseInputFormat和HBaseOutputFormat与HBase交互。 3. **数据准备**:可能包含一些模拟数据或实际数据,用于...

    在eclipse中开发HBase程序的方法

    然而,这一过程涉及到对Hadoop和HBase架构的深入了解,以及对Java编程的熟练掌握。以上提供的知识点涵盖了在Eclipse中设置HBase开发环境的步骤,以及如何编写和运行基本的HBase程序示例。这对于希望在实际项目中应用...

    java链接及操作hbase实例代码

    在Java编程环境中,链接并操作HBase是一种常见的任务,特别是在大数据处理和分布式存储的应用场景下。HBase是一个基于Google Bigtable设计的开源NoSQL数据库,它运行在Hadoop之上,提供高并发、低延迟的数据存储服务...

    hbase 的java代码 集合 hbase 0.96

    下面我们将深入探讨HBase 0.96版本中的关键Java编程知识点。 首先,理解HBase的基础架构至关重要。HBase是构建在Hadoop之上的,利用HDFS作为其底层存储。在Java中,我们通过HBase客户端API与HBase交互,这些API包括...

    Hbase操作Hadoop分布式数据库java工程实例(含测试用例)

    总结起来,这个“Hbase操作Hadoop分布式数据库java工程实例”是一个全面的学习资源,涵盖了HBase的基本概念、Java编程接口和测试实践。通过学习和实践这个实例,开发者能够掌握HBase在Hadoop环境下的实际应用,为大...

    HBase编程实践

    《HBase编程实践》 HBase,全称为Hadoop Base,是构建在Hadoop分布式文件系统(HDFS)之上的开源非关系型数据库,属于NoSQL数据库的一种。它设计用于处理大规模数据集,提供实时读写性能,尤其适用于大数据领域的...

    java 连接远程hbase 数据库

    4. **建立连接**: 通过`ConnectionFactory`创建一个`Connection`实例,这将用于执行HBase操作: ```java Connection connection = ConnectionFactory.createConnection(config); ``` 5. **操作数据**: 使用`...

    java 通过thrift-0.9.1读取hbase表数据

    3. **编写Java代码**:使用生成的Java客户端代码,创建HBase连接,实例化Thrift客户端,然后调用其提供的方法来访问HBase表。通常包括以下步骤: - 连接Thrift服务器:通过`TSocket`或`TFramedTransport`建立与...

    多线程 hbase

    在Java编程环境中,HBase是一个基于Google Bigtable设计的分布式、高性能、版本化的NoSQL数据库。多线程技术是Java程序性能优化的关键手段之一,当处理大数据量时,如HBase这样的系统尤其需要多线程来提升数据读写...

    java链接并对hbase进行增删改查操作的实例代码(含批量插入,范围查询等,并包含所需jar包)

    这个实例代码将帮助开发者理解和实现如何在Java环境中与HBase交互。 首先,要进行HBase操作,你需要在项目中添加相应的依赖。在`.classpath`和`.project`文件中,可能包含了项目的构建和依赖信息,比如Maven或...

    HBase1.4.13安装步骤

    在单机模式下,HBase的配置主要涉及到设置JAVA环境变量,并在 `hbase-env.sh` 文件中设置 `HBASE_MANAGES_ZK` 为 `true`,这表示HBase将管理ZooKeeper实例。同时,我们需要配置 `hbase-site.xml` 文件,以定义HBase...

    hbase用于查询客户端工具

    它不支持复杂的查询,但对于快速检查和监控HBase实例非常有用。 7. **HBase MapReduce**:MapReduce是Hadoop处理大数据的主要工具,HBase与MapReduce结合可以进行批量数据处理和分析。通过编写MapReduce作业,可以...

    ella-hbase-0.96.2:根据ella hbase-0.94修改,取消部分jmx数据获取方式,使用标准hbase java api进行数据获取

    在ella-hbase-0.96.2中,开发者可以直接利用HBase的Table接口创建实例,然后通过Get或Scan对象来读取数据。例如,可以创建一个Get对象来指定行键,然后调用Table的get方法获取特定行的数据。对于范围查询,可以创建...

    scala API 操作hbase表

    Scala是一种强大的函数式编程语言,与Java虚拟机(JVM)兼容,因此非常适合编写HBase的客户端程序。 首先,确保你的开发环境已经配置好,包括安装了Scala、Maven、Hadoop和HBase。在Maven项目中,你需要在`pom.xml`...

    大数据技术基础实验报告-HBase安装配置和应用实践.doc

    - 修改`/usr/local/hbase/conf/hbase-env.sh`,设置`JAVA_HOME`为JDK的安装路径,并设置`HBASE_MANAGES_ZK`为`true`,表示HBase管理自己的ZooKeeper实例。 - 配置`/usr/local/hbase/conf/hbase-site.xml`,尤其是`...

    hadoop中安装hbase及创建表等.docx

    对于更复杂的操作,比如使用Java API编程,我们首先需要在Java程序中建立与HBase的连接。这通常涉及导入相关库,初始化HBase的配置,并创建一个HConnection实例。例如: ```java import org.apache.hadoop.hbase....

    Java爬虫详细完整源码实例

    Java提供了Thread类以及ExecutorService框架来支持多线程编程,或者使用CompletableFuture进行异步处理。 5. **数据存储**:爬取的数据通常需要保存起来,可能是文件系统、数据库(如MySQL、MongoDB)或NoSQL存储...

Global site tag (gtag.js) - Google Analytics