Lemon丶緑茶罒 Lemon丶緑茶罒
关注数: 59 粉丝数: 67 发帖数: 1,899 关注贴吧数: 39
11111111 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import java.io.IOException; import java.util.Scanner; public class hbase { public static Configuration configuration; public static Connection connection; public static Admin admin; // 主函数中的语句请逐句执行,只需删除其前的//即可,如:执行insertRow时请将其他语句注释 public static void main(String[] args) throws IOException { // 创建一个表,表名为Score,列族为sname,course init(); createTable("Order", new String[] { "items_info", "user_info", "create_time" }); // 在Order表中插入一条数据,其行键为001 insertRow("Order", "001", "items_info", "item_id", "439201"); insertRow("Order", "001", "items_info", "cat_id", "16"); insertRow("Order", "001", "items_info", "terms", "5263,2541,2876263"); insertRow("Order", "001", "items_info", "img_data", ""); insertRow("Order", "001", "user_info", "age", "25"); insertRow("Order", "001", "user_info", "user_id", "lin"); insertRow("Order", "001", "user_info", "Sex", "F"); insertRow("Order", "001", "create_time", "", "20140911"); // 在Order表中插入一条数据,其行键为002 insertRow("Order", "002", "items_info", "item_id", "572468"); insertRow("Order", "002", "items_info", "cat_id", "25"); insertRow("Order", "002", "items_info", "terms", "5863,2551,2876523"); insertRow("Order", "002", "items_info", "img_data", ""); insertRow("Order", "002", "user_info", "age", "43"); insertRow("Order", "002", "user_info", "user_id", "zhang"); insertRow("Order", "002", "user_info", "Sex", "m"); insertRow("Order", "002", "create_time", "", "20141225"); // 在Order表中插入一条数据,其行键为003 insertRow("Order", "003", "items_info", "item_id", "525738"); insertRow("Order", "003", "items_info", "cat_id", "10"); insertRow("Order", "003", "items_info", "terms", "5863,2551,285343"); insertRow("Order", "003", "items_info", "img_data", ""); insertRow("Order", "003", "user_info", "age", "30"); insertRow("Order", "003", "user_info", "user_id", "jian"); insertRow("Order", "003", "user_info", "Sex", "f"); insertRow("Order", "003", "create_time", "", "20150125"); // getData("Order", "001", "items_info", "item_id"); // while (true) { System.out.println("请输入要进行的操作,1:插入数据,2:查询数据, 3.删除数据"); Scanner scanner = new Scanner(System.in); int num = scanner.nextInt(); // if (num == 1) { System.out .println("请输入要插入的数据:tableName,rowKey,colFamily,col(如果其列族下没有子列,此参数可为空),val..每输入一个参数用回车隔开"); String[] ss = new String[5]; int i = 0; while (i < 5) { String aa = scanner.next(); ss[i] = aa; i++; } insertRow(ss[0], ss[1], ss[2], ss[3], ss[4]); System.out.println("添加成功!"); } if (num == 2) { System.out .println("请输入要查询的数据:tableName,rowKey,colFamily,col(如果其列族下没有子列,此参数可为空)..每输入一个参数用回车隔开"); String[] gg = new String[4]; int j = 0; while (j < 4) { String aa = scanner.next(); gg[j] = aa; j++; } getData(gg[0], gg[1], gg[2], gg[3]); } if (num == 3) { System.out .println("请输入要删除的数据:tableName,rowKey,colFamily,col(如果其列族下没有子列,此参数可为空)..每输入一个参数用回车隔开"); String[] gg = new String[4]; int k= 0; while (k< 4) { String aa = scanner.next(); gg[k] = aa; k++; } deleteRow(gg[0], gg[1], gg[2], gg[3]); System.out.println("删除成功!"); } close(); } // 在Score表中插入一条数据,其行键为95001,course:Math为88(course为列族,Math为course下的子列) // 等价命令:put 'Score','95001','score:Math','88' // insertRow("Score", "95001", "course", "Math", "88"); // 在Score表中插入一条数据,其行键为95001,course:English为85(course为列族,English为course下的子列) // 等价命令:put 'Score','95001','score:English','85' // insertRow("Score", "95001", "course", "English", "85"); // 1、删除Score表中指定列数据,其行键为95001,列族为course,列为Math // 执行这句代码前请deleteRow方法的定义中,将删除指定列数据的代码取消注释注释,将删除制定列族的代码注释 // 等价命令:delete 'Score','95001','score:Math' // deleteRow("Score", "95001", "course", "Math"); // 2、删除Score表中指定列族数据,其行键为95001,列族为course(95001的Math和English的值都会被删除) // 执行这句代码前请deleteRow方法的定义中,将删除指定列数据的代码注释,将删除制定列族的代码取消注释 // 等价命令:delete 'Score','95001','score' // deleteRow("Score", "95001", "course", ""); // 3、删除Score表中指定行数据,其行键为95001 // 执行这句代码前请deleteRow方法的定义中,将删除指定列数据的代码注释,以及将删除制定列族的代码注释 // 等价命令:deleteall 'Score','95001' // deleteRow("Score", "95001", "", ""); // 查询Score表中,行键为95001,列族为course,列为Math的值 // 查询Score表中,行键为95001,列族为sname的值(因为sname列族下没有子列所以第四个参数为空) // getData("Score", "95001", "sname", ""); // 删除Score表 // deleteTable("Score"); // 建立连接 public static void init() { configuration = HBaseConfiguration.create(); configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase"); try { connection = ConnectionFactory.createConnection(configuration); admin = connection.getAdmin(); } catch (IOException e) { e.printStackTrace(); } } // 关闭连接 public static void close() { try { if (admin != null) { admin.close(); } if (null != connection) { connection.close(); } } catch (IOException e) { e.printStackTrace(); } } /** * 建表。HBase的表中会有一个系统默认的属性作为主键,主键无需自行创建,默认为put命令操作中表名后第一个数据,因此此处无需创建id列 * * @param myTableName * 表名 * @param colFamily * 列族名 * @throws IOException */ public static void createTable(String myTableName, String[] colFamily) throws IOException { init(); TableName tableName = TableName.valueOf(myTableName); if (admin.tableExists(tableName)) { System.out.println("table is exists!"); } else { HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName); for (String str : colFamily) { HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(str); hTableDescriptor.addFamily(hColumnDescriptor); } admin.createTable(hTableDescriptor); System.out.println("create table success"); } close(); } /** * 删除指定表 * * @param tableName * 表名 * @throws IOException */ public static void deleteTable(String tableName) throws IOException { init(); TableName tn = TableName.valueOf(tableName); if (admin.tableExists(tn)) { admin.disableTable(tn); admin.deleteTable(tn); } close(); } /** * 查看已有表 * * @throws IOException */ public static void listTables() throws IOException { init(); HTableDescriptor hTableDescriptors[] = admin.listTables(); for (HTableDescriptor hTableDescriptor : hTableDescriptors) { System.out.println(hTableDescriptor.getNameAsString()); } close(); } /** * 向某一行的某一列插入数据 * * @param tableName * 表名getData * @param rowKey * 行键 * @param colFamily * 列族名 * @param col * 列名(如果其列族下没有子列,此参数可为空) * @param val * 值 * @throws IOException */ public static void insertRow(String tableName, String rowKey, String colFamily, String col, String val) throws IOException { init(); Table table = connection.getTable(TableName.valueOf(tableName)); Put put = new Put(rowKey.getBytes()); put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes()); table.put(put); table.close(); close(); } /** * 删除数据 * * @param tableName * 表名 * @param rowKey * 行键 * @param colFamily * 列族名 * @param col * 列名 * @throws IOException */ public static void deleteRow(String tableName, String rowKey, String colFamily, String col) throws IOException { init(); Table table = connection.getTable(TableName.valueOf(tableName)); Delete delete = new Delete(rowKey.getBytes()); // 删除指定列族的所有数据 // delete.addFamily(colFamily.getBytes()); // 删除指定列的数据 // delete.addColumn(colFamily.getBytes(), col.getBytes()); table.delete(delete); table.close(); close(); } /** * 根据行键rowkey查找数据 * * @param tableName * 表名 * @param rowKey * 行键 * @param colFamily * 列族名 * @param col * 列名 * @throws IOException */ public static void getData(String tableName, String rowKey, String colFamily, String col) throws IOException { init(); Table table = connection.getTable(TableName.valueOf(tableName)); Get get = new Get(rowKey.getBytes()); get.addColumn(colFamily.getBytes(), col.getBytes()); Result result = table.get(get); showCell(result); table.close(); close(); } /** * 格式化输出 * * @param result */ public static void showCell(Result result) { Cell[] cells = result.rawCells(); for (Cell cell : cells) { System.out.println("RowName:" + new String(CellUtil.cloneRow(cell)) + " "); System.out.println("Timetamp:" + cell.getTimestamp() + " "); System.out.println("column Family:" + new String(CellUtil.cloneFamily(cell)) + " "); System.out.println("row Name:" + new String(CellUtil.cloneQualifier(cell)) + " "); System.out.println("value:" + new String(CellUtil.cloneValue(cell)) + " "); } } }
1 下一页