阿里HBase業(yè)務(wù)設(shè)計實踐_第1頁
阿里HBase業(yè)務(wù)設(shè)計實踐_第2頁
阿里HBase業(yè)務(wù)設(shè)計實踐_第3頁
阿里HBase業(yè)務(wù)設(shè)計實踐_第4頁
阿里HBase業(yè)務(wù)設(shè)計實踐_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

阿里HBase業(yè)務(wù)設(shè)計實踐2024/3/25阿里HBase業(yè)務(wù)設(shè)計實踐大綱簡介數(shù)據(jù)模型業(yè)務(wù)設(shè)計產(chǎn)品線使用建議監(jiān)控總結(jié)阿里HBase業(yè)務(wù)設(shè)計實踐簡介Nosql:column-basedstoragesystemLargevolumeofdataHighwrite(esp.random)through-put/GoodramdonreadperformanceRangequeryRow-basetransactionAuto-shardingComparetoBigtableHbaseBasedonHadoopHDFSorotherHDFSBigtablebasedonGFS阿里HBase業(yè)務(wù)設(shè)計實踐Largevolume三層索引結(jié)構(gòu)Region的大小默認(rèn)最大是256M按照平均128M算;假設(shè):一個rowkey1KBRoottable:128M=128*1024KB 即2^7*2^10=2^17bucketMetatable:(2^17)^2=2^34bucket記錄數(shù):2^51條記錄阿里HBase業(yè)務(wù)設(shè)計實踐其它特征三層B+樹的擴展LSMTree[1]適合于范圍查詢Rowkey的字母順序來排序(byte數(shù)組存儲)Row-base事務(wù)級別僅限于rowkey級別Auto-shardingRegion的自動split/move問題:犧牲了CAP中的?[1]JimGrayandFrancoPutzolu,"TheFiveMinuteRuleforTradingMemoryforDiskAccessesandThe10ByteRuleforTradingMemoryforCPUTime",Proceedingsofthe1987ACMSIGMODConference,pp395-398.阿里HBase業(yè)務(wù)設(shè)計實踐已有適合的使用場景海量數(shù)據(jù)寫入歷史數(shù)據(jù)批量寫入消息類(類似Facebook的message)消息類Schema-free業(yè)務(wù)監(jiān)控LOG-Append類的業(yè)務(wù)全網(wǎng)HSF日志全網(wǎng)每天上百億大表的復(fù)雜/多維度索引檢索索引,主數(shù)據(jù)在mysql分析類大批量讀取HBase+緩存TAIR阿里HBase業(yè)務(wù)設(shè)計實踐現(xiàn)有集群狀況集群名稱TPS(avg)11.11最高QPS(avg)11.11最高版本業(yè)務(wù)7k1.8w1.6w3.4w0.90.2業(yè)務(wù)1.8w2w1.2w1.4w業(yè)務(wù)7k3w2w5w業(yè)務(wù)1k2k2k6k業(yè)務(wù)2.5w5w2w6w業(yè)務(wù)10w25w(最高50w)1w2w0.94業(yè)務(wù)4w20w(壓測)2k3w(壓測)0.94業(yè)務(wù)每天2-3kw-RT在ms級別-0.90.2-定制版業(yè)務(wù)10w25w15w100w0.94業(yè)務(wù)3k1.4w3k6k0.94業(yè)務(wù)1.5w2w6k8k0.94阿里HBase業(yè)務(wù)設(shè)計實踐與MYSQL的對比場景HBase優(yōu)點HBase缺點MySQL優(yōu)點MySQL缺點業(yè)務(wù)表使用使用簡單,一張表即可不過沒有SQL有SQL;分庫分表,靈活分庫后更新模式插入多的適合RKupdate差DML二級索引策略需借助索引表強DDL問題客戶端接口靈活自己掌握無標(biāo)準(zhǔn)SQLSQL寫性能非常強順序?qū)懭霑r瓶頸在一臺rs較強幾千tps/單套庫讀性能較強;支持scan依賴內(nèi)存很強;支持scan依賴索引可擴展性強借助愚公/datax工具可動態(tài)擴展弱運維方便自己定制不夠成熟成熟DDL時間短;92版本可以在線若有索引表,需要自己填充Createindex即可時間長;block讀寫穩(wěn)定性CAPCPAAPC阿里HBase業(yè)務(wù)設(shè)計實踐NoSQL使用情況TAOBAOOTS/HBaseBAIDUBAILING/ARMOR/HYPERTABLE(HCE)TENCENTTDB/TSSDFACEBOOKHBASE阿里HBase業(yè)務(wù)設(shè)計實踐大綱簡介數(shù)據(jù)模型業(yè)務(wù)設(shè)計產(chǎn)品線使用建議監(jiān)控總結(jié)阿里HBase業(yè)務(wù)設(shè)計實踐RegionServerRegionStorememStoreStoreFileStoreFile…Store…Region…HDFSZookeeperclusterMasterRegionServer…BackupMasterBackupMaster…HbaseClientHbaseClient…NameNodeDataNodeDataNode…HDFSclient架構(gòu)圖客戶端LSMC0樹同一機器,目的?LSMC1樹Q寫memstore成功立即返回讀blockcache、memstore、storefile阿里HBase業(yè)務(wù)設(shè)計實踐數(shù)據(jù)模型tablerowrowrowColumn-familycolumnColumn-familyColumn-familycolumncell………cellKVcellts1ts2阿里HBase業(yè)務(wù)設(shè)計實踐示例消息表 表結(jié)構(gòu):message

