接上篇读HDFS

上面读完了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秒

 

最新文章

  1. yii2更改面包屑的首页链接
  2. Linux高级编程--11.信号
  3. php在apache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL
  4. WCF綁定
  5. A - Robot Bicorn Attack
  6. 第九篇、微信小程序-button组件
  7. 鼠标移动到表格的TD上的时候显示成一个手型的样子怎么做?
  8. 自己挖坑自己跳 之JsonMappingException: (was java.lang.NullPointerException) (through reference chain:)
  9. Eclipse用法和技巧十五:自动添加未实现方法1
  10. android EditText与TextView几个常用的属性
  11. Hadoop序列化与Java序列化
  12. 【Dubbo源码学习】负载均衡算法(1)-随机算法
  13. ios 第4天
  14. Redis笔记(2)单机数据库实现
  15. [转帖] Linux 创建一个简单的私有CA、发证、吊销证书
  16. 神奇的bug,退出时自动更新时间
  17. python内存泄漏,python垃圾手动回收,1
  18. 【Coursera】Seventh Week
  19. 前端打印日志到localStroge并导出
  20. [PHP] 从 PHP 5.3.X 迁移到 PHP 5.6.X不兼容点

热门文章

  1. 8. String to Integer (整数的溢出)
  2. 取得&lt;asp:TextBox中的值:
  3. vcenter或workstation12导入ovf出错:硬件系列vmx 14不受支持
  4. PTA 7-50 畅通工程之局部最小花费问题(最小生成树Kruskal)
  5. [剑指Offer]34-二叉树中和为某一值的路径
  6. delete[] p与 delete p
  7. shell条件控制和循环结构
  8. docker搭建lnmp(一)
  9. 微信小程序填坑之路
  10. c#tcp源端口号和目的端口怎么理解