Java往hbase写数据
上面读完了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秒
Java往hbase写数据的更多相关文章
- Hbase写数据,存数据,读数据的详细过程
Client写入 -> 存入MemStore,一直到MemStore满 -> Flush成一个StoreFile,直至增长到一定阈值 -> 出发Compact合并操作 -> 多 ...
- HBase写数据
1 多HTable并发写 创建多个HTable客户端用于写操作,提高写数据的吞吐量,一个例子: static final Configuration conf = HBaseConfiguration ...
- java向文件写数据的3种方式
下边列举出了三种向文件中写入数据的方式,当然还有其他方式,帮助自己理解文件写入类的继承关系.类的关系: file->fileoutputstream->outputstreamWriter ...
- 线上问题排查-HBase写数据出现NotServingRegionException(Region ... is not online)异常
今天线上遇到一个问题:有一台服务器的cpu持续冲高,排查发现是我们的一个java应用进程造成的,该进程在向hbase中写入数据时,日志不断地打印下面的异常: org.apache.hadoop.hba ...
- 在Windows下MyEclipse运行JAVA程序连接HBASE读取数据出错
运行环境:Hadoop-2.5.0+Hbase-0.98.6 问题描述: 15/06/11 15:35:50 ERROR Shell: Failed to locate the winutils bi ...
- java向excel写数据
package pymongo1; import java.io.File;import java.io.IOException;import java.io.OutputStream; import ...
- HBase读写数据的详细流程及ROOT表/META表介绍
一.HBase读数据流程 1.Client访问Zookeeper,从ZK获取-ROOT-表的位置信息,通过访问-ROOT-表获取.META.表的位置,然后确定数据所在的HRegion位置: 2.Cli ...
- 【hbase】——HBase 写优化之 BulkLoad 实现数据快速入库
1.为何要 BulkLoad 导入?传统的 HTableOutputFormat 写 HBase 有什么问题? 我们先看下 HBase 的写流程: 通常 MapReduce 在写HBase时使用的是 ...
- 【原创】大叔问题定位分享(16)spark写数据到hive外部表报错ClassCastException: org.apache.hadoop.hive.hbase.HiveHBaseTableOutputFormat cannot be cast to org.apache.hadoop.hive.ql.io.HiveOutputFormat
spark 2.1.1 spark在写数据到hive外部表(底层数据在hbase中)时会报错 Caused by: java.lang.ClassCastException: org.apache.h ...
随机推荐
- CentOS 几种重启方式的区别
Linux centos重启命令: 1.reboot 普通重启 2.shutdown -r now 立刻重启(root用户使用) 3.shutdown -r 10 过10分钟自动重启(root用户 ...
- CentOS 下搭建SVN
CentOS 7下搭建配置SVN服务器 1. 安装 CentOS通过yum安装subversion. $ sudo yum install subversion subversion安装在/bin目录 ...
- unary
unary - 必应词典 adj.[数]单元的 网络一元:一元的:一元码 例句Returns a value generated by rolling up the values of the c ...
- SOA与微服务的区别
乍一看: 1.SOA更抽象. 2. SOA是拆分服务后,用ECS等手段,将服务组合调度. 微服务则是拆分服务后组合成各种业务. https://blog.csdn.net/HeatDeath/arti ...
- JAVA EXAM3 复习提纲
[Practice11_Zipcode_ArrayList] Zipcode class: //3 variables: zipcode, city, county, and compare by c ...
- linux命令学习之:tar
tar命令可以为linux的文件和目录创建档案.利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar最初被用来在磁带上创建档案,现在,用户可以在 ...
- 使用PHP来简单的创建一个RPC服务
RPC全称为Remote Procedure Call,翻译过来为"远程过程调用".主要应用于不同的系统之间的远程通信和相互调用. 比如有两个系统,一个是PHP写的,一个是JAVA ...
- 【gRPC使用问题2】按照问题1操作生成出来的代码,import的proto内定义的message未生成出来
1.问题 其实元数据proto里是有定义message,但是 这个message的定义是在另一个 proto文件内,被 api.proto导入,事实上 我是对 api.proto 进行命令行生成代码的 ...
- 百度 echarts
插件地址:http://echarts.baidu.com/index.html ECharts 特性 特性 丰富的可视化类型 多种数据格式无需转换直接使用 千万数据的前端展现 移动端优化 多渲染方案 ...
- MongoDb进阶实践之八 MongoDB的聚合初探
一.引言 好久没有写东西了,MongoDB系列的文章也丢下好长时间了.今天终于有时间了,就写了一篇有关聚合的文章.一说到“聚合”,用过关系型数据库的人都应该知道它是一个什么东西.关系型数据库有“聚合” ...