首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何批量删除hbase中的多行?

如何批量删除hbase中的多行?
EN

Stack Overflow用户
提问于 2015-09-16 00:52:25
回答 2查看 19.9K关注 0票数 25

我在hbase表"mytable“中有以下几行具有这些键的行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user_1
user_2
user_3
...
user_9999999

我想使用Hbase shell删除以下内容中的行:

user_500到user_900

我知道没有办法删除,但是有没有办法我可以用"BulkDeleteProcessor“来删除呢?

我在这里看到:

https://github.com/apache/hbase/blob/master/hbase-examples/src/test/java/org/apache/hadoop/hbase/coprocessor/example/TestBulkDeleteProtocol.java

我只想粘贴导入内容,然后将其粘贴到shell中,但不知道如何操作。有人知道如何在jruby hbase shell中使用这个端点吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   Table ht = TEST_UTIL.getConnection().getTable("my_table");
    long noOfDeletedRows = 0L;
    Batch.Call<BulkDeleteService, BulkDeleteResponse> callable =
      new Batch.Call<BulkDeleteService, BulkDeleteResponse>() {
      ServerRpcController controller = new ServerRpcController();
      BlockingRpcCallback<BulkDeleteResponse> rpcCallback =
        new BlockingRpcCallback<BulkDeleteResponse>();

      public BulkDeleteResponse call(BulkDeleteService service) throws IOException {
        Builder builder = BulkDeleteRequest.newBuilder();
        builder.setScan(ProtobufUtil.toScan(scan));
        builder.setDeleteType(deleteType);
        builder.setRowBatchSize(rowBatchSize);
        if (timeStamp != null) {
          builder.setTimestamp(timeStamp);
        }
        service.delete(controller, builder.build(), rpcCallback);
        return rpcCallback.get();
      }
    };
    Map<byte[], BulkDeleteResponse> result = ht.coprocessorService(BulkDeleteService.class, scan
        .getStartRow(), scan.getStopRow(), callable);
    for (BulkDeleteResponse response : result.values()) {
      noOfDeletedRows += response.getRowsDeleted();
    }
    ht.close();

如果无法通过JRuby、Java或其他方法快速删除多行,则也可以。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-28 09:13:11

你真的想在shell中做这件事吗?因为还有其他更好的方法。一种方法是使用本机java API。

  • 构造一个删除数组列表
  • 将此数组列表传递给Table.delete方法

方法一:如果你已经知道键的范围。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void massDelete(byte[] tableName) throws IOException {
    HTable table=(HTable)hbasePool.getTable(tableName);

    String tablePrefix = "user_";
    int startRange = 500;
    int endRange = 999;

    List<Delete> listOfBatchDelete = new ArrayList<Delete>();

    for(int i=startRange;i<=endRange;i++){
        String key = tablePrefix+i; 
        Delete d=new Delete(Bytes.toBytes(key));
        listOfBatchDelete.add(d);  
    }

    try {
        table.delete(listOfBatchDelete);
    } finally {
        if (hbasePool != null && table != null) {
            hbasePool.putTable(table);
        }
    }
}

方法2:如果要根据扫描结果进行批量删除。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public bulkDelete(final HTable table) throws IOException {
    Scan s=new Scan();
    List<Delete> listOfBatchDelete = new ArrayList<Delete>();
    //add your filters to the scanner
    s.addFilter();
    ResultScanner scanner=table.getScanner(s);
    for (Result rr : scanner) {
        Delete d=new Delete(rr.getRow());
        listOfBatchDelete.add(d);
    }
    try {
        table.delete(listOfBatchDelete);
    } catch (Exception e) {
        LOGGER.log(e);

    }
}

现在来讨论使用CoProcessor的问题。只有一个建议,除非你是HBase专家,否则不要使用CoProcessor。CoProcessors有很多内置的问题,如果你需要,我可以为你提供详细的描述。其次,当您从HBase中删除任何内容时,它永远不会直接从Hbase中删除,而是有一个墓碑标记附加到该记录上,然后在重大压缩期间将其删除,因此不需要使用高度耗尽资源的协处理器。

修改代码以支持批处理操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int batchSize = 50;
int batchCounter=0;
for(int i=startRange;i<=endRange;i++){

String key = tablePrefix+i;
Delete d=new Delete(Bytes.toBytes(key));
listOfBatchDelete.add(d);  
batchCounter++;

if(batchCounter==batchSize){
    try {
        table.delete(listOfBatchDelete);
        listOfBatchDelete.clear();
        batchCounter=0;
    }
}}

