首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

关于剔除hbase表内容

2012-12-25 
关于删除hbase表内容hbase这个功能很是郁闷,使用它给定的API删除某个表的一些内容public class testDelete

关于删除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 blocke.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之后,这些数据将会彻底消失。

?

1 楼 bbym010 2011-10-20   学习了,有两个问题请教:1)请问没有真正删除之前,查询的时候,怎么保证查不到;2)你说的时间,在哪地方可以设置,到了这个时间,又是怎么做到删除的。请赐教,多谢 2 楼 edmundjx 2011-12-30   请问你那个Query query = new Query();是什么呢

热点排行