业务需要,经常需要将hbase中多个表中的记录数删掉,于是写了一个小工具。直接上代码啦:
DeleteHbaseDataMain.java
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import com.gamewave.datalinker.util.HbaseTableNameUtil;
public class DeleteHbaseDataMain {
/**
* @param args
* @throws ExecutionException
* @throws InterruptedException
* @throws IOException
*/
public static void main(String[] args) throws InterruptedException,
ExecutionException, IOException {
if (args.length < 2) {
System.err.println("ERROR: Wrong number of parameters: "
+ args.length);
System.err
.println("Usage args: <date such as '20120101'> <gameID such as '38'> <all | tableName>");
System.exit(-1);
}
// args = new String[3];
// args[0] = "20121228-59-8-0";
// args[1] = "49";
// args[2] = "online_49";
// 包含的数据表
if ("all".equals(args[2])) {//删除所有表
String[] tableNames = HbaseTableNameUtil.getGameTableName(args[1]);
int poolSize = tableNames.length;
ExecutorService threadPool = Executors.newFixedThreadPool(poolSize);
CompletionService<String> poolService = new ExecutorCompletionService<String>(
threadPool);
CreateMultiThreadDelete threadInstance;
int leng = 0;
for (int i = 0; i < tableNames.length; i++) {
String tableName = tableNames[i];
threadInstance = new CreateMultiThreadDelete(tableName,
args[0], args[1]);
poolService.submit(threadInstance);
leng++;
}
// 等待所有作业执行完成
for (int i = 0; i < leng; i++) {
poolService.take().get();
}
} else {//删除单个表
int poolSize = 1;
ExecutorService threadPool = Executors.newFixedThread