`
liyonghui160com
  • 浏览: 774671 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HBaseClient

阅读更多

 

 

 

package com.feng.scheduler.log;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.HTableInterface;
import org.apache.hadoop.hbase.client.HTablePool;
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.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.FilterList.Operator;
import org.apache.hadoop.hbase.filter.PageFilter;
import org.apache.hadoop.hbase.filter.PrefixFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author bjzhongdegen
 * 
 */
public class HBaseClient {
	protected static final Logger LOGGER = LoggerFactory.getLogger(HBaseClient.class);

	private static Configuration HBASE_CONF = null;
	private static HTablePool TABLE_POOL = null;
	private static final String CONNECTOR = "#";
	private static com.feng.scheduler.common.filemanager.Configuration commonConf = null;

	/**
	 * 初始化配置
	 */
	static {
		commonConf = new com.feng.scheduler.common.filemanager.Configuration("common-config.xml");
		Configuration conf = new Configuration();
		// 与hbase/conf/hbase-site.xml中hbase.zookeeper.quorum配置的值相同
		conf.set("hbase.zookeeper.quorum", commonConf.getDefault("hbase.zookeeper.quorum", "127.0.0.1"));
		// 与hbase/conf/hbase-site.xml中hbase.zookeeper.property.clientPort配置的值相同
		conf.set("hbase.zookeeper.property.clientPort", commonConf.getDefault("hbase.zookeeper.property.clientPort", "2181"));
		HBASE_CONF = HBaseConfiguration.create(conf);
		TABLE_POOL = new HTablePool(HBASE_CONF, 30);

	}

	public static LogRecord scanLog(String tableName, String prifixKey, String startkey, String stopKey) {
		LOGGER.info("Get prifixKey["+prifixKey+"], startkey="+startkey+", stopKey="+stopKey);
		LogRecord result = new LogRecord();
		
		StringBuffer sb = new StringBuffer();
		HTableInterface table = null;
		try {
			table = TABLE_POOL.getTable(tableName);
			Scan s = new Scan();
			s.setCaching(100);
			List<Filter> list = new ArrayList<Filter>();

			Filter prifixFilter =new PrefixFilter(prifixKey.getBytes());
			Filter pageFilter = new PageFilter(100);
			list.add(pageFilter);
			list.add(prifixFilter);
			Filter all = new FilterList(Operator.MUST_PASS_ALL, list);
			s.setFilter(all);
			s.setStartRow(startkey.getBytes());
			if(!StringUtils.isBlank(stopKey)) {
				s.setStopRow(stopKey.getBytes());
			}
			ResultScanner rs = table.getScanner(s);
			for (Result r : rs) {
                        //新版本api
                        for(Cell cell:r.rawCells()){   
                        System.out.println("RowName:"+new String(CellUtil.cloneRow(cell))+" ");
                        System.out.println("Timetamp:"+cell.getTimestamp()+" ");
                        System.out.println("column Family:"+new String(CellUtil.cloneFamily(cell))+" ");
                        System.out.println("row Name:"+new String(CellUtil.cloneQualifier(cell))+" ");
                        System.out.println("value:"+new String(CellUtil.cloneValue(cell))+" ");
                               }

				KeyValue[] kv = r.raw();
				for (int i = 0; i < kv.length; i++) {
					sb.append(new String(kv[i].getValue())).append("\n");
					if(i == kv.length - 1) {
						result.setNextTimestamp(getTimeStamp(new String(kv[i].getRow())));
					}
				}
			}
			rs.close();
		} catch (IOException e) {
			LOGGER.error("Get prifixKey["+prifixKey+"], startkey="+startkey+", stopKey="+stopKey, e);
		} finally {
			closeHTable(table);
		}
		result.setContent(sb.toString());
		return result;
	}
	
	/**
	 * @param string
	 * @return
	 */
	private static Long getTimeStamp(String stopKey) {
		return Long.valueOf(stopKey.split(CONNECTOR)[1]);
	}

	public static void pushLog(String tableName, String taskInstanceId, String logContent) {
		pushLog(tableName, taskInstanceId, logContent, "f", "content");
	}
	
	public static void pushLog(String tableName, String taskInstanceId, String logContent, String family, String qualifier) {
		LOGGER.info("push " + taskInstanceId + " log to " + tableName);
		HTableInterface table = null;
		try {
			table = TABLE_POOL.getTable(tableName);
			Put put = new Put((taskInstanceId + CONNECTOR + System.currentTimeMillis()).getBytes());
			put.add(family.getBytes(), qualifier.getBytes(), logContent.getBytes());
			table.put(put);
		} catch (IOException ioe) {
			LOGGER.error("push " + taskInstanceId + " log to " + tableName + " failed.", ioe);
		} catch (Throwable e) {
			LOGGER.error("push " + taskInstanceId + " log to " + tableName + " failed.", e);
		} finally {
			closeHTable(table);
		}
	}

	private static void closeHTable(HTableInterface table) {
		if(table == null)
			return;
		
		try {
			table.close();
		} catch (IOException e) {
			LOGGER.warn("close hbase table FAILED", e);
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
//		for(int i=0; i< 100;i ++) {
//			HBaseClient.pushLog("task_logs", "xxxxxx", "lllllllllllllllllllllllllll");
//		}
		
		LogRecord result = HBaseClient.scanLog("task_logs", "9#", "9#1", null);
		System.out.println(result.getContent());
		
	}
}

 

分享到:
评论

相关推荐

    [原创]HbaseClient

    《HbaseClient详解》 HbaseClient是Apache HBase的核心组件之一,它是客户端与HBase分布式数据库进行交互的桥梁。本文将深入探讨HbaseClient的工作原理、主要功能以及使用技巧,帮助读者更好地理解和掌握HBase的...

    阿里巴巴开源的Hbase Client node-hbase-client.zip

    当前状态:完全通过 HBase 0.94 和 0.94.16Java hbase-client支持 HBase 服务器的版本[√] 0.94.x[√] 0.94.0[√] 0.94.160.95.x0.96.x安装$ npm install hbase-client使用 CRUD:通过 zookeeper 创建 HBase ...

    HBaseClient:HBase客户端数据管理软件

    HBaseClient HBase客户端数据管理软件 概要说明 类似PL/SQL,是一个HBase数据库的客户端数据管理软件。是免费开源的软件。 基于XJava,使用xml配置文件绘制可视化界面。 可视化界面操作 表 表的定义、编辑、删除; ...

    HBaseClient-Download:HBaseClient 编译后的版本库

    HBaseClient-Download 提供的是一个已经编译完成的 HBase 客户端版本库,这对于开发者来说是一个宝贵的资源,因为它可以直接用于与 HBase 数据库进行交互,而无需自行编译源代码。HBase 是一个分布式、面向列的NoSQL...

    解决hbase client在windows环境下报NoClassDefFound问题

    解决hbase client在windows环境下报Could not initialize class org.fusesource.jansi.internal.Kernel32的问题,把jar包放入hbase client的lib包下,重新运行hbase.cmd shell即可

    HareDB HBase Client:用于HBase的GUI工具(包括PIG和高速Hive查询)-开源

    标题中的“HareDB HBase Client”是一款专为HBase设计的图形用户界面(GUI)工具,它旨在简化HBase数据库的管理和操作。HBase是Apache Hadoop生态系统中的一个分布式、面向列的NoSQL数据库,通常用于处理大规模数据...

    hbase-client-2.1.0-cdh6.3.0.jar

    hbase-client-2.1.0-cdh6.3.0.jar

    hbase-client-1.4.3-API文档-中文版.zip

    赠送jar包:hbase-client-1.4.3.jar; 赠送原API文档:hbase-client-1.4.3-javadoc.jar; 赠送源代码:hbase-client-1.4.3-sources.jar; 赠送Maven依赖信息文件:hbase-client-1.4.3.pom; 包含翻译后的API文档:...

    hbase-client-1.1.2-API文档-中文版.zip

    赠送jar包:hbase-client-1.1.2.jar; 赠送原API文档:hbase-client-1.1.2-javadoc.jar; 赠送源代码:hbase-client-1.1.2-sources.jar; 赠送Maven依赖信息文件:hbase-client-1.1.2.pom; 包含翻译后的API文档:...

    HBaseClient_1.6.1_64.exe

    hbase连接工具,方便操作,可视化数据

    hbase的java client实例

    在分布式大数据存储领域,HBase是一个非常重要的列式数据库,尤其在处理海量实时数据时表现卓越。本主题将深入探讨如何使用Java客户端API与HBase进行交互,包括集成Spring、MapReduce实例以及协处理器的使用。 首先...

    HBase_Client_Api_Guide

    HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181"); HBaseConfiguration cfg = new HBaseConfiguration(HBASE_CONFIG); } ``` **2.2 创建表** 创建表主要是通过`HBaseAdmin`对象来完成的,该...

    Hbase 可视化客户端工具(非phoenix连接)

    HBase,作为Apache Hadoop生态系统中的一个分布式、高性能、列式存储的NoSQL数据库,常用于处理大规模数据。虽然HBase提供了命令行接口(CLI)供用户操作数据库,但这种交互方式对于复杂查询和管理任务可能不够直观...

    hbase-client

    HBaseClient_1.6.1_64.exe可能是针对Windows系统的HBase客户端安装程序,便于用户在Windows环境下快速部署和使用。 二、HBase Shell HBase Shell是HBase自带的一个基于JLine的命令行工具,提供了与HBase交互的命令...

    最新版linux hbase-2.3.2-client-bin.tar.gz

    在Linux环境下,我们可以使用hbase-2.3.2-client.jar来实现这一目标。这个客户端库包含了连接HBase集群、执行Get、Put、Scan等操作所需的API。 1. 连接集群:首先,我们需要配置HBase的连接参数,如Zookeeper地址。...

    hadoop hbase 全jar包

    HBase的jar包则包含了HBase Server、HBase Client、Zookeeper等相关组件,使得开发者可以与HBase集群进行交互,执行CRUD(创建、读取、更新、删除)操作。 在实际使用中,开发者可能需要将这些jar包添加到类路径...

    hbase-0.94.12

    HBase是一个分布式的、面向列的开源数据库,该技术来源于Chang et al所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储...

    hbase-2.4.11-bin.tar.gz

    《HBase 2.4.11:大数据存储与管理的基石》 HBase,作为Apache软件基金会的一个开源项目,是构建在Hadoop文件系统(HDFS)之上的分布式、面向列的数据库,专为处理大规模数据而设计。标题中的“hbase-2.4.11-bin....

    hbase-client-1.2.12-API文档-中文版.zip

    赠送jar包:hbase-client-1.2.12.jar; 赠送原API文档:hbase-client-1.2.12-javadoc.jar; 赠送源代码:hbase-client-1.2.12-sources.jar; 赠送Maven依赖信息文件:hbase-client-1.2.12.pom; 包含翻译后的API文档...

    Hbase

    在 HBase 中,客户端(如 `HbaseClient.java` 文件所示)是应用程序与 HBase 交互的接口。客户端通过连接到 ZooKeeper 获取 Master Server 的位置,然后与 RegionServer 进行通信,执行 CRUD(创建、读取、更新和...

Global site tag (gtag.js) - Google Analytics