package test;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
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.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
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.apache.hadoop.hbase.client.HConnection;
import org.apache.hadoop.hbase.client.HConnectionManager;
import org.apache.hadoop.hbase.client.HTableInterface;

public class HBaseCommons {
 
    //声明静态配置
    static Configuration conf=null;
    static HConnection conn=null;
    static{
        conf=HBaseConfiguration.create();
    //    conf.set("hbase.zookeeper.quorum","Master.Hadoop");
        try {
            conn=HConnectionManager.createConnection(conf);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    /*
     * 创建表
     *
     * @tableName 表名
     *
     * @family 列簇列表
     */
        public static void createTable(String tableName,String[] family)
             throws Exception{
         HBaseAdmin admin=new HBaseAdmin(conf);
         HTableDescriptor desc=new HTableDescriptor(TableName.valueOf(tableName));//新的语法
         for(int i=0;i<family.length;i++)
         {
             desc.addFamily(new HColumnDescriptor(family[i]));
         }
         if(admin.tableExists(tableName))
         {
             System.out.println("table Exists!");
             System.exit(0);
         } else{
             admin.createTable(desc);
             System.out.println("create table Sucess!");
         }
        }
    
    /*
     * 为表添加数据(适合知道有多少列簇的固定表)
     *
     * @rowKey rowKey
     *
     * @tableName 表名
     *
     * @column1 第一个列簇列表
     *
     * @value1 第一个列的值的列表
     *
     * @column2 第二个列簇列表
     *
     * @value2 第二个列的值的列表
     */
        public static void addData(String rowKey, String tableName, String[] column1,
                String[] value1, String[] column2, String[] value2)throws IOException{
            Put put=new Put(Bytes.toBytes(rowKey)); //设置rowKey
            HTableInterface table=conn.getTable(tableName); //获取表
            HColumnDescriptor[] columnFamilies=table.getTableDescriptor().getColumnFamilies();//获取所有的列簇
            for(int i=0;i<columnFamilies.length;i++){
                String familyName=columnFamilies[i].getNameAsString();//获取列簇名
                if(familyName.equals("article")){ //article列簇put数据
                    for(int j=0;j<column1.length;j++){
                        put.add(Bytes.toBytes(familyName),
                                   Bytes.toBytes(column1[j]),
                                   Bytes.toBytes(value1[j])
                                );                        
                      }
                  }
                if(familyName.equals("author")){ //article列簇put数据
                    for(int j=0;j<column2.length;j++){
                        put.add(Bytes.toBytes(familyName),
                                   Bytes.toBytes(column2[j]),
                                   Bytes.toBytes(value2[j])
                                );                        
                      }
                  }
            }
            table.put(put);
            table.close();
            System.out.println("add data Sucess!");
             
        }
        
        /*
         * 根据rowkey查询
         *
         * @rowKey rowKey
         *
         * @tableName 表名
         */
        
        public static Result getResult(String tableName,String rowKey)
        throws IOException{
            Get get=new Get(Bytes.toBytes(rowKey));
            HTableInterface table=conn.getTable(tableName); //获取表
            Result result=table.get(get);
            for(Cell kv:result.rawCells())
            {
                System.out.println("family:"+new String(CellUtil.cloneFamily(kv)));
                System.out.println("qualifier:"+new String(CellUtil.cloneQualifier(kv)));
                System.out.println("value:"+new String(CellUtil.cloneValue(kv)));
                System.out.println("Timestamp:"+kv.getTimestamp());
                System.out.println("------------------------------------------");
            /*    System.out.println("value:"+new String(CellUtil.cloneValue(kv)));*/
            }
            table.close();
            return result;
        }
        
        /*
         * 遍历查询hbase表
         *
         *  @tableName表名
         */
        public static void getResultScan(String tableName)throws IOException{
            Scan scan=new Scan();
            ResultScanner rs=null;
        //    HTable table=(HTable)tablePool.getTable(tableName);
            HTableInterface table=conn.getTable(tableName);
    //        Configuration hbaseConf=HBaseConfiguration.create();
    //        HTable table=new HTable(hbaseConf,tableName);
            try {
                rs=table.getScanner(scan);
                for(Result r:rs)
                {
                    for(Cell kv:r.rawCells())
                    {
                        System.out.println("family:"+new String(CellUtil.cloneFamily(kv)));
                        System.out.println("qualifier:"+new String(CellUtil.cloneQualifier(kv)));
                        System.out.println("value:"+new String(CellUtil.cloneValue(kv)));
                        System.out.println("Timestamp:"+kv.getTimestamp());
                        System.out.println("------------------------------------------");
                    /*    System.out.println("value:"+new String(CellUtil.cloneValue(kv)));*/
                    }
                }
            } catch (Exception e) {
                // TODO: handle exception
            }finally{
                rs.close();
                table.close();
            }
        }
    
    /*
     * 查询表中的某一列
     *
     * @tableName 表名
     *
     * @rowKey rowKey
     *
     * @familyName 列簇
     *
     * @columnName 列名
     */
        public static void getResultByColumn(String tableName,String rowKey,
                String familyName,String columnName)throws IOException{
          HTableInterface table=conn.getTable(tableName);
            Get get=new Get(Bytes.toBytes(rowKey));
            //获取指定列簇和列修饰符对应的列
            get.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName));
            Result result=table.get(get);
            for(Cell kv:result.rawCells())
            {
                System.out.println("family:"+new String(CellUtil.cloneFamily(kv)));
                System.out.println("qualifier:"+new String(CellUtil.cloneQualifier(kv)));
                System.out.println("value:"+new String(CellUtil.cloneValue(kv)));
                System.out.println("Timestamp:"+kv.getTimestamp());
                System.out.println("------------------------------------------");
            /*    System.out.println("value:"+new String(CellUtil.cloneValue(kv)));*/
            }
            table.close();
            
        }
            /*
             * 更新表中的某一列
             *
             * @tableName 表名
             *
             * @rowKey rowKey
             *
             * @familyName 列簇名
             *
             * @columnName 列名
             *
             * @value 更新后的值
             */
            public static void updateTable(String tableName,String rowKey,
                    String familyName,String columnName,String value)
            throws IOException{
                HTableInterface table=conn.getTable(tableName);
                Put put=new Put(Bytes.toBytes(rowKey));
                put.add(Bytes.toBytes(familyName),Bytes.toBytes(columnName),
                        Bytes.toBytes(value));
                table.put(put);
                table.close();
                System.out.println("update table Success!");
            }
            /*
             * 查询某列数据的多个版本
             *
             * @tableName 表名
             *
             * @rowKey rowKey
             *
             * @familyName 列簇名
             *
             * @columnName 列名
             */
            public static void getResultByVersion(String tableName,String rowKey,
                    String familyName,String columnName)throws IOException{
                HTableInterface table=conn.getTable(tableName);
                Get get=new Get(Bytes.toBytes(rowKey));
                get.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName));
                get.setMaxVersions(5);
                Result result=table.get(get);
                for(Cell kv:result.rawCells())
                {
                    System.out.println("family:"+new String(CellUtil.cloneFamily(kv)));
                    System.out.println("qualifier:"+new String(CellUtil.cloneQualifier(kv)));
                    System.out.println("value:"+new String(CellUtil.cloneValue(kv)));
                    System.out.println("Timestamp:"+kv.getTimestamp());
                    System.out.println("------------------------------------------");
                }
                table.close();
            }
            /*
             * 删除指定的列
             *
            *  @tableName 表名
             *
             *  @rowKey rowKey
             *  
             *  @familyName 列簇名
             *  
             *  @columnName 列名
             */
            public static void deleteColumn(String tableName,String rowKey,
                    String familyName,String columnName)throws IOException{
                HTableInterface table=conn.getTable(tableName);
                Delete deleteColumn=new Delete(Bytes.toBytes(rowKey));
                deleteColumn.deleteColumns(Bytes.toBytes(familyName),Bytes.toBytes(columnName));
                table.delete(deleteColumn);
                table.close();
                System.out.println(familyName+":"+columnName+"is deleted!");
            }
            /*
             * 删除指定的列
             *
             * @tableName 表名
             *
             * @rowKey rowKey
             */
            public static void deleteAllColumn(String tableName,String rowKey)
            throws IOException{
                HTableInterface table=conn.getTable(tableName);
                Delete deleteAll=new Delete(Bytes.toBytes(rowKey));
                table.delete(deleteAll);
                table.close();
                System.out.println("all columns are deleted!");                
            }
            
            /*
             * 删除表
             *
             * @tableName 表名
             */
            public static void deleteTable(String tableName)throws IOException{
                HBaseAdmin admin=new HBaseAdmin(conf);
                admin.disableTable(tableName);
                admin.deleteTable(tableName);
                System.out.println(tableName+" is deleted!");
            }
            
            public static void main(String[] args) throws Exception{
                getResultScan("Movie");
                getResult("Movie","7065187");
            }
}