[CF:message[col:autoCommit,deviceUuid,status,type]]:8888/阿里HBase業(yè)務(wù)設(shè)計實踐message對應(yīng)到RDBMSdeviceUuidappidstartTimeexpiredtype…00001cc7d162302482b1cfff3530118392233706834668360652012.11.212012.12.11系統(tǒng)消息00001cc7d162302482b1cfff3530118392233706835317137402012.11.212012.12.11系統(tǒng)消息阿里HBase業(yè)務(wù)設(shè)計實踐表在hdfs的存儲結(jié)構(gòu)/hbase/Table目錄/region目錄Region的具體存儲(/hbase/Table目錄/region目錄/CF目錄/具體文件)阿里HBase業(yè)務(wù)設(shè)計實踐大綱簡介數(shù)據(jù)模型業(yè)務(wù)設(shè)計產(chǎn)品線使用建議監(jiān)控總結(jié)阿里HBase業(yè)務(wù)設(shè)計實踐業(yè)務(wù)設(shè)計適合場景(綜合考慮)表數(shù)據(jù)量大(至少億級別以上)日志append型業(yè)務(wù),(比如定期保留10天數(shù)據(jù)等)原則上:能分庫分表來用mysql就用mysql來解決mysql單表一般500w,能使用mysql的場景無跨行跨表事務(wù)要求寫入量大(每天千萬及以上)讀取量相對少(讀取:寫入<=1/10)讀取場景簡單、不經(jīng)常變化無正序、逆序的排序要求類似dw等全量讀取,不太合適。Rowkey不經(jīng)常更新(必須先刪除再添加)阿里HBase業(yè)務(wù)設(shè)計實踐業(yè)務(wù)設(shè)計典型的設(shè)計Rowkey非單一ID(單一ID可以用mysql解決)Rowkey為組合性最終方案:表名列名/讀取寫入rowkey無法覆蓋的查詢lAscan()

scan的時候進(jìn)行前綴匹配,rowkey中的areaId是必須的參數(shù),設(shè)置startRowlimitset()每天定時插入數(shù)據(jù),數(shù)據(jù)量在1000W,同時刪除一個月前的那一天的數(shù)據(jù)業(yè)務(wù)查詢基本上是對于rowkey的查詢,只有在刪除數(shù)據(jù)的時候,是根據(jù)value中的date來進(jìn)行的表名CF屬性(一行一個)rowkey的信息Aaddress

latlng

dateareaID_geohash_companyId

長度:6位數(shù)字+12位小寫字母+小于5位數(shù)字

前面的6為數(shù)字窮舉約在4000個左右表名CF列表(一行一個)rowkey的信息AInfo(address、latlng)areaID_geohash_companyId

長度:6位數(shù)字+12位小寫字母+小于5位數(shù)字

前面的6為數(shù)字窮舉約在4000個左右適合場景(綜合考慮)表數(shù)據(jù)量大(至少億級別以上)日志append型業(yè)務(wù),(比如定期保留10天數(shù)據(jù)等)無跨行跨表事務(wù)要求寫入量大(每天千萬及以上)讀取量相對少(讀取:寫入<=1/10)讀取場景簡單、不經(jīng)常變化無正序、逆序的排序要求分庫分表類似dw等全量讀取,不太合適。Rowkey不經(jīng)常更新(否則必須先刪除再添加)阿里HBase業(yè)務(wù)設(shè)計實踐業(yè)務(wù)設(shè)計典型的設(shè)計交互性的應(yīng)用消息數(shù)據(jù)雙寫,當(dāng)做索引(類似買賣家)

查找穆公最近一周發(fā)布的消息?查找穆公最近一周發(fā)送給馬云的消息?發(fā)送給馬云的消息?

適合場景(綜合考慮)表數(shù)據(jù)量大(至少億級別以上)日志append型業(yè)務(wù),(比如定期保留10天數(shù)據(jù)等)無跨行跨表事務(wù)要求寫入量大(每天千萬及以上)讀取量相對少(讀取:寫入<=1/10)讀取場景簡單、不經(jīng)常變化無正序、逆序的排序要求分庫分表類似dw等全量讀取,不太合適。Rowkey不經(jīng)常更新(否則必須先刪除再添加)RowkeyColumnValuefromID+timeToid:***;content:***阿里HBase業(yè)務(wù)設(shè)計實踐業(yè)務(wù)設(shè)計表結(jié)構(gòu)設(shè)計 id是訂單ID,可以是業(yè)務(wù)主鍵

能否覆蓋查詢:穆公一個星期內(nèi)買的商品?穆公一個月買的書?RowkeyColumnValueIdvalueString(93fields)RowkeyColumnValueUId+time+idvalueString(32fields)默認(rèn)用戶訂單索引表適合場景(綜合考慮)表數(shù)據(jù)量大(至少億級別以上)日志append型業(yè)務(wù)無跨行跨表事務(wù)要求寫入量大(每天千萬及以上)讀取量相對少(讀取:寫入<=1/10)讀取場景簡單、不經(jīng)常變化無正序、逆序的排序要求分庫分表類似dw等全量讀取,不太合適。Rowkey不經(jīng)常更新(否則必須先刪除再添加)阿里HBase業(yè)務(wù)設(shè)計實踐業(yè)務(wù)設(shè)計分詞索引表 能否覆蓋查詢:穆公一個星期內(nèi)買的商品?穆公一個月買的書?結(jié)論:覆蓋搜索場景、無法用數(shù)據(jù)庫解決查詢類型固定只會按照時間排序永久的大表保存數(shù)據(jù)一致性要求低RowkeyColumnValueUId+分詞+time+idnull適合場景(綜合考慮)表數(shù)據(jù)量大(至少億級別以上)日志append型業(yè)務(wù)無跨行跨表事務(wù)要求寫入量大(每天千萬及以上)讀取量相對少(讀取:寫入<=1/10)讀取場景簡單、不經(jīng)常變化無正序、逆序的排序要求(單向時間排序ok)分庫分表類似dw等全量讀取,不太合適。Rowkey不經(jīng)常更新(否則必須先刪除再添加)特殊的搜索固定需求RowkeyColumnValueUID+time+idnullUID+分詞+time+idnull阿里HBase業(yè)務(wù)設(shè)計實踐業(yè)務(wù)設(shè)計-無結(jié)構(gòu)化數(shù)據(jù)SchemaFree業(yè)務(wù)RowkeyColumnValueid列數(shù)不定,有的有2個列;有的有N個列阿里HBase業(yè)務(wù)設(shè)計實踐大綱簡介數(shù)據(jù)模型業(yè)務(wù)設(shè)計產(chǎn)品線使用建議監(jiān)控總結(jié)阿里HBase業(yè)務(wù)設(shè)計實踐產(chǎn)品線、客戶端使用建議海量數(shù)據(jù),rowkey范圍和分布已知,建議進(jìn)行預(yù)分配Rowkey一定要盡量短(如:時間用時間戳整數(shù)表示、編碼壓縮)CF設(shè)計:盡量少,建議CF數(shù)量在1-2個

flush和compaction是region級別;某個CF引發(fā)其它CF的memstore的flush大量storefile導(dǎo)致compaction(當(dāng)storefile的個數(shù)>value)

問題:還有其他的原因么?1CF->6CFRowkey設(shè)計:寫入要分散;如歷史交易訂單:biz_order_id做reverse后做rowkey阿里HBase業(yè)務(wù)設(shè)計實踐產(chǎn)品線、客戶端使用建議(2)Autoflush參數(shù)設(shè)置為true;否則極端情況下會丟失數(shù)據(jù)Hbaseclient的重試次數(shù)為3次以上。否則會由于split導(dǎo)致regionnotonle;從而導(dǎo)致寫入失敗(udc集群出現(xiàn)過)。hbase.rpc.timeout 一次rpc的timeout;默認(rèn)60秒hbase.client.pause 客戶端的一次操作失敗,到下次重試之間的等待時間hbase.client.retries.number 客戶端重試的次數(shù)hbase.regionserver.lease.period客戶端租期超時閥值;scan量大時可以考慮增大;否則”LeaseException:lease-70000000000000001doesnotexist”阿里HBase業(yè)務(wù)設(shè)計實踐產(chǎn)品線、客戶端使用建議(3)ZK連接/HTable對象的使用注意Configure對象的使用必須是staticorsingleton模式默認(rèn):每臺機器與zk直接的連接數(shù)不超過30個HTable的使用線程不安全使用HTableV2HTablePool(推薦的方式)阿里HBase業(yè)務(wù)設(shè)計實踐產(chǎn)品線、客戶端使用建議(3)HTablePool(自己控制Htable數(shù)量) /**

*返回htablepool連接池中的一個htable

*@paramtableName

*@return

*/

publicstaticsynchronizedHTablegetHtable(StringtableName){

if(hTablePool!=null)

return(HTable)hTablePool.getTable(tableName);//如果hTablePool對象已經(jīng)存在,直接取出一個htable

else{//

hTablePool不存在則先new一個htablepool對象,然后再取

}} /**HTable是非線程安全的在多線程環(huán)境下使用HTablePool是一個好的解決方案, *參數(shù)MAX_TABLE_COUNT是pool保持的每個Htable實例的最大數(shù)量, *比如為10如果有100個線程getTable()同一張表則他們會共用pool中的該表的10個實例,其它的單獨申請 *使用的時候就不要newHtable了,直接從pool中取 *用完再putTable放回去 *

*在0.92以上的版本則不用放回去直接table.close()即可putTable被標(biāo)記為@Deprecated *0.90.2版本使用putTable下面的代碼都沒有做這些操作 *避免不同版本出問題 */阿里HBase業(yè)務(wù)設(shè)計實踐業(yè)務(wù)接入Ork平臺http://nosql.*.com阿里HBase業(yè)務(wù)設(shè)計實踐影響寫測試阿里HBase業(yè)務(wù)設(shè)計實踐影響匯總1、對于寫速度而言,影響因素的效果主要為:寫hlog>split>compact;2、對于寫

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論