2017-01-26 17 views
0

Я пытаюсь удалить строки из таблицы HBase с помощью пакетного сканирования. Когда я запускаю этот код как файл класса, он работает нормально. Но когда я запускаю код как JAR, это дает мне ниже исключения:java.lang.NoSuchMethodError с HBase Scan.setBatch

Исключение в потоке «главный» java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.Scan.setBatch (I) V

Вот мой код:

общественного класса Purge { государственной статической силы основных (String [] арг) бросает 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 баночка purge.jar Purge «$ стол» «$» столбец «$» временную метку

ответ

0

Что значит «когда я использую как класс»? В любом случае это исключение обычно возникает, когда отсутствует какая-либо lib: lib, которая, вероятно, была видна во время компиляции (поэтому компиляция прошла успешно), но не при запуске скомпилированной банки, потому что среда, вероятно, отличается.

Возможно, он работает при запуске из среды IDE (например, затмения), поскольку библиотеки управляются с помощью пути к классу eclipse, когда вы помещаете .jar из класса pathpath, где он был скомпилирован, это не работает, потому что есть некоторая баночка отсутствует. Попробуйте найти недостающую библиотеку, а затем поместите ее в путь к классам.

+0

Извините за путаницу. Я хотел сказать, что когда я запускаю его так, он работает нормально - java Purge «$ table» «$ column» «$ timestamp». Но когда я бегу как банку, это дает мне ошибку. –

 Смежные вопросы

  • Нет связанных вопросов^_^