JAVA操作Hbase基础例子

标签: java hbase 基础 | 发表时间:2013-08-25 20:35 | 作者:lovemelovemycode
出处:http://blog.csdn.net
package com.cma.hbase.test;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
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.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.util.Bytes;

import com.cma.hbase.Constants;
import com.cma.hbase.entity.DataModel;
import com.cma.hbase.tools.HbaseUtils;

public class HbaseTest {

    public static void main(String[] args) {
        创建一张表
        createTable("hello_baby",new String[]{"code","ws","wd","t","ps","rh","vis","r"});
        写入一条数据
        writeRecord("hello_baby","row1","code","","code");
        writeRecord("hello_baby","row1","ws","","ws");
        writeRecord("hello_baby","row1","wd","","wd");
        writeRecord("hello_baby","row1","t","","t");
        writeRecord("hello_baby","row1","ps","","ps");
        writeRecord("hello_baby","row1","rh","","rh");
        writeRecord("hello_baby","row1","vis","","vis");
        writeRecord("hello_baby","row1","r","","r");
        写入一组数据
        writeRecordList("hello_baby");
        //查询出一条数据
        getRecord("hello_baby","row1");
        删除一行
        deleteRecord("hello_baby","row1");
        删除一张表
        dropTable("hello_baby");
        清空一张表
        clearTable("hello_baby");
    }

    /**
     * 清空一张表
     * @param string
     */
    private static void clearTable(String tableName) {
        Configuration cfg = HbaseUtils.getCfg();
        
        try {
            HBaseAdmin admin = new HBaseAdmin(cfg);
            
        } catch (MasterNotRunningException e) {
            e.printStackTrace();
        } catch (ZooKeeperConnectionException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            System.out.println("tableName: "+tableName+" drop over!");
        }
    }

    /**
     * 写入一组数据
     * @param tableName
     */
    private static void writeRecordList(String tableName) {
        Long start = System.currentTimeMillis();
        Configuration cfg = HbaseUtils.getCfg();
        try {
            HTable htable = new HTable(cfg,tableName);
            List<Put> puts = getPuts();
            System.out.println(puts.size());
            htable.put(puts);
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            System.out.println("tableName:"+tableName+" write over!");
        }
        Long end = System.currentTimeMillis();
        System.out.println("cost time: "+(end -start));
    }

