# 创建 connection 对象
private static Connection connection = null; | |
private static Admin admin = null; | |
static { | |
try { | |
// 获取配置文件信息 | |
Configuration configuration = HBaseConfiguration.create(); | |
configuration.set("hbase.zookeeper.quorum", "hadoop02,hadoop03,hadoop04"); | |
// 创建连接对象 | |
connection = ConnectionFactory.createConnection(configuration); | |
// 创建 Admin 对象 | |
admin = connection.getAdmin(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} |
# 插入数据
// 向表插入数据 | |
public static void putData(String tableName, String rowKey, String cf, String cn, String value) throws IOException { | |
// 获取表对象 | |
Table table = connection.getTable(TableName.valueOf(tableName)); | |
// 创建 put 对象 | |
Put put = new Put(Bytes.toBytes(rowKey)); | |
// 给 put 对象赋值 | |
put.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn), Bytes.toBytes(value)); | |
// 插入数据 | |
table.put(put); | |
// 关闭连接 | |
table.close(); | |
} |
# 获取数据(get)
// 获取数据(get) | |
private static void getData(String tableName, String rowKey, String cf, String cn) throws IOException { | |
// 1. 获取表对象 | |
Table table = connection.getTable(TableName.valueOf(tableName)); | |
// 2. 创建 get 对象 | |
Get get = new Get(Bytes.toBytes(rowKey)); | |
// 2.1 可选:指定获取的列族 | |
// get.addFamily(Bytes.toBytes(cf)); | |
// 2.2 可选:指定列族和列 | |
get.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn)); | |
// 2.3 设置获取数据的版本数 | |
get.setMaxVersions(); | |
// 3. 获取数据 | |
Result result = table.get(get); | |
// 4. 解析 result 并打印 | |
for (Cell cell : result.rawCells()) { | |
// 打印数据 | |
System.out.println("CF: " + Bytes.toString(CellUtil.cloneFamily(cell)) + | |
", CN: " + Bytes.toString(CellUtil.cloneQualifier(cell)) + | |
", Value: " + Bytes.toString(CellUtil.cloneValue(cell))); | |
} | |
// 5. 关闭表连接 | |
table.close(); | |
} |
# 获取数据(scan)
// 获取数据(Scan) | |
private static void scanTable(String tableName) throws IOException { | |
// 1. 获取表对象 | |
Table table = connection.getTable(TableName.valueOf(tableName)); | |
// 2. 构建一个 scan 对象 | |
Scan scan = new Scan(Bytes.toBytes("1001"), Bytes.toBytes("1002")); | |
// 3. 扫描表 | |
ResultScanner scanner = table.getScanner(scan); | |
// 4. 解析 scanner | |
for (Result result : scanner) { | |
// 5. 解析 result 并打印 | |
for (Cell cell : result.rawCells()) { | |
// 打印数据 | |
System.out.println("RK: " + Bytes.toString(CellUtil.cloneRow(cell)) + | |
", CF: " + Bytes.toString(CellUtil.cloneFamily(cell)) + | |
", CN: " + Bytes.toString(CellUtil.cloneQualifier(cell)) + | |
", Value: " + Bytes.toString(CellUtil.cloneValue(cell))); | |
} | |
} | |
// 6. 关闭表连接 | |
table.close(); | |
} |
# 删除数据
// 删除数据 | |
private static void deleteData(String tableName, String rowKey, String cf, String cn) throws IOException { | |
// 1. 获取表数据 | |
Table table = connection.getTable(TableName.valueOf(tableName)); | |
// 2. 构建 delete 对象,删除标记是 deleteFamily | |
Delete delete = new Delete(Bytes.toBytes(rowKey)); | |
// 2.1 (加 s)可选:设置删除的列(删除所有版本) | |
// 若加时间戳,则删除小于等于该时间戳的所有数据,删除标记是 deleteColumn | |
// delete.addColumns(Bytes.toBytes(cf), Bytes.toBytes(cn)); | |
// 2.1 (不加 s)可选:生产环境慎用:设置删除的列(删除最新的版本)。可能会造成已经被覆盖的版本复现 | |
// 若加时间戳,则只删除该时间戳的数据,删除标记是 delete | |
// delete.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn)); | |
// 2.2 删除指定的列族 | |
delete.addFamily(Bytes.toBytes(cf)); | |
// 3. 执行删除操作 | |
table.delete(delete); | |
// 4. 关闭连接 | |
table.close(); | |
} |
# 测试
public static void main(String[] args) throws IOException { | |
// 插入数据测试 | |
// putData("student", "1001", "info", "name", "zhangsan"); | |
// putData("student", "1001", "info", "sex", "male"); | |
// putData("student", "1002", "info", "name", "lisi"); | |
// putData("student", "1002", "info", "sex", "female"); | |
// 获取单行数据 | |
// getData("student", "1001", "info", "name"); | |
// 测试扫描数据 | |
// scanTable("student"); | |
// 测试删除 | |
deleteData("student", "1001", "info", "name"); | |
// 关闭资源 | |
close(); | |
} |