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 ...
随机推荐
- 【转】自动化测试框架: pytest&allure ,提高自动化健壮性和稳定性
序 在之前,我写过一个系列“从零开始搭建一个简单的ui自动化测试框架(pytest+selenium+allure)”,在这个系列里,主要介绍了如何从零开始去搭建一个可用的自动化工程框架,但是还缺乏了 ...
- ios应用内嵌h5页面数据自动变色识别为手机号码的解决方法——手机号码拨号禁用IOS手机页面数字自动识别为手机号
异常如下: ios应用内嵌h5页面,本来是设置了白色的数字,两三秒之后会自动变为黑色,然后点击的时候就会弹出是否拨号的提示: 解决方法: 添加如下meta标签,即可解决: <meta name= ...
- nodejs异步读数据库
以下代码不完美,但讲明了使用方法. 回调: function selectUser(callback) { var sql = "SELECT * FROM user"; conn ...
- crm作业知识点集合[一]
知识点1 1.当我们通过model建立一对多或者多对多的关系的时候,默认情况下,会关联所有的字段,如果我们使用djanog的forms的话,可以加一个属性,限制我这个字段只关联哪些字段,就是用下面的写 ...
- ABAP空格和零的问题
空格 concatenate wa_detail-zz_mark1 '' '' '' wa_detail-kdmat1 into wa_detail-zz_mark1 separated by spa ...
- List<Map<String, String>>和Map<String, List<String>>遍历
public void TestM() { List<Map<String, String>> lm = new ArrayList<>(); Ma ...
- Android的事件分发机制
public boolean dispatchTouchEvent(MotionEvent event) 通过方法名我们不难猜测,它就是事件分发的重要方法.那么很明显,如果一个MotionEvent传 ...
- JDBC的学习
JDBC —— 用Java访问数据库 一.需要用到第三方类:mysql-connector-java-5.0.8-bin.jar,并做好导包处理: 二.初始化驱动: 三.建立与数据库的链接: 四.创建 ...
- Ubuntu 16.04 更换阿里源
vim /etc/apt/source.list deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by s ...
- 移动端IOS和androi及浏览器js判断[转载]
转载自:http://www.niutifa.com/?p=561 移动端IOS和androi及浏览器js判断: <script type="text/javascript" ...