HBbaseUtils(HBbase shell的java代码实现)

package com.yuhui.gd.hadoop.hbase;

import java.util.Iterator;

import java.util.Map;

import java.util.Map.Entry;

import java.util.NavigableMap;

import java.util.Set;

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

import org.apache.hadoop.hbase.client.Scan;

import org.apache.hadoop.hbase.util.Bytes;

public class HBaseUtil {

// 声明静态配置 HBaseConfiguration

static Configuration config = HBaseConfiguration.create();

static {

config.set("hbase.zookeeper.quorum", "hd204,hd205,hd206");

}

// 创建一张表,通过HBaseAdmin HTableDecriptor来创建

public static void create(String tableName, String[] columnFamilys)

throws Exception {

HBaseAdmin admin = new HBaseAdmin(config);

if (admin.tableExists(tableName)) {

System.err.println("表名为: " + tableName + " 已经存在!");

System.exit(0);

} else {

HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);

for (String columnFamily : columnFamilys) {

HColumnDescriptor columnDescriptor = new HColumnDescriptor(

columnFamily);

tableDescriptor.addFamily(columnDescriptor);

}

admin.createTable(tableDescriptor);

System.out.println("Create table Success!");

}

}

// 添加一条数据,通过HTable Put为已经存在的表来添加数据

public static void put(String tableName, String row, String columnFamily,

String columnQualifer, String data) throws Exception {

HTable table = new HTable(config, tableName);

Put put = new Put(Bytes.toBytes(row));

put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(columnQualifer),

Bytes.toBytes(data));

table.put(put);

System.out.println("put ‘" + row + "‘ , ‘" + columnFamily + ":"

+ columnQualifer + "‘,‘" + data + "‘");

}

// 根据表名,行键值查询一行记录

public static void get(String tableName, String row) throws Exception {

HTable table = new HTable(config, tableName);

Get get = new Get(Bytes.toBytes(row));

Result result = table.get(get);

NavigableMap<byte[], NavigableMap<byte[], byte[]>> map = result.getNoVersionMap();

Set<Entry<byte[], NavigableMap<byte[], byte[]>>> set = map.entrySet();

System.out.println("ROW\t\tCOLUMN:CELL");

for (Entry<byte[], NavigableMap<byte[], byte[]>> entry : set) {

String familyName = new String(entry.getKey());

NavigableMap<byte[], byte[]> nmap = entry.getValue();

Set<Entry<byte[], byte[]>> valueSet = nmap.entrySet();

for (Entry<byte[], byte[]> column : valueSet) {

String columnName = new String(column.getKey());

String columnValue = new String(column.getValue());

System.out.println(row + "\t\t" + familyName + ":" + columnName

+ "\t" + columnValue);

}

}

}

// 根据表名,查询全表(不包含版本信息---版本时间戳)

public static void get(String tableName) throws Exception {

HTable table = new HTable(config, tableName);

ResultScanner scanner = table.getScanner(new Scan());

Iterator<Result> itr = scanner.iterator();

System.out.println("ROW\t\t\tCOLUMN:CELL");

while (itr.hasNext()) {

Result result = itr.next();

String rowValue = new String(result.getRow());

String tabCount = rowValue.length() >= 8 ? "\t" : "\t\t";

NavigableMap<byte[], NavigableMap<byte[], byte[]>> map = result.getNoVersionMap();

for (Entry<byte[], NavigableMap<byte[], byte[]>> entry : map.entrySet()) {

String family = new String(entry.getKey());

NavigableMap<byte[], byte[]> navigableMap = entry.getValue();

Set<Map.Entry<byte[], byte[]>> set = navigableMap.entrySet();

for (Entry<byte[], byte[]> en : set) {

System.out.println(rowValue + tabCount + "\t" + family

+ ":" + new String(en.getKey()) + "\t" + new String(en.getValue()));

}

}

}

}

// 根据表名,查询全表(包含版本信息---版本时间戳)

public static void get(String tableName, boolean containsTimeStamp)

throws Exception {

if (!containsTimeStamp) {

get(tableName);

} else {

HTable table = new HTable(config, tableName);

Scan scan = new Scan();

ResultScanner resultScanner = table.getScanner(scan);

Iterator<Result> resultItr = resultScanner.iterator();

System.out.println("ROW\t\t\tCOLUMN:CELL");

while (resultItr.hasNext()) {

Result result = resultItr.next();

String rowValue = new String(result.getRow());

String tabCount = rowValue.length() >= 8 ? "\t" : "\t\t";

NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> map                         = result.getMap();

Set<Map.Entry<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>>>                         set = map.entrySet();

for (Entry<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> entry                     : set) {

String familyName = new String(entry.getKey());

NavigableMap<byte[], NavigableMap<Long, byte[]>> columnMap =                                     entry.getValue();

Set<Map.Entry<byte[], NavigableMap<Long, byte[]>>> columnSet =                                     columnMap.entrySet();

for (Entry<byte[], NavigableMap<Long, byte[]>> ent : columnSet) {

String columnName = new String(ent.getKey());

NavigableMap<Long, byte[]> valueMap = ent.getValue();

Set<Map.Entry<Long, byte[]>> valueSet = valueMap.entrySet();

for (Entry<Long, byte[]> e : valueSet) {

Long timeStamp = e.getKey();

String columnValue = new String(e.getValue());

System.out.println(rowValue + tabCount+ "\tcolumn=" +                                             familyName + ":"+ columnName + "\ttimestamp="

+ String.valueOf(timeStamp) + "\tvalue="+ columnValue);

}

}

}

}

}

}

// 删除表中某一行

public static void deleteRow(String tableName, String row, String family,

Long timestamp) throws Exception {

HTable table = new HTable(config, tableName);

Delete delete = new Delete(Bytes.toBytes(row));

if (null == timestamp) {

table.delete(delete.deleteFamily(Bytes.toBytes(family)));

} else {

table.delete(delete.deleteFamily(Bytes.toBytes(family),timestamp.longValue()));

}

}

// 删除表中某一行的某个字段

public static void deleteColumn(String tableName, String row,

String family, String column, Long timestamp) throws Exception {

HTable table = new HTable(config, tableName);

Delete delete = new Delete(Bytes.toBytes(row));

if (null == timestamp) {

table.delete(delete.deleteColumn(Bytes.toBytes(family),Bytes.toBytes(column)));

} else {

table.delete(delete.deleteColumn(Bytes.toBytes(family),

Bytes.toBytes(column), timestamp.longValue()));

}

}

// 删除某个表

public static boolean deleteTable(String tableName) throws Exception {

HBaseAdmin admin = new HBaseAdmin(config);

if (admin.tableExists(tableName)) {

admin.disableTable(tableName);

admin.deleteTable(tableName);

return true;

}

return false;

}

public static void main(String[] args) throws Exception {

get("heroes", "1");

}

}

HBbaseUtils(HBbase shell的java代码实现),布布扣,bubuko.com

时间: 2024-10-22 18:11:32

HBbaseUtils(HBbase shell的java代码实现)的相关文章

Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件

本文通过Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件,代码如下: import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.util.HashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import

Android JAVA代码执行shell命令

Android中级篇之用JAVA代码执行shell命令 [日期:2011-12-08] 来源:Linux社区  作者:y13872888163    在Android可能有的系统信息没有直接提供API接口来访问,为了获取系统信息时我们就要在用shell指令来获取信息,这时我们可以在代码中来执行命令 ,这里主要用到ProcessBuilder 这个类. 代码部分  : 1.package com.yin.system_analysis; 2.import java.io.File; 3.impor

Android Java代码执行adb Shell命令

通过java代码代替adb命令 增加工具类 ShellUtils.java import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; /** * ShellUtils */ public class ShellUtils { public static fin

重复调用ab命令的shell代码和整理ab结果的java代码

先说下问题产生的背景,因为要做压力测试,频繁使用ab命令,需要测试好多项,每项测试要做10遍以上,测试完了还要画测试结果曲线,又因为公司内网不稳定,测十遍都找不到个准确值,所以只能在别人下班时测试.但是问题是,一旦服务器改了配置,就要把所有测试再做一遍,而且只能晚上测,而且只能晚上测,而且只能晚上测...重要的事情说三遍.所以我想啊,晚上测试,白头干啥?于是白天写脚本了,晚上运行一下,早上来看结果,做做曲线图. ab命令是一个很好的网站压力测试工具, 在mac下,查看帮助为 man ab 在li

linux下的shell命令的编写,以及java如何调用linux的shell命令(java如何获取linux上的网卡的ip信息)

程序员都很懒,你懂的! 最近在开发中,需要用到服务器的ip和mac信息.但是服务器是架设在linux系统上的,对于多网口,在获取ip时就产生了很大的问题.下面是在windows系统上,java获取本地ip的方法.贴代码: package com.herman.test; import java.net.InetAddress; /** * @see 获取计算机ip * @author Herman.Xiong * @date 2014年5月16日 09:35:38 */ public class

通过shell脚本实现代码自动化部署

一.传统部署方式及优缺点 1.传统部署方式 (1)纯手工scp (2)纯手工登录git pull.svn update (3)纯手工xftp往上拉 (4)开发给打一个压缩包,rz上去:解压 2.缺点 (1)全程运维参与,占用大量时间 (2)上线速度慢 (3)人为失误多,管理混乱 (4)回滚慢,不及时 二.环境规划 1.开发环境--开发者本地有自己的环境. 运维需要设置的开发环境,大家共用的服务. 2.测试环境:功能测试环境和性能测试环境. 3.预生产环境:生产环境集群中的某一个节点. 4.生产环

MapReduce实现两表的Join--原理及python和java代码实现

用Hive一句话搞定的,但是有时必须要用mapreduce 方法介绍 1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的.而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的技巧. 本文首先介绍了Hadoop上通常的JOIN实现方法,然后给出了几种针对不同输入数据集的优化方法. 2. 常见的join方法介绍 假设要进行join的数据分别来自File1和File2. 2.1 reduce side jo

shell编程--统计代码行数

引:之前都太懒,没有及时把学到的知识总结到博客里.最近在学shell编程,正好作为养成写博客习惯的开端.平时我们都会遇到一个问题,写完一个项目后,想统计一下总的代码量,当代码文件很多时,一个个点开代码文件,然后把代码行数加起来是一件很费神的事.shell可以用短短几行代码就搞定这个问题. 一 shell源码(code_linage.sh): 1 #!/bin/bash 2 3 if [ $# -eq 1 ] && [ -d $1 ] 4 then 5 find $1 -type f -na

mongodb3.0分片及java代码连接操作测试(开启用户验证)

最近抽时间搭建了一下mongodb简单的分片,整个过程还算是蛮顺利,只不过在用户验证这一块遇到了一些问题,好在最后终于搞定. 一.服务器搭建过程: 1.安装四个mongodb:一个作为config.一个作为mongos.另外两个作为主要数据存储的服务器(机器ip192.168.0.201),如图: 分别对应图中被红框框起来的mongoconf.mongos.mongo1.mongo2(解压安装,安装过程省略). 2.分别建立data.conf.logs文件夹,并在logs文件夹下建立mongod