[Hbase] Hbase优化之禁用wal以及Hfile应

本文介绍了Hbase的WAL(预写日志)机制及其对性能的影响,以及如何通过禁用WAL并手动刷新数据来优化性能。同时,文章探讨了使用HFile直接导入数据到Hbase的快速方法,强调了HFile在初次导入空表时的速度优势,并提供了通过mapreduce和Spark实现数据加载的步骤。
摘要由CSDN通过智能技术生成

 

1、WAL:write-ahead log 预写日志

灾难恢复,一旦服务器崩溃,通过重放log,即可恢复之前的数据(内存中还没有刷写到磁盘的数据);如果写入wal操作失败,整个操作就认为是失败。
因此,如果开启wal机制,写操作性能会降低;
如果关闭wal机制,数据在内存中未刷写到磁盘时,server突然宕机,产生数据丢失。

解决办法:不开启wal机制,手工刷新memstore的数据落地

//禁用WAL机制
put.setDurability(Durability.SKIP_WAL) 

在数据写操作之后,调用flushTable操作,代替wal机制:

  def flushTable(table:String,conf:Configuration):Unit={
    var connection: Connection = null
    var admin:Admin=null

    connection=ConnectionFactory.createConnection(conf)

    try{
      admin=connection.getAdmin
      //将数据从MemStore刷写到磁盘中
      admin.flush(TableName.valueOf(table))

    }catch{
      case e:Exception=>e.printStackTrace()
    }finally {
      if(null!=admin){
        admin.close()
      }
    }    
  }

2、利用HFile

直接使用Spark将DF/RDD的数据生成HFile文件,数据load到HBase里面。

注意:
<1> HFile在所有的加载方案里面是最快的,不过有一个前提——数据是第一次导入,表是空的,如果表中已经有了数据,HFile再导入到hbase的表中会触发split操作;

<2>输出部分key和value的类型必须是: < ImmutableBytesWritable, KeyValue>或者< ImmutableBytesWritable, Put>

//1.元数据DataFrame
//这里使用mapPartitions方法
val hbaseInfoRDD = logDF.rdd.mapPartitions(partition => {

      partition.f
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值