创建HBase配置并获取表实例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Configuration hConf = HBaseConfiguration.create(conf);
hConf.set("hbase.zookeeper.quorum", "Zookeeper IP");
hConf.set("hbase.zookeeper.property.clientPort", ZookeeperPort);

HTable hTable = new HTable(hConf, tableName);
票数 17
EN

Stack Overflow用户

发布于 2015-09-28 13:20:24

如果您已经知道要从HBase表中删除的记录的行键,则可以使用以下方法

1.首先使用这些行键创建一个列表对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (int rowKey = 1; rowKey <= 10; rowKey++) {
    deleteList.add(new Delete(Bytes.toBytes(rowKey + "")));
}

2.然后使用HBase连接获取表对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Table table = connection.getTable(TableName.valueOf(tableName));

3.一旦有了表对象,就可以通过传递列表来调用delete()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
table.delete(deleteList);

完整的代码如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Configuration config = HBaseConfiguration.create();
config.addResource(new Path("/etc/hbase/conf/hbase-site.xml"));
config.addResource(new Path("/etc/hadoop/conf/core-site.xml"));

String tableName = "users";

Connection connection = ConnectionFactory.createConnection(config);
Table table = connection.getTable(TableName.valueOf(tableName));

List<Delete> deleteList = new ArrayList<Delete>();

for (int rowKey = 500; rowKey <= 900; rowKey++) {
    deleteList.add(new Delete(Bytes.toBytes("user_" + rowKey)));
}

table.delete(deleteList);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32598003