    private static List<Put> getPuts() {
        List<Put> putList = new ArrayList<Put>();
        List<Put> putRecord = null;
        try {
            List<String> lines = FileUtils.readLines(new File("/home/guest/data/201307310800.csv"));
            for(int i = 1 ;i < lines.size();i++){
                putRecord = getPutsByLine(lines.get(i));
                putList.addAll(putRecord);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return putList;
    }

    /**
     * 获得一组Put
     * @param line
     * @return
     */
    private static List<Put> getPutsByLine(String line) {
        List<Put> puts = new ArrayList<Put>();
        Put put = null;
        
        if(StringUtils.isNotBlank(line)){
            String[] columns = line.split(",");
            String[] families = Constants.FAMILIES;
            String rowKey = "201307310800"+columns[0];
            for(int i = 0;i < columns.length;i++){
                String family = families[i];
                String qualifier = "";
                String value = columns[i];
                put = getPut(rowKey,family,qualifier,value);
                puts.add(put);
            }
        }
        return puts;
    }

    /**
     * 组装一个Put
     * @param rowKey
     * @param family
     * @param qualifier
     * @param value
     * @return
     */
    private static Put getPut(String rowKey, String family, String qualifier,
            String value) {
        Put put = new Put(Bytes.toBytes(rowKey));
        put.add(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));
        return put;
    }

    /**
     * 查询出一条数据
     * @param tableName
     * @param rowKey
     */
    private static void getRecord(String tableName, String rowKey) {
        Configuration cfg = HbaseUtils.getCfg();
        try {
            HTable htable = new HTable(cfg,tableName);
            Get get = new Get(Bytes.toBytes(rowKey));
            Result rs = htable.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(new String(kv.getValue()));
                System.out.println();
            }
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 删除一张表
     * @param tableName
     */
    private static void dropTable(String tableName) {
        Configuration cfg = HbaseUtils.getCfg();
        
        try {
            HBaseAdmin admin = new HBaseAdmin(cfg);
            admin.disableTable(tableName);
            admin.deleteTable(tableName);
        } catch (MasterNotRunningException e) {
            e.printStackTrace();
        } catch (ZooKeeperConnectionException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            System.out.println("tableName: "+tableName+" drop over!");
        }
    }

    /**
     * 删除一行
     * @param tableName
     * @param rowKey
     */
    private static void deleteRecord(String tableName, String rowKey) {
        Configuration cfg = HbaseUtils.getCfg();
        
        try {
            HTable htable = new HTable(cfg,tableName);
            Delete del = new Delete(Bytes.toBytes(rowKey));
            htable.delete(del);
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            System.out.println("rowKey: "+rowKey+" delete over!");
        }
    }

    /**
     * 存储一列
     * @param tableName
     * @param rowKey
     * @param family
     * @param qualifier
     * @param value
     */
    private static void writeRecord(String tableName,String rowKey,String family,String qualifier,String value) {
        Configuration cfg = HbaseUtils.getCfg();
        try {
            HTable htable = new HTable(cfg,tableName);
            Put put = new Put(Bytes.toBytes(rowKey));
            put.add(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));
            htable.put(put);
            
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            System.out.println("family: "+family+" put over!");
        }
    }

    /**
     * 创建一张表
     * @param tableName
     * @param families
     */
    private static void createTable(String tableName,String[] families) {
        HBaseAdmin admin = null;
        try {
            Configuration cfg = HbaseUtils.getCfg();
            System.out.println(cfg);
            admin = new HBaseAdmin(cfg);
            if(admin.tableExists(tableName)){
                System.out.println("表:"+tableName+" 已经存在!");
            }else{
                HTableDescriptor tableDesc = new HTableDescriptor(tableName);
                for(String column : families){
                    tableDesc.addFamily(new HColumnDescriptor(column));
                }
                admin.createTable(tableDesc);
            }
        } catch (MasterNotRunningException e) {
            e.printStackTrace();
        } catch (ZooKeeperConnectionException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            System.out.println("over!");
        }
    }
    

}


作者:lovemelovemycode 发表于2013-8-25 20:35:24 原文链接
阅读:97 评论:0 查看评论

相关 [java hbase 基础] 推荐:

JAVA操作Hbase基础例子

- - CSDN博客云计算推荐文章
        创建一张表.         写入一条数据.         写入一组数据.         //查询出一条数据.         删除一张表.         清空一张表.      * 写入一组数据.      * 获得一组Put.      * 组装一个Put.      * 查询出一条数据.

java基础知识

- - CSDN博客互联网推荐文章
JAVA相关基础知识. 1、面向对象的特征有哪些方面. 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面. 抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节. 抽象包括两个方面,一是过程抽象,二是数据抽象. 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.

JAVA面试精选【Java基础】

- - CSDN博客编程语言推荐文章
  这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱. 只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了. 对于那些正打算找工作JAVA软件开发工作的童鞋们来说,当你看到这份题目的时候,你应该感动很幸运,因为,只要你把题目中的内容都搞懂了,在笔试的时候就可以游刃有余,通过面试只有半步之遥了,笔试只能反映你的JAVA技能.

Java并发编程基础

- - 并发编程网 - ifeve.com
并发是一种能并行运行多个程序或并行运行一个程序中多个部分的能力. 如果程序中一个耗时的任务能以异步或并行的方式运行,那么整个程序的吞吐量和可交互性将大大改善. 现代的PC都有多个CPU或一个CPU中有多个核. 是否能合理运用多核的能力将成为一个大规模应用程序的关键. 进程是以独立于其他进程的方式运行的,进程间是互相隔离的.

Java基础—ClassLoader的理解

- - ZJD'S NOTES
} ``` 其余两个ClassLoader都是继承自`ClassLoader`这个类. Java的类加载采用了一种叫做“双亲委托”的方式(稍后解释),所以除了`Bootstarp ClassLoader`其余的ClassLoader都有一个“父”类加载器, 不是通过集成,而是一种包含的关系. ``` ##“双亲委托” 所谓“双亲委托”就是当加载一个类的时候会先委托给父类加载器去加载,当父类加载器无法加载的时候再尝试自己去加载,所以整个类的加载是“自上而下”的,如果都没有加载到则抛出`ClassNotFoundException`异常.

java实现hbase表创建、数据插入、删除表

- - 学着站在巨人的肩膀上
近日查看了相关资料后,梳理了一下用java实现hbase的表创建、数据插入、删除表,代码如下:. 类别: Hadoop  查看评论.

Windows7+Eclipse环境下Hbase Java客户端的开发

- - zzm
Centos 下Hbase0.98.10-hadoop2 集群的配置. 在Eclipse中创建Maven的工程. 将集群的hbase-site.xml文件放到工程的classes目录下. C:\windows\system32\drivers\etc文件,将Hbase集群的IP以及域名配置到该文件中.

JAVA基础之理解JNI原理

- shuangxi - 博客园-首页原创精华区
JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C、C++)的动态库进行交互,给其它语言发挥优势的机会. 有了JAVA标准平台的支持,使JNI模式更加易于实现和使用. 环境说明:ubuntu 10.4.2 LTS系统.

JAVA并发总结-基础篇

- - CSDN博客编程语言推荐文章
java中有几种方法可以实现一个线程. 继承Thread类,实现Runnable接口创建一个线程的唯一方法是实例化java.lang.Thread类(或其子类),并调用其start()方法. 调用ThreadInstanceA.inerrupt()方法,这样当A线程在Thread的sleep,join方法,或者Object的wait方法的时候会直接抛出InerruptedException,捕捉后便可退出.