2017-01-26 6 views
0

バッチスキャンを使用してHBaseテーブルから行を削除しようとしています。このコードをクラスファイルとして実行しているとき、うまく動作しています。しかし、コードをJARとして実行すると、以下の例外が発生します。java.lang.NoSuchMethodError with HBase Scan.setBatch

スレッド "main"の例外java.lang.NoSuchMethodError:org.apache.hadoop.hbase.client.Scan.setBatch(I)V

パブリッククラスパージ{ パブリック静的無効メイン(文字列[] args){

 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); 
} 

}

にIOException、例外:InterruptedExceptionをスロー:ここ

は私のコードであります

私は、コマンドラインの下に使用しています:

HADOOP_CLASSPATH = hbase mapredcpのHadoopジャーpurge.jarパージ「$表」「$列」「$タイムスタンプ」

答えて

0

「私はクラスとして使用するとき、」それはどういう意味ですか? とにかく、この例外は通常、いくつかのlibが見つからないときに起こります。libはおそらくコンパイル時に表示されます(コンパイルが成功するように)。コンパイルされたjarを起動するときは表示されません。

おそらく、EclipseがEclipseのクラスパスによって管理されているため、IDEから起動したときに動作します。コンパイルされたクラスパスの外に.jarを置いたときにライブラリが管理されるため、行方不明 見つからないlibを見つけて、クラスパスに配置してみてください。

+0

申し訳ありません。私が言いたいことは、私がこのように走っているとき、それはうまくいきます - java Purge "$ table" "$ column" "$ timestamp"。しかし、私が瓶のように走っているとき、それは私に誤りを与えている。 –

関連する問題