大数据技术之_11_HBase学习_03
第8章 HBase 实战之谷粒微博
8.1 需求分析
1) 微博内容的浏览,数据库表设计
2) 用户社交体现:关注用户,取关用户
3) 拉取关注的人的微博内容
数据库表设计:
[外链图片转存失败(img-F1wqIrTB-1562638565417)(https://s2.ax1x.com/2019/03/10/ApGbZT.png)]
8.2 代码实现
目录结构:
[外链图片转存失败(img-7ZHBe2UO-1562638565419)(https://s2.ax1x.com/2019/03/10/ApGqdU.png)]
代码如下:
常量类:
package com.atguigu.constant;
public class Constant {
// 命名空间(相当于数据库名称)
public static final String NAMESPACE = "weibo";
// 内容表的表名
public static final String CONTENT = "weibo:content";
// 用户关系表的表名
public static final String RELATIONS = "weibo:relations";
// 微博收件箱表的表名
public static final String INBOX = "weibo:inbox";
}
工具类:
package com.atguigu.util;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.NamespaceDescriptor;
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.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.SubstringComparator;
import org.apache.hadoop.hbase.util.Bytes;
import com.atguigu.constant.Constant;
public class WeiboUtil {
// 获取配置conf
private static Configuration conf = null;
static {
// HBase配置文件
conf = HBaseConfiguration.create();
// 设置zookeeper地址
conf.set("hbase.zookeeper.quorum", "192.168.25.102");
conf.set("hbase.zookeeper.property.clientPort", "2181");
}
// 创建命名空间
public static void createNamespace(String namespace) throws IOException {
// 创建连接
// 注意:关于Util中的异常不要在工具类Util中catch,应该抛出去,因为工具类Util会在业务线上的很多地方调用,每一个业务线对待异常的处理方式不一样。
Connection conn = ConnectionFactory.createConnection(conf);
Admin admin = conn.getAdmin();
// 创建命名空间描述器
NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create(namespace).build();
// 创建命名空间
admin.createNamespace(namespaceDescriptor);
// 关闭资源
admin.close();
}
// 创建表
public static void createTable(String tableName, int versions, String... columnFamily) throws IOException {
// 创建连接
Connection conn = ConnectionFactory.createConnection(conf);
Admin admin = conn