Java往hbase写数据
2024-08-25 04:47:45
上面读完了HDFS,当然还有写了。
先上代码:
WriteHBase
public class WriteHBase { public static void writeHbase(String content){
// HDFS 数据是一行一条记录
String[] lines = content.split("\n");
int userSize = 0;
List<Put> puts = new ArrayList<Put>();
Put put;
for(String line : lines){
//只有两列,以#号分割,一列rowkey,一列value,一个value是很多列数据拼接起来的。
if(line.contains("#")){
String[] arr = line.split("#");
// 添加一行,
put = new Put(Bytes.toBytes(arr[0]));
// 给行添加列 cf column value
put.add(Bytes.toBytes(Constant.CF), Bytes.toBytes(Constant.COLUMN), Bytes.toBytes(arr[1]));
puts.add(put);
}else{
continue;
}
lines[userSize] = null;
++userSize;
// write when list have 1000 没1000 条提交一次,已经改的 5000
if (userSize % Constant.BATCH ==0){
writeDate(userSize, puts);
}
}
writeDate(userSize, puts);
HDFSReadLog.writeLog("analysis " +userSize +" users");
} private static void writeDate(int userSize, List<Put> puts) {
try {
table.put(puts);
HDFSReadLog.writeLog("write "+userSize + " item.");
} catch (IOException e) {
e.printStackTrace();
HDFSReadLog.writeLog("write "+userSize + " error.");
HDFSReadLog.writeLog(e.getMessage());
}
} static HTable table = null;
// static HTablePool pool = null;
static{
try {
// 创建HTable对象,对应hbase 的table
table = new HTable(HBaseConf.getConf(),Constant.HBASE_TABLE);
// 如果表不存在就创建一个
fitTable(Constant.HBASE_TABLE);
} catch (IOException e) {
e.printStackTrace();
HDFSReadLog.writeLog("create table error.");
HDFSReadLog.writeLog(e.getMessage());
}
} /**
* if table is not exists, create it
* @param tab
* @throws IOException
*/
private static void fitTable(String tab) throws IOException { HBaseAdmin admin = new HBaseAdmin(HBaseConf.getConf());
if (admin.tableExists(tab)) {
HDFSReadLog.writeLog(tab + " exists");
} else {
HTableDescriptor tableDesc = new HTableDescriptor(tab);
// 建表的使用要指定 column family
tableDesc.addFamily(new HColumnDescriptor("cf"));
admin.createTable(tableDesc);
HDFSReadLog.writeLog(tab + " create success");
} } }
HBaseConfig(z这个必须,不然会卡在table.put 上面,没有报错,就是卡)
public class HBaseConf { public static Configuration conf = null;
public static Configuration getConf(){
if (conf == null){
conf = new Configuration();
String path = Constant.getSysEnv("HBASE_HOME") +"/conf/";
HDFSReadLog.writeLog("Get HBase home : " + path); // hbase conf
conf.setClassLoader(HBaseConf.class.getClassLoader());
conf.addResource(path + "hbase-default.xml");
conf.addResource(path + "hbase-site.xml");
conf = HBaseConfiguration.create(conf);
HDFSReadLog.writeLog("hbase.zookeeper.quorum : " + conf.get("hbase.zookeeper.quorum"));
}
// 如果配置文件读不到,set这两个参数,也可以读
/*conf.set("hbase.zookeeper.quorum", "ip,ip,ip");
conf.set("hbase.zookeeper.property.clientPort", "port");*/
return conf;
} }
注: hbase的配置文件很重要,如果读不到 “hbase.zookeeper.quorum” 会默认到 localhost,然后在table.put 的时候,卡住。
table.put(),不止可以put 一个Put,也可以put 一个Put的list,这样算是到底批量提交了。
一个一个写,太慢了。这边的结果:334403 条数据,写了112秒
最新文章
- yii2更改面包屑的首页链接
- Linux高级编程--11.信号
- php在apache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL
- WCF綁定
- A - Robot Bicorn Attack
- 第九篇、微信小程序-button组件
- 鼠标移动到表格的TD上的时候显示成一个手型的样子怎么做?
- 自己挖坑自己跳 之JsonMappingException: (was java.lang.NullPointerException) (through reference chain:)
- Eclipse用法和技巧十五:自动添加未实现方法1
- android EditText与TextView几个常用的属性
- Hadoop序列化与Java序列化
- 【Dubbo源码学习】负载均衡算法(1)-随机算法
- ios 第4天
- Redis笔记(2)单机数据库实现
- [转帖] Linux 创建一个简单的私有CA、发证、吊销证书
- 神奇的bug,退出时自动更新时间
- python内存泄漏,python垃圾手动回收,1
- 【Coursera】Seventh Week
- 前端打印日志到localStroge并导出
- [PHP] 从 PHP 5.3.X 迁移到 PHP 5.6.X不兼容点
热门文章
- 8. String to Integer (整数的溢出)
- 取得<;asp:TextBox中的值:
- vcenter或workstation12导入ovf出错:硬件系列vmx 14不受支持
- PTA 7-50 畅通工程之局部最小花费问题(最小生成树Kruskal)
- [剑指Offer]34-二叉树中和为某一值的路径
- delete[] p与 delete p
- shell条件控制和循环结构
- docker搭建lnmp(一)
- 微信小程序填坑之路
- c#tcp源端口号和目的端口怎么理解