做个小推广:程序员经常久坐,颈椎毛病比较多,特别推荐ventry颈椎保健枕

HBase(0.96)新的Java API操作的更多相关文章

  1. HBase 6、用Phoenix Java api操作HBase

    开发环境准备:eclipse3.5.jdk1.7.window8.hadoop2.2.0.hbase0.98.0.2.phoenix4.3.0 1.从集群拷贝以下文件:core-site.xml.hb ...

  2. hadoop2-HBase的Java API操作

    Hbase提供了丰富的Java API,以及线程池操作,下面我用线程池来展示一下使用Java API操作Hbase. 项目结构如下: 我使用的Hbase的版本是 hbase-0.98.9-hadoop ...

  3. java api操作

    java api操作 导入开发包 将hbase安装包中lib下包导入java项目   创建表   Configuration conf = HBaseConfiguration.create(); c ...

  4. hive-通过Java API操作

    通过Java API操作hive,算是测试hive第三种对外接口 测试hive 服务启动 package org.admln.hive; import java.sql.SQLException; i ...

  5. 使用Java API操作HDFS文件系统

    使用Junit封装HFDS import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org ...

  6. Kafka系列三 java API操作

    使用java API操作kafka 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

  7. Hadoop 2.2 & HBase 0.96 Maven 依赖总结

    由于Hbase 0.94对Hadoop 2.x的支持不是非常好,故直接添加Hbase 0.94的jar依赖可能会导致问题. 但是直接添加Hbase0.96的依赖,由于官方并没有发布Hbase 0.96 ...

  8. MongoDB Java API操作很全的整理

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,一般生产上建议以共享分片的形式来部署. 但是MongoDB官方也提供了其它语言的客户端操作API.如下图所示: 提供了C.C++ ...

  9. zookeeper的java api操作

    zookeeper的java api操作 创建会话: Zookeeper(String connectString,int sessionTimeout,Watcher watcher) Zookee ...

