java好用的hbase库_Hbase入库基于java
计划每周写一篇博客,督促自己快点学习,懒惰会让人上瘾,努力奋斗,不忘初心。
某天,忽然来任务,要做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相关推荐
- JAVA套料程序_Nest4J是一款基于Java作为开发语言的Nest算法包
Nest4J Nest4J是一款基于Java作为开发语言的Nest算法包.可以看做一款能在服务端进行运行计算的Nest算法库. 基于SVGNest进行了Java化的改造. 同样这也作为了我本科的毕业设 ...
- java设计拟应用的文献综述_基于Java的超市系统设计与实现文献综述论文.docx
基于Java的超市系统设计与实现文献综述论文 文献综述基于 J ava 的超市系统设计与实现 一.前言部分管 理 信 息 系 统( M IS ) 是 一 个 由 人 . 计 算 机 等 组 成 的 能 ...
- 和java通信_[源码和文档分享]基于JAVA的即时通信软件
一.设计任务书 1.1 设计任务 本文设计的是一个简单的即时通信软件,利用 Java Socket 进行点到点通信,其工作机制模仿即时通信软件的基本功能,已实现的功能有:客户端登录 客户端退出 群组成 ...
- java里的进制转换函数_基于Java中进制的转换函数详解
十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...
- java你如何保证事务的完整性_基于Java工作事务提醒系统设计.doc
基于Java工作事务提醒系统设计 基于Java工作事务提醒系统设计 摘要:为了减少工作遗漏和提高工作效率,在原有的办公信息管理基础上,应用Java编程技术和数据库技术,提出了工作事务提醒系统的设计思路 ...
- java 数据校验框架_自己写的基于java Annotation(注解)的数据校验框架
JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方 ...
- java qq开发_Ubuntu用户的福音:基于Java开发的开源QQ客户端iQQ
iQQ 使用Java语言跨平台开发,基于腾讯WebQQ 3.0网络协议.可以使用于Java所支持的各种平台上运行.作者基于Linux(Ubuntu 12.04)系统,使用IDE NetBeans开发, ...
- java找出违法车牌号代码_基于Java的全国交通违章查询示例代码-六派数据
示例代码 本代码示例是基于Java的六派数据接口进行数据请求API服务请求的代码示例,使用前你需要: 以下是完整代码示例: /** * 主函数 * @param args */ public stat ...
- java如何实现qq截屏代码_基于Java的QQ屏幕截图工具的设计
设计一款基于Java的QQ屏幕截图软件,能实现不联网也能对屏幕截图:截图是由电脑截取显示在屏幕上或其他显示设备上的可视图像,通常截图可以由操作系统或专用截图软件截取,截取的图像会有不同种的文件格式,如 ...
最新文章
- 微信小程序开发工具安装、设置
- 【Live555】live555源码详解(六):FramedSource、RTPSource、RTPSink
- The Innovation | 中科院青促会主办精品英文期刊视频简介,定位IF 20+国际顶刊
- 如何构建高并发高可用的剧场直播云端混流服务?
- 生产者-消费者模型的两种实现方式
- 手机调试_手机充值不好用?因为正在调试期
- Redis工作笔记-Jedis的基本使用
- python语言翻译成汇编语言_计原 || 1计算机语言发展与计算机层次结构
- 人工智能的未来是强化学习_多主体强化学习与AI的未来
- 做硬件,到底有没有前途?
- C语言程序设计100个经典例子
- 信创操作系统--麒麟Kylin桌面版 (项目八 多媒体软件:图像查看、图像处理、音频播放、录音机)
- 毕业论文系列-公式编号
- SCHMERSAL AZM 161 Z ST1-AS PT西溪,且留下
- (构造笔记)GRASP学习心得
- win10 应用商店无法联网(0x80072EFD)
- 前端基础 HTML
- 利普希茨【NOIP2017模拟8.7A组】
- STM32产生固定频率和占空比可变的PWM
- Mac上面有哪些宝藏的软件
热门文章
- 西安邮电大学计算机学院系主任,西安邮电大学计算机学院
- OpenCV中图像Mat,二维指针和CxImage类之间的转换
- c++关于map的find和count的使用
- 设置显示Git的修改历史History快捷键Alt+H,方便多人开发的时候快速查看谁修改了代码
- 在CentOS 6.3 64bit上安装ActiveMQ 5.15.9实录
- javascript之namespace模式
- leetcode-2 两数相加
- linux 查看库的安装信息
- 如何判断CPU、内存、磁盘的性能瓶颈?
- [原创]SparkR针对mysql的数据读写操作实现