`

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编写
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();
        }
    }
}



1.程序编译为一个jar包hbtest.jar
2.写个shell 脚本:(hbtest.sh)


#!/bin/sh

source ~/.bash_profile
export HADOOP_CLASSPATH=/home/liliugen/hadoop-0.20.2/hadoop-core-0.20.2-cdh3u0.jar:/home/liliugen/hbase-0.90.1/hbase-0.90.1-cdh3u0.jar:/home/liliugen/zookeeper-3.3.3/zookeeper-3.3.3.jar

/home/liliugen/hadoop-0.20.2/bin/hadoop jar hbtest.jar hbase.HBaseTest
分享到:
评论

相关推荐

    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