Hbase Shell-对扫描结果调用hbase命令 [英] Hbase shell - call hbase command on scan results

查看:163
本文介绍了Hbase Shell-对扫描结果调用hbase命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这里遇到了一个小问题: -我可以使用外壳中的过滤器扫描表格 -我可以使用hbase shell删除一行 但是我找不到扫描表,迭代结果并删除它们的方法.甚至有可能在hbase shell中命令"命令,还是我必须做一个ruby脚本(注意:我不知道该怎么做)

I ran into a small issue here : - I can scan a table using filters from the shell - I can delete a row using hbase shell But I can't find a way to scan a table, iterate on the results and delete them. Is it even possible to 'pipe' commands in hbase shell or do I have to do a ruby script (note: I don't know how to do that)

我想做什么:

扫描'mytable',{列=> ['c:1],FILTER =>"SingleColumnValueFilter('c','1',=,'binary:-1',true,true)"}} |删除"mytable",$ result_i,"c:1"

scan 'mytable', {COLUMNS => ['c:1],FILTER => "SingleColumnValueFilter('c', '1', =, 'binary:-1', true, true)"} | delete 'mytable', $result_i, 'c:1'

谢谢

推荐答案

好,知道了,我在此处发布了rb脚本

ok, I got it, I post the rb script here

require 'java'
require 'net/http'

import java.io.IOException

import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.HConstants
import org.apache.hadoop.hbase.MasterNotRunningException
import org.apache.hadoop.hbase.client.HBaseAdmin
import org.apache.hadoop.hbase.client.HTable
import org.apache.hadoop.hbase.client.Scan
import org.apache.hadoop.hbase.client.Delete
import org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.util.Writables
import org.apache.hadoop.hbase.HTableDescriptor
import org.apache.hadoop.hbase.HColumnDescriptor

log_level = org.apache.log4j.Level::ERROR
org.apache.log4j.Logger.getLogger("org.apache.zookeeper").setLevel(log_level)
org.apache.log4j.Logger.getLogger("org.apache.hadoop.hbase").setLevel(log_level)

config = HBaseConfiguration.create
config.set 'fs.default.name', config.get(HConstants::HBASE_DIR)

TAB = 'mytable'.to_java_bytes
FAM = 'c'.to_java_bytes
ID = '1'.to_java_bytes

scan = Scan.new()

scan.cache_blocks = false
scan.caching = 10
scan.addColumn FAM, ID


filter = SingleColumnValueFilter.new(FAM, ID, CompareFilter::CompareOp.valueOf('EQUAL'), '-1'.to_java_bytes)
filter.setFilterIfMissing(true)

scan.setFilter(filter)


iter = nil 
table = nil
scanner = nil
while true
  begin
    table = HTable.new config, TAB
    scanner = table.getScanner(scan)    
    iter = scanner.iterator
    break
  rescue IOException => ioe
    print "Exception trying to scan #{TAB}: #{ioe}"
    sleep 1
  end
end

start = Time.at(java.util.Date.new.getTime/1000)
print "Start Time : " + start.inspect

while iter.hasNext
  result = iter.next
  delete = Delete.new result.getRow()
  delete.deleteColumn(FAM, ID)
  table.delete delete

end

scanner.close


ending = Time.at(java.util.Date.new.getTime/1000)
print "Start Time : " + ending.inspect

这篇关于Hbase Shell-对扫描结果调用hbase命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