HBase(0.96)新的Java API操作
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操作的更多相关文章
- 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 ...
- hadoop2-HBase的Java API操作
Hbase提供了丰富的Java API,以及线程池操作,下面我用线程池来展示一下使用Java API操作Hbase. 项目结构如下: 我使用的Hbase的版本是 hbase-0.98.9-hadoop ...
- java api操作
java api操作 导入开发包 将hbase安装包中lib下包导入java项目 创建表 Configuration conf = HBaseConfiguration.create(); c ...
- hive-通过Java API操作
通过Java API操作hive,算是测试hive第三种对外接口 测试hive 服务启动 package org.admln.hive; import java.sql.SQLException; i ...
- 使用Java API操作HDFS文件系统
使用Junit封装HFDS import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org ...
- Kafka系列三 java API操作
使用java API操作kafka 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...
- Hadoop 2.2 & HBase 0.96 Maven 依赖总结
由于Hbase 0.94对Hadoop 2.x的支持不是非常好,故直接添加Hbase 0.94的jar依赖可能会导致问题. 但是直接添加Hbase0.96的依赖,由于官方并没有发布Hbase 0.96 ...
- MongoDB Java API操作很全的整理
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,一般生产上建议以共享分片的形式来部署. 但是MongoDB官方也提供了其它语言的客户端操作API.如下图所示: 提供了C.C++ ...
- zookeeper的java api操作
zookeeper的java api操作 创建会话: Zookeeper(String connectString,int sessionTimeout,Watcher watcher) Zookee ...
随机推荐
- 【转载】[Oracle] Linux下手动创建数据库过程
今天发现一个Oracle测试库的字符集设置不正确,原本的字符集是UTF-8,正确的字符集应该是ZHS16GBK,因为UTF-8是ZHS16GBK的超集,无法修改,只能重建数据库,幸好该测试库上还没有数 ...
- PCB Genesis 无需启动Xmanager图形窗口运行脚本 实现方法
从事PCB工程行业的都知道,启动Genesis需2个exe程序(Xmanager.exe与get.exe)需一起启动才可以打开我们熟悉的软件, 而Xmanager是图形窗口是给用户UI交互使用的,如果 ...
- javascript的鼠标事件---基础
- [Apple开发者帐户帮助]九、参考(4)支持的功能(macOS)
macOS应用程序可用的功能取决于您的程序成员身份和签名证书. 能力 ADP 开发者ID Apple开发者 应用程序组 App沙盒 游戏中心 硬化运行时 iCloud:CloudKit i ...
- vue工程npm run serve/start/dev启动时,node_modules文件报:Cannot read property 'range' of null 错误
改问题是"babel-eslint"版本更新问题导致的: 给大家一个最简单粗暴的解决方案: 在项目里找到对应的工程:直接删除里面的node_modules文件夹,然后重新npm i ...
- Java高质量20问
问题一:在多线程环境中使用HashMap会有什么问题?在什么情况下使用get()方法会产生无限循环? HashMap本身没有什么问题,有没有问题取决于你是如何使用它的.比如,你在一个线程里初始化了一个 ...
- leetCode----day01---- 从排序数组中删除重复项
需求: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. ...
- Android App签名(为apk签名)
最近有朋友问到 android 签名的问题,所以转一篇给大家分享: 这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 1.签名的意义 为了保证每个应用程序开 ...
- 350 Intersection of Two Arrays II 两个数组的交集 II
给定两个数组,写一个方法来计算它们的交集.例如:给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].注意: 输出结果中每个元素出现的次数, ...
- 【转】linux下vi命令大全
转自:http://www.cnblogs.com/88999660/articles/1581524.html 进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi ...