尚硅谷大數(shù)據(jù)技術(shù)之HBase(新)第8章 Hbase實戰(zhàn)之谷粒微博
第8章 Hbase實戰(zhàn)之谷粒微博
8.1 需求分析
1) 微博內(nèi)容的瀏覽,數(shù)據(jù)庫表設(shè)計
2) 用戶社交體現(xiàn):關(guān)注用戶,取關(guān)用戶
3) 拉取關(guān)注的人的微博內(nèi)容
8.2?代碼實現(xiàn)
8.2.1 代碼設(shè)計總覽:
1) 創(chuàng)建命名空間以及表名的定義
2) 創(chuàng)建微博內(nèi)容表
3) 創(chuàng)建用戶關(guān)系表
4) 創(chuàng)建用戶微博內(nèi)容接收郵件表
5) 發(fā)布微博內(nèi)容
6) 添加關(guān)注用戶
7) 移除(取關(guān))用戶
8) 獲取關(guān)注的人的微博內(nèi)容
9) 測試
8.2.2 創(chuàng)建命名空間以及表名的定義
//獲取配置conf
private Configuration conf = HBaseConfiguration.create();
//微博內(nèi)容表的表名
private static final byte[] TABLE_CONTENT = Bytes.toBytes("weibo:content");
//用戶關(guān)系表的表名
private static final byte[] TABLE_RELATIONS = Bytes.toBytes("weibo:relations");
//微博收件箱表的表名
private static final byte[] TABLE_RECEIVE_CONTENT_EMAIL = Bytes.toBytes("weibo:receive_content_email");
public void initNamespace(){
HBaseAdmin admin = null;
try {
admin = new HBaseAdmin(conf);
//命名空間類似于關(guān)系型數(shù)據(jù)庫中的schema,可以想象成文件夾
NamespaceDescriptor weibo = NamespaceDescriptor
.create("weibo")
.addConfiguration("creator", "Jinji")
.addConfiguration("create_time", System.currentTimeMillis() + "")
.build();
admin.createNamespace(weibo);
} catch (MasterNotRunningException e) {
e.printStackTrace();
} catch (ZooKeeperConnectionException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(null != admin){
try {
admin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
8.2.3 創(chuàng)建微博內(nèi)容表
表結(jié)構(gòu):
方法名 |
creatTableeContent |
Table Name |
weibo:content |
RowKey |
用戶ID_時間戳 |
ColumnFamily |
info |
ColumnLabel |
標(biāo)題,內(nèi)容,圖片 |
Version |
1個版本 |
代碼:
/**
?* 創(chuàng)建微博內(nèi)容表
?* Table Name:weibo:content
?* RowKey:用戶ID_時間戳
?* ColumnFamily:info
?* ColumnLabel:標(biāo)題 內(nèi)容 圖片URL
?* Version:1個版本
?*/
public void createTableContent(){
HBaseAdmin admin = null;
try {
admin = new HBaseAdmin(conf);
//創(chuàng)建表表述
HTableDescriptor content = new HTableDescriptor(TableName.valueOf(TABLE_CONTENT));
//創(chuàng)建列族描述
HColumnDescriptor info = new HColumnDescriptor(Bytes.toBytes("info"));
//設(shè)置塊緩存
info.setBlockCacheEnabled(true);
//設(shè)置塊緩存大小
info.setBlocksize(2097152);
//設(shè)置壓縮方式
// info.setCompressionType(Algorithm.SNAPPY);
//設(shè)置版本確界
info.setMaxVersions(1);
info.setMinVersions(1);
content.addFamily(info);
admin.createTable(content);
} catch (MasterNotRunningException e) {
e.printStackTrace();
} catch (ZooKeeperConnectionException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(null != admin){
try {
admin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}