关于删除hbase表内容

hbase这个功能很是郁闷,使用它给定的API删除某个表的一些内容

public class testDelete extends TestCase {
	public static void main(String[] args){
		testDelete test = new testDelete();
		try {
			test.delete();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void delete() throws Exception {
ResultScanner rs = this.QueryMailByCaseNum("1303002");
		if (rs != null) {
			DeleteData delete = new DeleteData();
			delete.delete("mail_tab", rs);
		}

	}
public ResultScanner QueryMailByCaseNum(String casenum) throws Exception {
		 Query _query = new Query();
		// logger.info("query emails:"+casenum);
		List<EMail> list = new ArrayList<EMail>();
		ResultScanner rs = null;

		List<Filter> filters = new ArrayList<Filter>();
		filters.add(new PrefixFilter(Bytes.toBytes(casenum)));
		Filter filter = new FilterList(FilterList.Operator.MUST_PASS_ALL,
				filters);
		// 设置返回列
		List<String> familys = new ArrayList<String>();
		familys.add("property");
		rs = _query.getByFilter("mail_tab", filter, familys);
		if (rs == null) {
			return null;
}
		return rs;
/**
	 * 按表和结果删除记录
	 * @param tablename
	 * @param scanner
	 * @return
	 * @throws Exception
	 */
	public boolean delete(String tablename,ResultScanner scanner) throws Exception
	{
		boolean r = true;
		HTable table = new HTable(HBaseConnection.connection,tablename);
		Iterator<Result> it = scanner.iterator();
		try
		{
		    while (it.hasNext()) {
		      Result result = it.next();
		      Delete delete = new Delete(result.getRow());
		      table.delete(delete);
		      table.flushCommits();
		    }
		}
		catch(Exception ex)
		{
			r = false;
			_error = ex.getMessage();
		}
		finally
		{
			table.close();
		}
		
	    return r;
	} 	}

 执行了,也成功了,可是,在查看hbase下的.META.表时,却发现有一个新的historian 文件,里面有记录着被删除的一些数据信息,而查看HDFS上的数据,也发现这些数据没有删除。但是在使用hbase查询该rowkey时,却查询不到。通过查看API,原来,delete操作只是删除了hbase对这些数据的记录,并没有删除在hdfs上的文件。对于如何彻底删除,我正在研究,也请大家有什么资料可以给我分享一下,不胜感激.

问题解决了,

hbase的删除操作是不会立即删除实际数据的,而是在compaction发生的时候才会实际删除数据,在执行get或scan操作的时候,hbase实际上是将数据取出后看是否该row存在删除操作,合并了这些操作后,被你删除的数据,在HDFS上虽然还存在,但实际上你是无法get到的。在compaction之后,这些数据将会彻底消失。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值