Hbase API操作编写案例 假设你是用户部门员工,现需一张表用于存放用户粉丝数据表:userfollower,存:follower 粉丝有谁, followed 关注谁 1.建表 usertollower 2. 用户 Mary 有一个粉丝 Alice 3.用户 Jack 有两个粉丝 Bob 和 Ben 4. Jack 还关注了 Mary 5.查看Jack 被那些人关注,关注了谁 6. Bob 取关了 Jack 7. 扫描全表数据
时间: 2024-02-26 17:58:11 浏览: 16
可以使用 HBase Java API 实现上述需求,下面是示例代码:
```
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
public class UserFollowerExample {
private static final String TABLE_NAME = "usertollower";
private static final String COLUMN_FAMILY_FOLLOWER = "follower";
private static final String COLUMN_FAMILY_FOLLOWED = "followed";
public static void main(String[] args) throws IOException {
Configuration config = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(config);
Admin admin = connection.getAdmin();
TableName tableName = TableName.valueOf(TABLE_NAME);
// 1.建表 usertollower
if (!admin.tableExists(tableName)) {
admin.createTable(tableName, Bytes.toBytes(COLUMN_FAMILY_FOLLOWER), Bytes.toBytes(COLUMN_FAMILY_FOLLOWED));
}
Table table = connection.getTable(tableName);
// 2. 用户 Mary 有一个粉丝 Alice
Put put1 = new Put(Bytes.toBytes("Mary"));
put1.addColumn(Bytes.toBytes(COLUMN_FAMILY_FOLLOWER), Bytes.toBytes("Alice"), Bytes.toBytes(""));
table.put(put1);
// 3.用户 Jack 有两个粉丝 Bob 和 Ben
Put put2 = new Put(Bytes.toBytes("Jack"));
put2.addColumn(Bytes.toBytes(COLUMN_FAMILY_FOLLOWER), Bytes.toBytes("Bob"), Bytes.toBytes(""));
put2.addColumn(Bytes.toBytes(COLUMN_FAMILY_FOLLOWER), Bytes.toBytes("Ben"), Bytes.toBytes(""));
table.put(put2);
// 4. Jack 还关注了 Mary
Put put3 = new Put(Bytes.toBytes("Jack"));
put3.addColumn(Bytes.toBytes(COLUMN_FAMILY_FOLLOWED), Bytes.toBytes("Mary"), Bytes.toBytes(""));
table.put(put3);
// 5.查看Jack 被那些人关注,关注了谁
Get get = new Get(Bytes.toBytes("Jack"));
get.addFamily(Bytes.toBytes(COLUMN_FAMILY_FOLLOWER));
get.addFamily(Bytes.toBytes(COLUMN_FAMILY_FOLLOWED));
Result result = table.get(get);
System.out.println("Jack's followers:");
for (byte[] follower : result.getFamilyMap(Bytes.toBytes(COLUMN_FAMILY_FOLLOWER)).keySet()) {
System.out.println(Bytes.toString(follower));
}
System.out.println("Jack followed:");
for (byte[] followed : result.getFamilyMap(Bytes.toBytes(COLUMN_FAMILY_FOLLOWED)).keySet()) {
System.out.println(Bytes.toString(followed));
}
// 6. Bob 取关了 Jack
Delete delete = new Delete(Bytes.toBytes("Jack"));
delete.addColumn(Bytes.toBytes(COLUMN_FAMILY_FOLLOWER), Bytes.toBytes("Bob"));
table.delete(delete);
// 7. 扫描全表数据
Scan scan = new Scan();
ResultScanner scanner = table.getScanner(scan);
for (Result row : scanner) {
System.out.println("Row key: " + Bytes.toString(row.getRow()));
for (byte[] follower : row.getFamilyMap(Bytes.toBytes(COLUMN_FAMILY_FOLLOWER)).keySet()) {
System.out.println("Follower: " + Bytes.toString(follower));
}
for (byte[] followed : row.getFamilyMap(Bytes.toBytes(COLUMN_FAMILY_FOLLOWED)).keySet()) {
System.out.println("Followed: " + Bytes.toString(followed));
}
}
table.close();
admin.close();
connection.close();
}
}
```
注意:在运行代码之前需要先在 HBase 中创建表 usertollower,包含列族 follower 和 followed。