计划每周写一篇博客,督促自己快点学习,懒惰会让人上瘾,努力奋斗,不忘初心。

某天,忽然来任务,要做hbse入库,之前自学过hbase,感觉挺简单的,网上搜了些model直接撸码,一天完成核心功能,测试了下跑通了,更加需求建了两个表,每张表日录入数据量接近两千万,感觉挺简单的。大概过了快一个月,这个很简单的东西,罢工了提示查询失败。

因业务需要,设计时keyvalue定义很长,40多个字节,包含业务和时间,每天接近两千万的数据录入,只能坚持20多天,后来,多方求证,换了一种替代办法,每半个月建立一张新表,根据查询时间,判断要查询的表,从而获取数据。

总结:

1、rowkey设计很重要,最好不大于8字节。如果超过了,考虑分表

2、列族和列限定符尽量小,有利于加快查询速度。

啰嗦这么多,上代码。

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

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.MasterNotRunningException;

import org.apache.hadoop.hbase.NamespaceDescriptor;

import org.apache.hadoop.hbase.TableName;

import org.apache.hadoop.hbase.ZooKeeperConnectionException;

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.util.Bytes;

import com.hbase.insert.model.InsertModel;

@SuppressWarnings("all")

public class HbaseUtil {

private static final Log log = LogFactory.getLog(HbaseUtil.class);

private Configuration conf;

private InsertModel insertModel;

public HbaseUtil(InsertModel insertModel){

this.conf=HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", insertModel.getIp());

this.insertModel=insertModel;

}

/**

* 创建表

* @param tableName

*/

public void createTable(String tableName){

try {

HBaseAdmin admin=new HBaseAdmin(conf);

NamespaceDescriptor[] namespace=admin.listNamespaceDescriptors();

int state=0;

/*获取命名空间*/

for(NamespaceDescriptor name:namespace){

if(name.getName().equals(insertModel.getDataName())){

state=1;

}

}

/*创建命名空间*/

if(state==0){

admin.createNamespace(NamespaceDescriptor.create(insertModel.getDataName()).build());

}

if(admin.tableExists(insertModel.getDataName()+":"+tableName)){

log.info("tables Exists!");

}else{

/*创建表*/

HTableDescriptor desc=new HTableDescriptor(TableName.valueOf(insertModel.getDataName()+":"+tableName));

desc.addFamily(new HColumnDescriptor(insertModel.getFamilName()).setTimeToLive(insertModel.getTime()));

admin.createTable(desc);

log.info("create table Success!");

}

admin.close();

} catch (MasterNotRunningException e) {

log.error(e,e);

} catch (ZooKeeperConnectionException e) {

log.error(e,e);

} catch (IOException e) {

log.error("IOException ",e);

}

}

public boolean getTableStatus(String tableName){

try {

HBaseAdmin admin=new HBaseAdmin(conf);

return admin.tableExists(insertModel.getDataName()+":"+tableName);

} catch (MasterNotRunningException e) {

log.error(e,e);

} catch (ZooKeeperConnectionException e) {

log.error(e,e);

} catch (IOException e) {

log.error(e,e);

}

return false;

}

/**

* 删除表

*/

public void delTable(String tableName){

try {

HBaseAdmin admin=new HBaseAdmin(conf);

if(admin.tableExists(insertModel.getDataName()+":"+tableName)){

admin.disableTable(insertModel.getDataName()+":"+tableName);

admin.deleteTable(insertModel.getDataName()+":"+tableName);

log.info("Delete "+tableName+" Success!");

}else{

log.info("No Found This Table:"+tableName);

}

} catch (MasterNotRunningException e) {

log.error(e,e);

} catch (ZooKeeperConnectionException e) {

log.error(e,e);

} catch (IOException e) {

log.error(e,e);

}

}

/**

* 添加数据

*/

public void addData(List lineContext,String Yesterday,String dataTime){

HTable table = null;

try {

String[] text;

Put put;

String rowkey;

List imsi=new ArrayList();

for(String context:lineContext){  //imsi,phone

text=context.split("\\,");

if(text[1].startsWith("1")&&text[1].length()==11){

rowkey=text[0]+Yesterday;

put =new Put(Bytes.toBytes(rowkey)); //设置rowkey

put.add(Bytes.toBytes(insertModel.getFamilName()),Bytes.toBytes(insertModel.getCloumnName()),Bytes.toBytes(text[1]));

imsi.add(put);

}

}

table=new HTable(conf,Bytes.toBytes(insertModel.getDataName()+":"+insertModel.getImsiTable()+dataTime));

table.put(imsi);

} catch (IOException e) {

log.error(e,e);

}

}

}

其中InsertModel主要有一下字段。

//数据库名

private String dataName;

//imsi表名

private String imsiTable;

//手机号表名

private String msisdnTable;

//源文件路径

private String url;

//Hbase Ip

private String ip;

