HBase微博实战案例
1 需求分析
-
微博内容的浏览,数据库表设计
-
用户社交体现:关注用户,取关用户
-
拉取关注的人的微博内容
2 代码实现
2.1 准备工作
-
第一步:创建maven工程并导入jar包
直接使用在版本确界当中创建的工程以及导入的jar包即可
-
第二步:拷贝三个配置文件到maven工程的下
将node01服务器的三个配置文件,分别是
core-site.xml、hdfs-site.xml、hbase-site.xml三个配置文件,拷贝到maven工程的resources资源目录下
2.2 代码设计总览:
-
创建命名空间以及表名的定义
-
创建微博内容表
-
创建用户关系表
-
创建用户微博内容接收邮件表
-
发布微博内容
-
添加关注用户
-
移除(取关)用户
-
获取关注的人的微博内容
2.3 创建命名空间以及表名的定义
代码实现:
//微博内容表
private static final byte[] WEIBO_CONTENT = "weibo:content".getBytes();
//用户关系表
private static final byte[] WEIBO_RELATION = "weibo:relation".getBytes();
//收件箱表
private static final byte[] WEIBO_CRCEIVE_CONTENT_EMAIL = "weibo:receive_content_email".getBytes();
//建命名空间
public void createNameSpace() throws IOException {
//获得连接
Connection connection = getConnection();
//生成Admin对象
Admin admin = connection.getAdmin();
//admin创建namespace
NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create("weibo").addConfiguration("creator", "bruce").build();
admin.createNamespace(namespaceDescriptor);
//关闭连接
admin.close();
connection.close();
}
public Connection getConnection() throws IOException {
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
return connection;
}
2.4 创建微博内容表
表结构:
方法名 | creatTableeContent |
---|---|
Table Name | weibo:content |
RowKey | 用户ID_时间戳 |
ColumnFamily | info |
ColumnLabel | 标题,内容,图片 |
Version | 1个版本 |
代码实现:
public void createTableContent() throws IOException {
//获得连接
Connection connection = getConnection();
//admin
Admin admin = connection.getAdmin();
//创建
if(!admin.tableExists(TableName.valueOf(WEIBO_CONTENT))) {
HTableDescriptor weibo_content = new HTableDescriptor(TableName.valueOf(WEIBO_CONTENT));
HColumnDescriptor info = new HColumnDescriptor("info");
//指定最小版本、最大版本
info.setMinVersions(1);
info.setMaxVersions(1);
info.setBlockCacheEnabled(true);
weibo_content.addFamily(info);
admin.createTable(weibo_content);
}
//关闭连接
admin.close();
connection.close();
}
2.5 创建用户关系表
表结构:
方法名 | createTableRelations |
---|---|
Table Name | weibo:relations |
RowKey | 用户ID |
ColumnFamily | attends、fans |
ColumnLabel | 关注用户ID,粉丝用户ID |
ColumnValue | 用户ID |
Version | 1个版本 |
代码实现:
/**
* 创建用户关系表
* * 方法名 createTableRelations
* Table Name weibo:relations
* RowKey 用户ID
* ColumnFamily attends、fans
* ColumnLabel 关注用户ID,粉丝用户ID
* ColumnValue 用户ID
* Version 1个版本
*/
public void createTableRelation() throws IOException {
Connection connection = getConnection();
Admin admin = connection.getAdmin();
if(