随机推荐

  1. Mybatis 代码自动生成(generatorConfig.xml配置)

    博客推荐: Mybatis最入门---代码自动生成(generatorConfig.xml配置) MyBatis Generator generatorConfig.xml配置详解 pom.xml&l ...

  2. E20170623-hm

    verbose  adj. 冗长的,啰唆的,累赘的; reverse   vt. (使) 反转; (使) 颠倒; 掉换,交换; [法] 撤消,推翻;                adj. 反面的; ...

  3. [转载]马士兵Java视频教程 —— 学习顺序

    书(Java核心编程)+视频..这样学感觉比较好.. 原文地址:马士兵Java视频教程 —— 学习顺序作者:习惯 第一部分:J2se学习视频内容包括: 尚学堂科技_马士兵_JAVA视频教程_JDK5. ...

  4. [Swift通天遁地]三、手势与图表-(8)制作股市中常用的蜡烛图表

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  5. 【知识总结】后缀数组(Suffix_Array)

    又是一个学了n遍还没学会的算法-- 后缀数组是一种常用的处理字符串问题的数据结构,主要由\(sa\)和\(rank\)两个数组组成.以下给出一些定义: \(str\)表示处理的字符串,长度为\(len ...

  6. 从flappy bird中论优化

    前两天刚刚做完2014年noipD1T3飞扬的小鸟 其实这道题本身并不是一道很难的DP 状态容易想到,转移也容易想到 但是出于我的基础较差,还是出了较大的偏差 Problem: Flappy Bird ...

  7. Linux命令(004) -- watch

    对Linux系统的操作过程中,经常会遇到重复执行同一命令,以观察其结果变化的情况.惯用的方法是:上下键加回车,或是Ctr+p然后回车.今天我们来了解一下watch命令,它可以帮助我们周期性的执行一个命 ...

  8. PHP 在线 编辑 解析

    http://www.w3schools.com/php/default.asp    http://www.w3schools.com/php/showphp.asp?filename=demo_s ...

  9. (转)50道JavaScript基础面试题(附答案)

    https://segmentfault.com/a/1190000015288700 1 介绍JavaScript的基本数据类型 Number.String .Boolean .Null.Undef ...

  10. 【转】升级还是权谋?从USB PD 2.0到3.0

    原文出处 http://www.eetop.cn/blog/html/43/n-433743.html 如同iPhone的出现,才让智能机真正主导手机市场一样,Type-C口发布后,USB PD才正式 ...