//列族

private String familyName;

//列名

private String cloumnName;

//表值存储时间

private Integer time;

//多少行提交一次

private Integer rowsize;

/*表时间*/

private String tableTime;

/*参数日期前一天*/

private String paramTime;

java好用的hbase库_Hbase入库基于java相关推荐

  1. JAVA套料程序_Nest4J是一款基于Java作为开发语言的Nest算法包

    Nest4J Nest4J是一款基于Java作为开发语言的Nest算法包.可以看做一款能在服务端进行运行计算的Nest算法库. 基于SVGNest进行了Java化的改造. 同样这也作为了我本科的毕业设 ...

  2. java设计拟应用的文献综述_基于Java的超市系统设计与实现文献综述论文.docx

    基于Java的超市系统设计与实现文献综述论文 文献综述基于 J ava 的超市系统设计与实现 一.前言部分管 理 信 息 系 统( M IS ) 是 一 个 由 人 . 计 算 机 等 组 成 的 能 ...

  3. 和java通信_[源码和文档分享]基于JAVA的即时通信软件

    一.设计任务书 1.1 设计任务 本文设计的是一个简单的即时通信软件,利用 Java Socket 进行点到点通信,其工作机制模仿即时通信软件的基本功能,已实现的功能有:客户端登录 客户端退出 群组成 ...

  4. java里的进制转换函数_基于Java中进制的转换函数详解

    十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...

  5. java你如何保证事务的完整性_基于Java工作事务提醒系统设计.doc

    基于Java工作事务提醒系统设计 基于Java工作事务提醒系统设计 摘要:为了减少工作遗漏和提高工作效率,在原有的办公信息管理基础上,应用Java编程技术和数据库技术,提出了工作事务提醒系统的设计思路 ...

  6. java 数据校验框架_自己写的基于java Annotation(注解)的数据校验框架

    JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方 ...

  7. java qq开发_Ubuntu用户的福音:基于Java开发的开源QQ客户端iQQ

    iQQ 使用Java语言跨平台开发,基于腾讯WebQQ 3.0网络协议.可以使用于Java所支持的各种平台上运行.作者基于Linux(Ubuntu 12.04)系统,使用IDE NetBeans开发, ...

  8. java找出违法车牌号代码_基于Java的全国交通违章查询示例代码-六派数据

    示例代码 本代码示例是基于Java的六派数据接口进行数据请求API服务请求的代码示例,使用前你需要: 以下是完整代码示例: /** * 主函数 * @param args */ public stat ...

  9. java如何实现qq截屏代码_基于Java的QQ屏幕截图工具的设计

    设计一款基于Java的QQ屏幕截图软件,能实现不联网也能对屏幕截图:截图是由电脑截取显示在屏幕上或其他显示设备上的可视图像,通常截图可以由操作系统或专用截图软件截取,截取的图像会有不同种的文件格式,如 ...

最新文章

  1. 微信小程序开发工具安装、设置
  2. 【Live555】live555源码详解(六):FramedSource、RTPSource、RTPSink
  3. The Innovation | 中科院青促会主办精品英文期刊视频简介,定位IF 20+国际顶刊
  4. 如何构建高并发高可用的剧场直播云端混流服务?
  5. 生产者-消费者模型的两种实现方式
  6. 手机调试_手机充值不好用?因为正在调试期
  7. Redis工作笔记-Jedis的基本使用
  8. python语言翻译成汇编语言_计原 || 1计算机语言发展与计算机层次结构
  9. 人工智能的未来是强化学习_多主体强化学习与AI的未来
  10. 做硬件,到底有没有前途?
  11. C语言程序设计100个经典例子
  12. 信创操作系统--麒麟Kylin桌面版 (项目八 多媒体软件:图像查看、图像处理、音频播放、录音机)
  13. 毕业论文系列-公式编号
  14. SCHMERSAL AZM 161 Z ST1-AS PT西溪,且留下
  15. (构造笔记)GRASP学习心得
  16. win10 应用商店无法联网(0x80072EFD)
  17. 前端基础 HTML
  18. 利普希茨【NOIP2017模拟8.7A组】
  19. STM32产生固定频率和占空比可变的PWM
  20. Mac上面有哪些宝藏的软件

热门文章

  1. 西安邮电大学计算机学院系主任,西安邮电大学计算机学院
  2. OpenCV中图像Mat,二维指针和CxImage类之间的转换
  3. c++关于map的find和count的使用
  4. 设置显示Git的修改历史History快捷键Alt+H,方便多人开发的时候快速查看谁修改了代码
  5. 在CentOS 6.3 64bit上安装ActiveMQ 5.15.9实录
  6. javascript之namespace模式
  7. leetcode-2 两数相加
  8. linux 查看库的安装信息
  9. 如何判断CPU、内存、磁盘的性能瓶颈?
  10. [原创]SparkR针对mysql的数据读写操作实现