带有HBase Scan.setBatch的java.lang.NoSuchMethodError

问题描述 投票:0回答:2

我试图使用批量扫描从HBase表中删除行。当我将此代码作为类文件运行时,它运行正常。但是当我将代码作为JAR运行时,它会给我以下异常:

线程“main”中的异常java.lang.NoSuchMethodError:org.apache.hadoop.hbase.client.Scan.setBatch(I)V

这是我的代码:

public class Purge {public static void main(String [] args)抛出IOException,InterruptedException {

      if (args.length != 3 ) {
          System.out.println("Incorrect number of arguments");
          System.out.println("Correct Usage: java Purge <table> <column name> <value>");
          System.out.println("Exiting .....");
          System.exit(0);
      }

      String tablename = args[0];
      String column = args[1];
      String value = args[2];
      Configuration conf = HBaseConfiguration.create();
      Connection connection = ConnectionFactory.createConnection(conf);
      Table table = connection.getTable(TableName.valueOf(tablename));

      List<Delete> deleteList = new ArrayList<Delete>();
      Scan scan = new Scan();
      scan.setBatch(100);

      scan.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes(column));
      Filter filter = new ValueFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,new BinaryComparator(Bytes.toBytes(value)));
      scan.setFilter(filter);
      ResultScanner scanner=table.getScanner(scan);
      for (Result rr : scanner) {
          Delete d=new Delete(rr.getRow());
          deleteList.add(d);
      }
      table.delete(deleteList);
}

}

我在命令行下面使用:

HADOOP_CLASSPATH = hbase mapredcp hadoop jar purge.jar清除“$ table”“$ column”“$ timestamp”

java hbase
2个回答
0
投票

“当我作为班级使用时”是什么意思?无论如何,当一些lib丢失时,通常会出现这种异常:在编译过程中可能看到的lib(因此编译成功),但是在启动编译的jar时却没有,因为环境可能不同。

可能它在从IDE(如eclipse)启动时起作用,因为库是由eclipse类路径管理的,当你将.jar放在编译它的类路径之外时,它不起作用,因为有一些jar丢失了。尝试找到缺少的lib,然后将它们放在类路径中。


© www.soinside.com 2019 - 2024. All rights reserved.