复制
相关文章
VI中的多行删除与复制
VI中的多行删除与复制 法一: 单行删除,:1(待删除行)d 多行删除 ,:1,10d 法二: 光标所在行,dd 光标所在行以下的N行,Ndd 方法1: 光标放到第6行, 输入:2yy 光标放到第9行, 输入:p 此方法适合复制少量行文本的情况,复制第6行(包括)下面的2行数据,放到第9行下面。 方法2: 命令行模式下输入 6,9 co 12 复制第6行到第9行之间的内容到第12行后面。 方法3: 有时候不想费劲看多少行或复制大量行时,可以使用标签来替代 光标移到起始行,输入ma 光标移到结束行,输入mb
sanmutongzi
2020/03/04
5.9K0
vim中多行注释和多行删除命令「建议收藏」
1.首先在命令模式下,输入“:set nu”显示行号; 2.通过行号确定你要删除的行; 3.命令输入“:32,65d”,回车键,32-65行就被删除了,很快捷吧 如果无意中删除错了,可以使用‘u’键恢复(命令模式下)
全栈程序员站长
2022/07/05
4K0
vim删除多行以及插入多行
在normal模式下输入10a=就可以输入十个=,此方式不止针对字符,对于字符串也是适用的
全栈程序员站长
2022/09/07
2.7K0
Sequelize中批量删除
Sequelize中有批量查询findAll、批量创建bulkCreate,同时可以通过where进行条件筛选进行批量更新,在一次需要进行评论删除的功能实现时,我没有在文档中找到批量删除,原本是打算使用[Op.in]然后传递数组实现,在查询相关文章后发现where中可以直接传递数组。
用户6256742
2022/07/06
2.8K0
Linux运维必备技能:如何在 Vim 中删除多行?
如果你在 Vim 中出错,你可以dw在普通模式下使用删除一个单词。您键入dd它会删除当前行。
网络技术联盟站
2022/04/04
3.8K0
Linux运维必备技能:如何在 Vim 中删除多行?
如何批量删除.svn文件
参考资料:https://www.cnblogs.com/kisf/articles/4760367.html
墨文
2020/02/28
2.5K0
bat批量删除文件后缀_怎么批量删除文件名中的数字
用bat命令批量操作,新建一个.bat文件(就是.txt文件改一下后缀),然后用文本格式打开,键入:
全栈程序员站长
2022/11/09
3.7K0
Java 中如何批量删除 Redis 的数据?超详细,无套路
2、模糊删除,比如:Redis的key前缀为 t*,则会删除库中key 为 t 开头的所有数据。
跟着飞哥学编程
2022/11/30
4K0
Java 中如何批量删除 Redis 的数据?超详细,无套路
使用AppleScript批量删除Mac中的信息
1 mac自带app:“脚本编辑器” 2 原生应用「Accessibility Inspector(需安装 Xcode)」用以定位目标控件的类型,方便在打印的子控件中查找
PHP开发工程师
2022/03/09
1.1K0
Redis如何批量删除指定前缀的key
批量删除指定前缀的Key有两中方法,一种是借助 redis-cli,另一种是通过 SCAN 命令来遍历所有匹配前缀的 key,并使用 DEL 命令逐个删除它们。
孟斯特
2023/10/16
6.8K0
Redis如何批量删除指定前缀的key
如何快速批量删除微信好友?
微信用了这么长时间,好友加了肯定自然不少,加了之后再也没有联系也不需要的好友当然也很多。
1480
2022/04/07
5K0
如何快速批量删除微信好友?
Mybatis的批量增加和批量删除
使用注解的方式实现批量操作 dao层 批量增加 @Insert("<script>" + "insert into tsturole (sid,rid) values " + "<foreach collection='集合' item='roles' separator=','> " + "#{字段},#{字段})" + "</foreach>" + "</script>")
暴躁的程序猿
2022/03/23
1.8K0
【学习】如何快速批量删除Excel单元格中的“换行符”
在Excel单元格中按Alt+Enter就会进行换行,就像在Word中按回车键一样。如果许多单元格中都包含这样的“换行符”,现在要将其全部删除掉,让这些单元格中的内容都变成一行显示,该如何操作呢? 方法一:取消自动换行 在Excel单元格中按快捷键Alt+Enter进行换行时,该单元格就被设置成了“自动换行”,如果要将这些单元格中的“自动换行”效果取消,也就是删除“换行符”,方法如下: 1.Excel 2003操作方法:选择这些需要调整的单元格,鼠标右击,在弹出的快捷菜单中
小莹莹
2018/04/18
19.3K0
mysql 批量删除
CREATE PROCEDURE del_line() BEGIN DECLARE count_line INT; /** 先删除索引提高删除速度*/ ALTER TABLE test_road_1.lebp_logistics_line DROP INDEX index_carrier_id, DROP INDEX index_state, DROP INDEX index_leave_city, DROP INDEX index_leave_city_area, DROP IND
好派笔记
2021/11/02
6.4K0
Hbase常用的Shell命令删除数据、删除表。
1、点击[命令行窗口] 2、按<Enter>键 3、点击[命令行窗口] 4、按<Enter>键 5、点击[命令行窗口] 6、按<Enter>键 7、点击[命令行窗口] 8、按<Enter>键 9、点击[命令行窗口] 10、按<Enter>键 11、点击[命令行窗口] 12、按<Enter>键 13、点击[命令行窗口] 14、按<Enter>键 15、点击[命令行窗口] 16、按<Enter>键 17、点击[命令行窗口] 18、按<En
裴来凡
2022/05/28
4.2K0
Hbase常用的Shell命令删除数据、删除表。
如何使用PowerShell批量删除注册表项
卸载了可牛压缩软件以后,发现右键菜单中仍然有可牛压缩的选项。不用想就知道是注册表中有该软件的残留。
卡尔曼和玻尔兹曼谁曼
2022/09/16
1.9K0
【DB笔试面试484】如何批量删除JOB?
可以采用SQL来生成删除JOB的语句,首先执行以下语句,可以根据情况对结果进行过滤:
AiDBA宝典
2019/09/30
5230
linux 下vim删除多行「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/147826.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/02
3.6K0
如何高效的批量删除亿级大表数据
最新项目一直出现线上问题,定位原因看到是由于表数据过大导致的,现在有个登录表,登录游戏玩家每次登录的信息,久而久之,这几个表的数据量达到了两亿多条。每天都在上报,采集,由于没有定期删除,数据大量累积。大概有一年左右的数据,一个表的数据已经达到亿级别的。这样算下来,一个表的数据至少是几十GB了。因此需要删除过期的数据,暂时保留近三个月的统计数据。
小勇DW3
2019/01/02
4.5K0
如何高效的批量删除亿级大表数据
最新项目一直出现线上问题,定位原因看到是由于表数据过大导致的,现在有个登录表,登录游戏玩家每次登录的信息,久而久之,这几个表的数据量达到了两亿多条。每天都在上报,采集,由于没有定期删除,数据大量累积。大概有一年左右的数据,一个表的数据已经达到亿级别的。这样算下来,一个表的数据至少是几十GB了。因此需要删除过期的数据,暂时保留近三个月的统计数据。
小勇DW3
2019/01/03
1.6K0

相似问题

HBase-删除多行

14

星火批量删除hbase记录

10

在HBase中删除多行的有效方法

31

Hbase中的批量增量

20

如何在Mysql中批量删除表中的多行

119
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文