java.lang.NoSuchMethodError 与 HBase Scan.setBatch
java.lang.NoSuchMethodError with HBase Scan.setBatch
我正在尝试使用批量扫描从 HBase table 中删除行。当我 运行 将此代码作为 class 文件时,运行 没问题。但是当我 运行 将代码作为 JAR 时,它给了我以下异常:
线程异常 "main" java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.Scan.setBatch(I)V
这是我的代码:
public class 清除 {
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"
"when I use as class" 是什么意思?
无论如何,这个异常通常在某些库丢失时出现:在编译期间可能可见的库(因此编译成功),但在启动编译的 jar 时不可见,因为环境可能不同。
可能,它在从 IDE(如 eclipse)启动时工作,因为库由 eclipse 类路径管理,当您将 .jar 放在编译它的类路径之外时,它不会工作,因为缺少一些罐子。
尝试找到缺少的库,然后将它们放入类路径中。
您应该尝试使用 ScanBuilder 设置扫描属性 API:
我正在尝试使用批量扫描从 HBase table 中删除行。当我 运行 将此代码作为 class 文件时,运行 没问题。但是当我 运行 将代码作为 JAR 时,它给了我以下异常:
线程异常 "main" java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.Scan.setBatch(I)V
这是我的代码:
public class 清除 { 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"
"when I use as class" 是什么意思? 无论如何,这个异常通常在某些库丢失时出现:在编译期间可能可见的库(因此编译成功),但在启动编译的 jar 时不可见,因为环境可能不同。
可能,它在从 IDE(如 eclipse)启动时工作,因为库由 eclipse 类路径管理,当您将 .jar 放在编译它的类路径之外时,它不会工作,因为缺少一些罐子。 尝试找到缺少的库,然后将它们放入类路径中。
您应该尝试使用 ScanBuilder 设置扫描属性 API: