/opt/hbase/conf 中不能启动hbase_浅谈Hbase在用户画像上的应用
背景
公司要做C端的用戶畫像,方便運營人員根據(jù)標簽做用戶圈選,然后對這部分人群做精準廣告投放,所以需要線上接口實時調(diào)用庫中數(shù)據(jù),并快速返回結(jié)果,并將結(jié)果反饋到推送平臺進行推送。
目前公司的方案是全部走ES。每天將Hive統(tǒng)計的各個維度的用戶標簽結(jié)果數(shù)據(jù)從Hive推送到ES,然后ES進行篩選,推送。這個流程雖然速度快,但是不可避免的遇到一個問題,后續(xù)數(shù)據(jù)量會越來越大,如果跨多個維度的用戶圈選,可能會導致ES處理不過來,所以準備采取第二套方案,在組合標簽查詢對應(yīng)的用戶人群場景中,首先通過組合標簽的條件在Elasticsearch中查詢對應(yīng)的索引數(shù)據(jù),然后通過索引數(shù)據(jù)去HBase中批量獲取rowkey對應(yīng)的數(shù)據(jù)。
優(yōu)化后方案流程圖:
介紹
Hbase的簡介
HBase是一個高性能、列存儲、可伸縮、實時讀寫的分布式存儲系統(tǒng),同樣運行在HDFS之上。與Hive不同的是,HBase能夠在數(shù)據(jù)庫上實時運行,而不是跑MapReduce任務(wù),適合進行大數(shù)據(jù)的實時查詢。
Hadoop本質(zhì)上是:分布式文件系統(tǒng)(HDFS) + 分布式計算框架(Mapreduce) + 調(diào)度系統(tǒng)Yarn搭建起來的分布式大數(shù)據(jù)處理框架。Hive:是一個基于Hadoop的數(shù)據(jù)倉庫,適用于一些高延遲性的應(yīng)用(離線開發(fā)),可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供簡單的sql查詢功能。
Hive可以認為是MapReduce的一個包裝,把好寫的HQL轉(zhuǎn)換為的MapReduce程序,本身不存儲和計算數(shù)據(jù),它完全依賴于HDFS和MapReduce,Hive中的表是純邏輯表。hive需要用到hdfs存儲文件,需要用到MapReduce計算框架。
HBase:是一個Hadoop的數(shù)據(jù)庫,一個分布式、可擴展、大數(shù)據(jù)的存儲。hbase是物理表,不是邏輯表,提供一個超大的內(nèi)存hash表,搜索引擎通過它來存儲索引,方便查詢操作。
HBase可以認為是HDFS的一個包裝。他的本質(zhì)是數(shù)據(jù)存儲,是個NoSql數(shù)據(jù)庫;HBase部署于HDFS之上,并且克服了hdfs在隨機讀寫方面的缺點,提高查詢效率。
HMaster
- 管理HRegionServer,實現(xiàn)負載均衡。
- 管理和分配HRegion,比如在HRegion split時分配新的HRegion;在HRegionServer下線時遷移其內(nèi)的HRegion到其他HRegionServer上。
- 實現(xiàn)DDL操作
- 管理namespace和table的元數(shù)據(jù)
- 權(quán)限控制(ACL)
HRegionServer
- 管理HRegion
- 讀寫HDFS,管理Table中的數(shù)據(jù)。
- Client直接通過HRegionServer讀寫數(shù)據(jù)(從HMaster中獲取元數(shù)據(jù),找到RowKey所在的HRegion/HRegionServer后)
ZooKeeper
- 存放整個 HBase集群的元數(shù)據(jù)以及集群的狀態(tài)信息。
- 實現(xiàn)HMaster主從節(jié)點的failover。
Rowkey
用來表示唯一一行記錄的主鍵,HBase的數(shù)據(jù)是按照row key的字典順序進行全局排列的。訪問HBase中的行只有3種方式
- 通過單個row key訪問
- 通過row key的正則訪問
- 全表掃描
由于HBase通過rowkey對數(shù)據(jù)進行檢索,而rowkey由于長度限制的因素不能將很多查詢條件拼接在rowkey中,因此HBase無法像關(guān)系數(shù)據(jù)庫那樣根據(jù)多種條件對數(shù)據(jù)進行篩選。一般地,HBase需建立二級索引來滿足根據(jù)復(fù)雜條件查詢數(shù)據(jù)的需求。
Rowkey設(shè)計時需要遵循三大原則:
- 唯一性原則:rowkey需要保證唯一性,不存在重復(fù)的情況。在畫像中一般使用用戶id作為rowkey。
- 長度原則:rowkey的長度一般為10-100bytes。
- 散列原則:rowkey的散列分布有利于數(shù)據(jù)均衡分布在每個RegionServer,可實現(xiàn)負載均衡。
通常來說,RowKey 只能針對條件中含有其首字段的查詢給予令人滿意的性能支持,在 查詢其他字段時,表現(xiàn)就差強人意了,在極端情況下某些字段的查詢性能可能會退化為全表 掃描的水平,這是因為字段在 RowKey 中的地位是不等價的,它們在 RowKey 中的排位決 定了它們被檢索時的性能表現(xiàn),排序越靠前的字段在查詢中越具有優(yōu)勢,特別是首位字段 具有特別的先發(fā)優(yōu)勢,如果查詢中包含首位字段,檢索時就可以通過首位字段的值確定 RowKey 的前綴部分,從而大幅度地收窄檢索區(qū)間,如果不包含則只能在全體數(shù)據(jù)的 RowKey 上逐一查找,由此可以想見兩者在性能上的差距。
columns family
列簇,HBase中的每個列都歸屬于某個列簇,列簇是表的schema的一部分,必須在使用表之前定義。劃分columns family的原則如下:
- 是否具有相似的數(shù)據(jù)格式;
- 是否具有相似的訪問類型。
Hbase偽分布式搭建
1、下載Hbase
https://www.apache.org/dyn/closer.lua/hbase/hbase-1.3.6/hbase-1.3.6-bin.tar.gz?www.apache.orgwget https://mirror.bit.edu.cn/apache/hbase/hbase-1.3.6/hbase-1.3.6-bin.tar.gz2、解壓
3、修改配置
1、設(shè)置JAVA_HOME vim hbase-env.sh export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home 2、在hbase-site.xml設(shè)置HBase的核心配置 vim hbase-site.xml <configuration><property><name>hbase.rootdir</name>//Here you have to set the path where you want HBase to store its files.<value>hdfs://localhost:9000/hbase</value></property><property><name>hbase.cluster.distributed</name><value>true</value> </property> <property><name>hbase.master.info.port</name><value>60010</value></property> </configuration> 注意: hbase.rootdir要和hadoop中core-site.xml中fs.default.name相同。3、啟動Hbase
必須先啟動Hadoop,然后啟動Hbase。
./start-hbase.sh4、圖形化界面
http://localhost:60010/master-status5、hbase語法
create 語法: create '<table name>', '<column family>' Demo: create 'TEST.USER_INFO', 'INFO'put 語法:put '<table name>', 'row1','<colfamily:colname>','<value>' demo: put 'TEST.USER_INFO', 'R1', 'INFO:C1', 'r1_c1_value1' put 'TEST.USER_INFO', 'R1', 'INFO:C2', 'r1_c2_value1' put 'TEST.USER_INFO', 'R1', 'INFO:C3', 'r1_c3_value1'scan 語法:scan '<table name>' Demo: scan 'TEST.USER_INFO'get 語法:get '<table name>','row1' Demo: get 'TEST.USER_INFO' , 'R1'count 語法:count '<table name>' Demo: count 'TEST.USER_INFO'delete 語法:delete '<table name>', '<row>', '<column name >', '<time stamp>' Demo: delete 'TEST.USER_INFO', 'R1', 'INFO:C1'deleteall 語法:deleteall '<table name>', '<row>' Demo: deleteall 'TEST.USER_INFO', 'R1'drop、disable disable 'TEST.USER_INFO' drop 'TEST.USER_INFO'用戶畫像使用場景
整體架構(gòu)圖在文章開頭已經(jīng)畫了。
用戶畫像不是產(chǎn)生數(shù)據(jù)的源頭,而是對基于數(shù)據(jù)倉庫ODS層、DW層、DM層中與用戶相關(guān)數(shù)據(jù)的二次建模加工。在ETL過程中將用戶標簽計算結(jié)果寫入Hive,由于不同數(shù)據(jù)庫有不同的應(yīng)用場景,后續(xù)需要進一步將數(shù)據(jù)同步到MySQL、HBase、Elasticsearch等數(shù)據(jù)庫中。
- Hive:存儲用戶標簽計算結(jié)果、用戶人群計算結(jié)果、用戶特征庫計算結(jié)果。
- MySQL:存儲標簽元數(shù)據(jù),監(jiān)控相關(guān)數(shù)據(jù),導出到業(yè)務(wù)系統(tǒng)的數(shù)據(jù)。
- HBase:存儲線上接口實時調(diào)用類數(shù)據(jù),存儲用戶標簽數(shù)據(jù)。
- Elasticserch:支持海量數(shù)據(jù)的實時查詢分析,用于存儲用戶人群計算、用戶群透視分析所需的用戶標簽數(shù)據(jù)
其中最開始的ETL和數(shù)據(jù)標簽體系建立都是ETL工程師和數(shù)據(jù)分析師的工作。
- 各種源數(shù)據(jù)、中間層數(shù)據(jù)、匯總數(shù)據(jù)都存在Hive中。
- 用戶標簽源數(shù)據(jù)存Mysql中。
- 用戶標簽的結(jié)果數(shù)據(jù)、二級索引映射表存儲HBase中。
- ES同時存儲二級索引映射表來批量獲取索引。
例如:
為什么要用二級索引。
在線接口在查詢HBase中數(shù)據(jù)時,由于HBase無法像關(guān)系數(shù)據(jù)庫那樣根據(jù)多種條件對數(shù)據(jù)進行篩選(類似SQL語言中的where篩選條件)。一般地HBase需建立二級索引來滿足根據(jù)復(fù)雜條件查詢數(shù)據(jù)的需求。在組合標簽查詢對應(yīng)的用戶人群場景中,首先通過組合標簽的條件在Elasticsearch中查詢對應(yīng)的索引數(shù)據(jù),然后通過索引數(shù)據(jù)去HBase中批量獲取rowkey對應(yīng)的數(shù)據(jù)(Elasticsearch中的documentid和HBase中的rowkey都設(shè)計為用戶id)。
ES做二級索引的兩種構(gòu)建流程:
配套基于Spark/MR的批量索引創(chuàng)建/更新程序, 用于初次或重建已有HBase庫表的索引
備注:
用戶畫像的基本流程見:
https://zhuanlan.zhihu.com/p/147722916?zhuanlan.zhihu.com總結(jié)
以上是生活随笔為你收集整理的/opt/hbase/conf 中不能启动hbase_浅谈Hbase在用户画像上的应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xlsxwriter 合并单元格_Pyt
- 下一篇: 微擎支付返回商户单号_一步一步教你在Sp