欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

HBase從入門到落地:架構(gòu)原理、RowKey設(shè)計(jì)與性能調(diào)優(yōu)實(shí)戰(zhàn)

HBase從入門到落地:架構(gòu)原理、RowKey設(shè)計(jì)與性能調(diào)優(yōu)實(shí)戰(zhàn) 業(yè)內(nèi)做海量數(shù)據(jù)存儲(chǔ)的團(tuán)隊(duì)這幾年十有八九都遇到過(guò)這類場(chǎng)景業(yè)務(wù)量一上來(lái)傳統(tǒng)關(guān)系庫(kù)撐不住了分庫(kù)分表又麻煩得要命最終把目光放到 HBase 上。但 HBase 這套東西網(wǎng)上資料碎片化嚴(yán)重真要?jiǎng)邮执罱?、調(diào)優(yōu)、排障坑一個(gè)接一個(gè)。我以多年實(shí)操經(jīng)驗(yàn)把 HBase 從入門到落地全流程梳理一遍把那些文檔里沒(méi)寫(xiě)透的原理、參數(shù)取舍、踩坑記錄一次講清。這套內(nèi)容適合誰(shuí)準(zhǔn)備引入列式存儲(chǔ)方案的架構(gòu)師、被線上 HBase 性能問(wèn)題折磨的運(yùn)維和開(kāi)發(fā)、想系統(tǒng)補(bǔ)齊分布式數(shù)據(jù)庫(kù)知識(shí)的學(xué)生??赐昴隳苊靼?HBase 演進(jìn)的邏輯、底層存儲(chǔ)機(jī)制、讀寫(xiě)全鏈路原理以及高頻問(wèn)題的排查方向照著實(shí)操路徑去搭一套可用集群?jiǎn)栴}不大。1. HBase 到底是什么它解決了哪些問(wèn)題1.1 HBase 在分布式數(shù)據(jù)庫(kù)里的身位先給 HBase 一個(gè)通俗定位它是運(yùn)行在 Hadoop 生態(tài)之上的分布式、面向列族的 NoSQL 數(shù)據(jù)庫(kù)定位是海量結(jié)構(gòu)化大表的實(shí)時(shí)讀寫(xiě)。注意幾個(gè)關(guān)鍵詞分布式、列族、海量、實(shí)時(shí)。分布式它把一張表在物理上拆成多個(gè)分片分布在不同節(jié)點(diǎn)上并行服務(wù)。列族它的數(shù)據(jù)按列族物理隔離同一列族內(nèi)的列往往有相似的訪問(wèn)模式或數(shù)據(jù)特性。海量單表百億行、PB 級(jí)數(shù)據(jù)是它擅長(zhǎng)的場(chǎng)景。實(shí)時(shí)這里的實(shí)時(shí)指毫秒到秒級(jí)延遲的隨機(jī)讀寫(xiě)區(qū)別于離線批量處理。它擅長(zhǎng)什么不擅長(zhǎng)什么一開(kāi)始就要心里有數(shù)。HBase 適合海量明細(xì)數(shù)據(jù)的寫(xiě)入與按 RowKey 查詢比如訂單流水、日志明細(xì)、用戶行為軌跡、設(shè)備上報(bào)數(shù)據(jù)。它天生不適合復(fù)雜的關(guān)聯(lián)查詢、聚合分析、事務(wù)型強(qiáng)一致場(chǎng)景。把 HBase 當(dāng)關(guān)系庫(kù)用方向就錯(cuò)了。HBase 實(shí)際上是 Google BigTable 模型的開(kāi)源實(shí)現(xiàn)。Google 當(dāng)年面對(duì)海量網(wǎng)頁(yè)數(shù)據(jù)的存儲(chǔ)和分析需求發(fā)現(xiàn)傳統(tǒng)數(shù)據(jù)庫(kù)根本無(wú)法支撐這種量級(jí)于是提出了 BigTable 的分布式存儲(chǔ)模型。HBase 借鑒了這一模型把稀疏、多維、有序的 Map 作為核心數(shù)據(jù)模型配合 Hadoop HDFS 作為底層存儲(chǔ)解決了海量數(shù)據(jù)水平擴(kuò)展的問(wèn)題。這個(gè)“借鑒”不是簡(jiǎn)單的拷貝HBase 團(tuán)隊(duì)基于 JVM 生態(tài)和 Hadoop 生態(tài)做了大量工程化落地的工作才形成了我們今天看到的這套系統(tǒng)。1.2 HBase 和傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的本質(zhì)差異很多剛接觸 HBase 的人會(huì)用關(guān)系庫(kù)的思維去套它結(jié)果處處碰壁。這里把最關(guān)鍵的差異列出來(lái)能省下你后面至少三個(gè)月的摸索時(shí)間。存儲(chǔ)模型關(guān)系庫(kù)是行式存儲(chǔ)一張表的所有列物理上連續(xù)存儲(chǔ)適合整行讀取和事務(wù)性操作HBase 是列族式存儲(chǔ)同一列族的數(shù)據(jù)連續(xù)存儲(chǔ)但不同列族各自獨(dú)立適合按列族的局部讀取和批量掃描。索引機(jī)制關(guān)系庫(kù)靠二級(jí)索引任意列都可以建索引加速查詢HBase 只認(rèn) RowKey 這一個(gè)天然索引按 RowKey 的查詢性能最高其他列的查詢要么全表掃描要么依賴額外方案。事務(wù)能力關(guān)系庫(kù)支持 ACID 事務(wù)多行多表操作可以保持強(qiáng)一致HBase 只支持行級(jí)別的 ACID跨行、跨表的事務(wù)能力非常弱業(yè)界通常用“單行事務(wù) 業(yè)務(wù)補(bǔ)償”的方式來(lái)處理。擴(kuò)展方式關(guān)系庫(kù)的擴(kuò)展以垂直擴(kuò)展為主數(shù)據(jù)量到一定程度就得換更強(qiáng)的硬件HBase 天然支持水平擴(kuò)展數(shù)據(jù)量大了直接加 RegionServer 節(jié)點(diǎn)就行擴(kuò)容過(guò)程中基本不需要停機(jī)。這個(gè)對(duì)比不是說(shuō) HBase 比關(guān)系庫(kù)強(qiáng)或弱而是讓你知道在什么場(chǎng)景下該選誰(shuí)。一個(gè)常見(jiàn)的合理架構(gòu)是關(guān)系庫(kù)負(fù)責(zé)核心交易類數(shù)據(jù)HBase 負(fù)責(zé)海量明細(xì)數(shù)據(jù)和各類流水?dāng)?shù)據(jù)的存儲(chǔ)與查詢兩者配合使用。1.3 HBase 的生態(tài)位置和應(yīng)用場(chǎng)景圖譜從生態(tài)位置來(lái)看HBase 是 Hadoop 體系里唯一能提供實(shí)時(shí)隨機(jī)讀寫(xiě)能力的組件。HDFS 解決存儲(chǔ)問(wèn)題但不支持隨機(jī)更新Hive 解決離線分析問(wèn)題但延遲太高HBase 補(bǔ)上了“實(shí)時(shí)隨機(jī)讀寫(xiě)”這塊拼圖。在實(shí)際應(yīng)用中比較典型的幾個(gè)場(chǎng)景訂單流水存儲(chǔ)某電商平臺(tái)的訂單表每天新增幾千萬(wàn)條記錄總量達(dá)到幾十億行。這些數(shù)據(jù)按用戶維度查詢頻率高按時(shí)間范圍掃描也是常態(tài)。HBase 的 RowKey 設(shè)計(jì)成“用戶 ID 反轉(zhuǎn) 時(shí)間戳”的格式既能按用戶查也能按時(shí)間范圍掃。用戶行為軌跡記錄用戶點(diǎn)擊、瀏覽、搜索行為每天產(chǎn)生海量日志。這類數(shù)據(jù)寫(xiě)入量極大但單條數(shù)據(jù)價(jià)值密度低適合先寫(xiě)入 HBase 存儲(chǔ)后續(xù)再通過(guò)其他渠道分析。物聯(lián)網(wǎng)設(shè)備數(shù)據(jù)上報(bào)設(shè)備每秒上報(bào)一次狀態(tài)數(shù)據(jù)一天下來(lái)單設(shè)備就有 86400 條記錄百萬(wàn)級(jí)設(shè)備就是每天數(shù)億條。HBase 的高吞吐寫(xiě)入能力在這里發(fā)揮得淋漓盡致RowKey 設(shè)計(jì)成“設(shè)備 ID 日期 時(shí)間桶”的格式讓寫(xiě)入壓力均勻分散。消息類數(shù)據(jù)的暫存區(qū)某些場(chǎng)景下需要短期存儲(chǔ)大量消息數(shù)據(jù)消費(fèi)者異步消費(fèi)。HBase 適合做這類暫存和回溯查詢的場(chǎng)景。上面這些場(chǎng)景有幾個(gè)共同點(diǎn)寫(xiě)入量大數(shù)據(jù)量增長(zhǎng)快按 Key 查詢?yōu)橹髋紶栃枰秶鷴呙?。這些特征正好就是 HBase 的舒適區(qū)。2. HBase 核心架構(gòu)與數(shù)據(jù)模型2.1 主從架構(gòu)里的角色分工HBase 采用典型的主從架構(gòu)主要由 HMaster 和 RegionServer 兩類核心服務(wù)組成另外還要依賴 ZooKeeper 和 HDFS。這里講清每個(gè)角色各自管什么。HMaster 負(fù)責(zé)管理整個(gè)集群的元數(shù)據(jù)信息、Region 的分配與遷移、表的創(chuàng)建與刪除、RegionServer 的負(fù)載均衡與故障恢復(fù)。注意HMaster 并不直接參與數(shù)據(jù)的讀寫(xiě)請(qǐng)求數(shù)據(jù)讀寫(xiě)都由 RegionServer 處理。這意味著 HMaster 掛了集群的讀寫(xiě)在短期內(nèi)不受影響只是不能做 DDL 操作和 Region 管理了。RegionServer 是真正干活的節(jié)點(diǎn)每個(gè) RegionServer 管理多個(gè) Region??蛻舳俗x寫(xiě)數(shù)據(jù)時(shí)先根據(jù)元數(shù)據(jù)找到對(duì)應(yīng) Region 所在的 RegionServer然后直接與 RegionServer 通信。每個(gè) RegionServer 內(nèi)部包含多個(gè)核心組件WAL寫(xiě)前日志、BlockCache讀緩存、MemStore寫(xiě)緩存以及管理多個(gè) HFile 文件的 Store。ZooKeeper 在 HBase 里的作用像一個(gè)分布式協(xié)調(diào)中心。它維護(hù)著 HBase 的元數(shù)據(jù)入口監(jiān)控 RegionServer 的在線狀態(tài)負(fù)責(zé) HMaster 的選主以及元數(shù)據(jù)表的定位信息。HBase 集群?jiǎn)?dòng)時(shí)先由 ZooKeeper 選出 Active HMaster然后 RegionServer 向 ZooKeeper 注冊(cè)。HDFS 在最底層負(fù)責(zé)最終的數(shù)據(jù)落盤(pán)存儲(chǔ)。RegionServer 接收的寫(xiě)入數(shù)據(jù)先寫(xiě)入 HDFS 上的 WAL 文件最終 HFile 文件也是存儲(chǔ)在 HDFS 上的。HDFS 的副本機(jī)制保證了數(shù)據(jù)的可靠性默認(rèn)三副本存儲(chǔ)。HMaster集群管理者負(fù)責(zé)元數(shù)據(jù)、Region 管理、負(fù)載均衡。RegionServer數(shù)據(jù)讀寫(xiě)服務(wù)者負(fù)責(zé)處理客戶端的實(shí)際請(qǐng)求。ZooKeeper分布式協(xié)調(diào)者負(fù)責(zé)元數(shù)據(jù)入口、狀態(tài)監(jiān)控、選主。HDFS底層存儲(chǔ)者負(fù)責(zé)數(shù)據(jù)的最終落地和多副本保障。2.2 Region 與 RegionServer 的關(guān)系把表數(shù)據(jù)量變大之后HBase 會(huì)自動(dòng)把一張表從行方向切成多個(gè) Region。每個(gè) Region 包含一段連續(xù)的行鍵范圍由起始 RowKey 和結(jié)束 RowKey 定義。比如一張訂單表有 1 億行數(shù)據(jù)按照 RowKey 范圍被切成 10 個(gè) Region每個(gè) Region 負(fù)責(zé) 1000 萬(wàn)行的數(shù)據(jù)。Region 是 HBase 數(shù)據(jù)分布和負(fù)載均衡的最小單位。RegionServer 啟動(dòng)時(shí)會(huì)加載分配給自己的 Region客戶端讀寫(xiě)數(shù)據(jù)時(shí)必須路由到對(duì)應(yīng)的 RegionServer。數(shù)據(jù)量增長(zhǎng)后Region 會(huì)不斷分裂成子 Region分裂出去的 Region 可能被分配給其他 RegionServer以此實(shí)現(xiàn)負(fù)載均衡。Region 分裂是一個(gè)高頻且重要的操作。默認(rèn)情況下當(dāng)單個(gè) Region 的數(shù)據(jù)量超過(guò)一定閾值由hbase.hregion.max.filesize參數(shù)控制默認(rèn) 10GBRegion 會(huì)觸發(fā)分裂。分裂時(shí)原有 Region 會(huì)先離線然后被切成兩個(gè)子 Region底層 HFile 文件會(huì)被分成引用文件。這個(gè)過(guò)程中對(duì)正在進(jìn)行讀寫(xiě)請(qǐng)求的客戶端會(huì)有短暫影響所以在流量高峰期要注意控制分裂頻率。2.3 數(shù)據(jù)模型表、行、列族、單元格、時(shí)間戳HBase 的數(shù)據(jù)模型是很多人最容易繞暈的地方這里把它掰開(kāi)揉碎講。一張表由若干行組成每行由 RowKey行鍵唯一標(biāo)識(shí)。行與行之間按 RowKey 字典序排列這個(gè)順序決定了數(shù)據(jù)在物理存儲(chǔ)上的位置。每行數(shù)據(jù)被劃分到一個(gè)或多個(gè)列族Column Family中。列族是列的集合屬于同一列族的所有列在物理上存儲(chǔ)在一起。列族需要在建表時(shí)預(yù)先定義好而且盡量穩(wěn)定不變因?yàn)檎{(diào)整列族是非常重的操作。一個(gè)常用的設(shè)計(jì)原則是把訪問(wèn)模式相似的列放到同一列族不同訪問(wèn)模式的列放到不同列族。比如“用戶基本信息”放一個(gè)列族“用戶擴(kuò)展屬性”放另一個(gè)列族因?yàn)榛拘畔⒌牟樵冾l率遠(yuǎn)高于擴(kuò)展屬性。列Column由“列族:列標(biāo)識(shí)”這樣的格式組成例如info:agedata:score。這個(gè)設(shè)計(jì)意味著每一行的列可以是稀疏的某些行可以有某些列某些行可以沒(méi)有這些列空值不占用存儲(chǔ)空間。單元格Cell是真正存儲(chǔ)數(shù)據(jù)的地方由 RowKey、列族、列、時(shí)間戳版本號(hào)唯一確定。每個(gè)單元格可以保存同一數(shù)據(jù)的多個(gè)歷史版本版本數(shù)由VERSIONS參數(shù)控制默認(rèn)是 1也就是只保留最新一個(gè)版本。可以通過(guò)設(shè)置VERSIONS為 3 或更高來(lái)保存歷史數(shù)據(jù)。例如設(shè)置VERSIONS 3之后對(duì)同一個(gè) RowKey 的同一個(gè)列進(jìn)行三次修改查詢時(shí)可以讀取到三個(gè)歷史版本。存儲(chǔ)順序方面HBase 的數(shù)據(jù)整體按 RowKey 字典序排列同一行內(nèi)按列族排序同一列族內(nèi)按列標(biāo)識(shí)排序同一單元格內(nèi)按版本號(hào)倒序排列最新版本在前。這個(gè)排序規(guī)則直接影響 RowKey 的設(shè)計(jì)策略。3. 存儲(chǔ)機(jī)制與讀寫(xiě)鏈路詳解3.1 寫(xiě)入鏈路WAL、MemStore 與 HFile 的三角關(guān)系理解 HBase 的寫(xiě)入流程需要先建立三個(gè)關(guān)鍵組件的印象WALWrite-Ahead Log預(yù)寫(xiě)日志HBase 寫(xiě)入數(shù)據(jù)時(shí)先寫(xiě) WAL再寫(xiě)內(nèi)存。這樣即使節(jié)點(diǎn)宕機(jī)也可以從 WAL 恢復(fù)數(shù)據(jù)。MemStore每個(gè) Region 的每個(gè)列族對(duì)應(yīng)一個(gè) MemStore它是一塊內(nèi)存區(qū)域?qū)懭霐?shù)據(jù)先在這里緩沖。HFile數(shù)據(jù)最終落盤(pán)的存儲(chǔ)文件格式存儲(chǔ)在 HDFS 上。寫(xiě)入流程是這樣的客戶端發(fā)起 Put 請(qǐng)求先通過(guò)元數(shù)據(jù)定位到目標(biāo) Region 所在的 RegionServer然后寫(xiě)入流程開(kāi)始。第一步寫(xiě) WAL把數(shù)據(jù)追加到 WAL 文件末尾第二步寫(xiě)入 MemStore把數(shù)據(jù)更新到內(nèi)存結(jié)構(gòu)中。寫(xiě) WAL 成功之后客戶端就會(huì)收到成功響應(yīng)。這里有個(gè)值得注意的細(xì)節(jié)HBase 默認(rèn)開(kāi)啟了 WAL但有些業(yè)務(wù)場(chǎng)景為了追求極致的寫(xiě)入性能可以關(guān)閉 WAL。關(guān)閉 WAL 的代價(jià)是數(shù)據(jù)可靠性大幅下降一旦節(jié)點(diǎn)宕機(jī)內(nèi)存中尚未落盤(pán)的數(shù)據(jù)會(huì)全部丟失。我通常給出的建議是能開(kāi) WAL 就開(kāi)不要為了那點(diǎn)性能去賭節(jié)點(diǎn)穩(wěn)定性。當(dāng) MemStore 的數(shù)據(jù)量達(dá)到某個(gè)閾值hbase.hregion.memstore.flush.size默認(rèn) 128MB時(shí)MemStore 里的數(shù)據(jù)會(huì)被刷寫(xiě)成一個(gè)個(gè) HFile 文件。這個(gè)過(guò)程叫 Flush。隨著 HFile 文件越來(lái)越多后臺(tái)的合并線程會(huì)周期性地把多個(gè) HFile 合并成一個(gè)大的 HFile這個(gè)過(guò)程叫 Compact。合并會(huì)減少文件數(shù)量提高讀取性能但合并過(guò)程本身消耗 I/O所以需要在合并頻率和讀取性能之間找到平衡。3.2 讀取鏈路BlockCache 與布隆過(guò)濾器的加速機(jī)制讀取流程相對(duì)復(fù)雜因?yàn)?HBase 需要在內(nèi)存和磁盤(pán)之間做多級(jí)查找。客戶端發(fā)起 Get 請(qǐng)求后首先從 BlockCache讀緩存中查找。BlockCache 會(huì)緩存最近讀取過(guò)的 HFile 數(shù)據(jù)塊命中緩存則直接返回未命中則繼續(xù)向 MemStore 和 HFile 層查找。MemStore 中保存了尚未落盤(pán)的最新數(shù)據(jù)這部分?jǐn)?shù)據(jù)一定是最新的所以要優(yōu)先檢查。然后才是 HFile 層這也是最耗時(shí)的部分。HFile 文件內(nèi)部按塊Block組織默認(rèn)塊大小是 64KB。為了提升查找效率HBase 引入了布隆過(guò)濾器Bloom Filter機(jī)制它能在查找某個(gè) RowKey 時(shí)快速判斷某個(gè) HFile 文件中是否可能存在該數(shù)據(jù)如果判斷不存在就跳過(guò)該文件避免無(wú)效掃描。讀取流程還有一層關(guān)鍵設(shè)計(jì)反向合并。HBase 會(huì)從新到舊反向合并所有可能包含目標(biāo)數(shù)據(jù)的文件最新的數(shù)據(jù)優(yōu)先返回保證讀到的是最新版本。如果某個(gè) RowKey 的數(shù)據(jù)分布在多個(gè) HFile 中HBase 需要比較多個(gè)文件中同一 RowKey 的數(shù)據(jù)取出版本號(hào)最大的那個(gè)返回這一過(guò)程會(huì)有額外的 I/O 開(kāi)銷也是合并操作存在的原因。3.3 合并與分裂Compaction 對(duì)性能的雙刃劍效應(yīng)合并分為兩種Minor Compaction 和 Major Compaction。Minor Compaction 是自動(dòng)觸發(fā)的小規(guī)模合并通常合并幾個(gè)較小的 HFile代價(jià)較小。Major Compaction 是重寫(xiě)所有 HFile 的大規(guī)模合并會(huì)清理刪除標(biāo)記和過(guò)期版本代價(jià)很大通常在業(yè)務(wù)低峰期手動(dòng)觸發(fā)。Major Compaction 是雙刃劍一方面它能大幅提高讀取性能清理垃圾數(shù)據(jù)減少文件數(shù)量另一方面它會(huì)產(chǎn)生大量的磁盤(pán) I/O占用 CPU 和帶寬資源。如果集群性能本來(lái)就緊張一次大的 Major Compaction 可能引發(fā)一系列連鎖問(wèn)題甚至影響在線業(yè)務(wù)。在實(shí)際運(yùn)維中我通常建議控制 Major Compaction 的頻率和窗口。可以把自動(dòng) Major Compaction 關(guān)閉改成每天凌晨業(yè)務(wù)低峰期定時(shí)執(zhí)行。相關(guān)參數(shù)是hbase.hregion.majorcompaction默認(rèn)值是 7 天執(zhí)行一次可以設(shè)置為 0 關(guān)閉自動(dòng)模式。Region 分裂我之前提過(guò)這里再補(bǔ)充一個(gè)操作細(xì)節(jié)當(dāng)單 Region 數(shù)據(jù)量超過(guò)閾值時(shí)Region 自動(dòng)分裂原 Region 的 HFile 會(huì)被拆成引用文件供子 Region 使用。后續(xù)讀寫(xiě)過(guò)程中子 Region 的數(shù)據(jù)會(huì)逐漸寫(xiě)入自己的新 HFile引用文件最終會(huì)被清理掉。分裂過(guò)程中會(huì)短暫暫停該 Region 的寫(xiě)入所以建議在高寫(xiě)入壓力集群中提前規(guī)劃好 Region 的預(yù)分裂讓數(shù)據(jù)均勻分布在多個(gè) Region 上而不是等數(shù)據(jù)量增長(zhǎng)后再自動(dòng)分裂。4. 環(huán)境搭建與使用入門基于模擬項(xiàng)目X4.1 從零搭建 HBase 集群的關(guān)鍵步驟下面以一套三節(jié)點(diǎn)的模擬集群為例演示從零搭建的過(guò)程。環(huán)境基于主流開(kāi)源組件版本組合Hadoop 3.x HBase 2.x ZooKeeper 3.xJDK 統(tǒng)一為 8 或 11。第一步是時(shí)間同步與主機(jī)名配置。分布式系統(tǒng)對(duì)時(shí)間同步要求很高HBase 的寫(xiě)入時(shí)間戳依賴客戶端和服務(wù)器的時(shí)間一致。用 NTP 或 chrony 保證三臺(tái)機(jī)器時(shí)間誤差在 50ms 以內(nèi)。主機(jī)名解析要寫(xiě)進(jìn) /etc/hosts不能用 IP 直連的配置方式避免后續(xù)擴(kuò)容和元數(shù)據(jù)交換出問(wèn)題。第二步是部署 HDFS。HBase 依賴 HDFS 存儲(chǔ)數(shù)據(jù)需要先搭建一個(gè)可用的 HDFS 集群。核心配置項(xiàng)包括dfs.replication副本數(shù)生產(chǎn)環(huán)境建議 3、dfs.namenode.name.dir元數(shù)據(jù)存儲(chǔ)路徑建議用獨(dú)立磁盤(pán)閃存盤(pán)、dfs.datanode.data.dir數(shù)據(jù)存儲(chǔ)路徑可以配置多個(gè)磁盤(pán)目錄實(shí)現(xiàn)負(fù)載分擔(dān)。HDFS 部署完成后用hdfs dfsadmin -report確認(rèn)所有 DataNode 在線再進(jìn)行下一步。第三步是部署 ZooKeeper。ZooKeeper 集群建議奇數(shù)節(jié)點(diǎn)最少 3 個(gè)。配置文件 zoo.cfg 里的dataDir要放在獨(dú)立磁盤(pán)上不跟系統(tǒng)盤(pán)共用。ZooKeeper 的日志和數(shù)據(jù)也建議分離存儲(chǔ)。第四步是安裝 HBase。下載二進(jìn)制包解壓修改hbase-env.sh設(shè)置 JAVA_HOME修改hbase-site.xml配置核心參數(shù)property namehbase.rootdir/name valuehdfs://namenode:8020/hbase/value /property property namehbase.zookeeper.quorum/name valuenode1,node2,node3/value /property property namehbase.cluster.distributed/name valuetrue/value /property第五步是配置 regionservers 文件把三臺(tái)節(jié)點(diǎn)都寫(xiě)進(jìn)去然后啟動(dòng)集群。先啟動(dòng) Hadoop再啟動(dòng) ZooKeeper最后啟動(dòng) HBase。用hbase shell進(jìn)入命令行執(zhí)行status命令看到多臺(tái) RegionServer 在線集群就基本就緒了。4.2 建表與數(shù)據(jù)操作常用命令逐個(gè)過(guò)HBase 的交互操作主要走 HBase Shell雖然生產(chǎn)環(huán)境一般用 Java API 或者各類框架封裝但 Shell 是理解數(shù)據(jù)模型和排查問(wèn)題的最好工具。建表的基本語(yǔ)法是這樣的create user_profile, {NAME info, VERSIONS 3}, {NAME data}這條命令創(chuàng)建了一張名為 user_profile 的表包含兩個(gè)列族info 和 data。info 列族保留 3 個(gè)歷史版本。創(chuàng)建成功后用list查看當(dāng)前所有表用describe user_profile查看表的詳細(xì)結(jié)構(gòu)包括各列族的屬性、TTL、布隆過(guò)濾器類型等。插入數(shù)據(jù)的語(yǔ)法用 put 命令put user_profile, rowkey_001, info:age, 28 put user_profile, rowkey_001, info:name, 張三 put user_profile, rowkey_001, data:score, 95這里的邏輯是向 user_profile 表的 rowkey_001 行寫(xiě)入 info:age 列值為 28。同一個(gè) RowKey 的多個(gè) put 操作不需要在一個(gè)事務(wù)里執(zhí)行因?yàn)?HBase 的單行操作天然是原子的。查詢數(shù)據(jù)用 get 和 scanget user_profile, rowkey_001 get user_profile, rowkey_001, {COLUMN info:age} scan user_profile, {STARTROW rowkey_001, STOPROW rowkey_002}get 按 RowKey 精確查詢性能最高。scan 按范圍掃描STARTROW 是起始行包含STOPROW 是結(jié)束行不包含。scan 時(shí)可以指定列族、列、版本數(shù)、緩存大小等參數(shù)控制掃描的數(shù)據(jù)量。刪除數(shù)據(jù)的語(yǔ)法delete user_profile, rowkey_001, info:age deleteall user_profile, rowkey_001delete 刪除指定列deleteall 刪除整行。注意HBase 的刪除操作只是打一個(gè)刪除標(biāo)記并不會(huì)立即物理刪除數(shù)據(jù)要到 Major Compaction 時(shí)才會(huì)真正清理。4.3 常用過(guò)濾器與參數(shù)調(diào)優(yōu)HBase 的查詢能力遠(yuǎn)不止 get 和 scan過(guò)濾器Filter才是擴(kuò)展查詢能力的關(guān)鍵。單列值過(guò)濾器可以按列的值過(guò)濾行鍵前綴過(guò)濾器可以按 RowKey 前綴匹配分頁(yè)過(guò)濾器可以實(shí)現(xiàn)分頁(yè)查詢列值比較器可以配合多種比較操作符使用。使用過(guò)濾器時(shí)要注意大多數(shù)過(guò)濾器會(huì)導(dǎo)致全表掃描性能開(kāi)銷非常大。在千萬(wàn)級(jí)以上數(shù)據(jù)的表上執(zhí)行帶過(guò)濾器的 scan耗時(shí)會(huì)明顯拉長(zhǎng)。如果業(yè)務(wù)上確實(shí)需要按非 RowKey 列查詢建議考慮引入二級(jí)索引方案或者設(shè)計(jì)好 RowKey 讓查詢直接命中。關(guān)于 Shell 之外的開(kāi)發(fā)接口最常用的是 Java API。核心類包括 Connection、Table、Put、Get、Scan、ResultScanner。讀寫(xiě)頻繁的代碼段要復(fù)用 Connection 和 Table 實(shí)例因?yàn)閯?chuàng)建連接和獲取 Table 對(duì)象是重量級(jí)操作頻繁創(chuàng)建對(duì)性能影響很大。連接參數(shù)建議設(shè)置合理的超時(shí)時(shí)間和 RPC 重試次數(shù)。Connection conn ConnectionFactory.createConnection(conf); Table table conn.getTable(TableName.valueOf(user_profile)); Put put new Put(Bytes.toBytes(rowkey_001)); put.addColumn(Bytes.toBytes(info), Bytes.toBytes(age), Bytes.toBytes(28)); table.put(put);這段代碼完成了之前 Shell 里的寫(xiě)入操作注意所有維度信息都要通過(guò) Bytes 工具類轉(zhuǎn)成字節(jié)數(shù)組。讀寫(xiě)完畢記得關(guān)閉 Table 和 Connection。5. RowKey 設(shè)計(jì)HBase 性能的分水嶺5.1 設(shè)計(jì)原則與常見(jiàn)風(fēng)格RowKey 設(shè)計(jì)是整個(gè) HBase 建模中最關(guān)鍵的環(huán)節(jié)沒(méi)有之一。RowKey 決定了數(shù)據(jù)分布方式、查詢效率、寫(xiě)入吞吐甚至決定了 Region 會(huì)不會(huì)出現(xiàn)熱點(diǎn)。第一條原則是長(zhǎng)度盡量短。RowKey 是每行數(shù)據(jù)的唯一標(biāo)識(shí)長(zhǎng)度越長(zhǎng)存儲(chǔ)開(kāi)銷和比較開(kāi)銷越大。雖然 HBase 沒(méi)有強(qiáng)制限制 RowKey 長(zhǎng)度但實(shí)踐中建議控制在幾十字節(jié)以內(nèi)。一個(gè)常見(jiàn)的誤區(qū)是使用業(yè)務(wù)主鍵直接拼接比如訂單號(hào)加用戶 ID 再加時(shí)間戳結(jié)果 RowKey 長(zhǎng)度到了上百字節(jié)。第二條原則是散列與有序的平衡。HBase 按 RowKey 字典序排列單調(diào)遞增的 RowKey比如純時(shí)間戳?xí)屗袑?xiě)入都集中在最后一個(gè) Region 上形成寫(xiě)熱點(diǎn)。解決方案是在 RowKey 前綴加入散列字段比如用戶 ID 反轉(zhuǎn)、MD5 前綴截取。第三條原則是查詢與存儲(chǔ)的權(quán)衡。設(shè)計(jì) RowKey 時(shí)要考慮最常用的查詢場(chǎng)景。比如訂單表最常用的查詢是按用戶 ID 查最近訂單RowKey 可以設(shè)計(jì)成“反轉(zhuǎn)用戶 ID 時(shí)間戳倒序”這樣同一用戶的所有訂單在物理存儲(chǔ)上連續(xù)按用戶查詢時(shí)只需一次 scan。業(yè)務(wù)上常見(jiàn)的 RowKey 風(fēng)格有這么幾種反轉(zhuǎn)補(bǔ)零法把用戶 ID 反轉(zhuǎn)比如 12345 變成 54321保證前綴分散MD5 散列法取 MD5 的前幾位作為前綴打散寫(xiě)入時(shí)間戳倒序法配合前綴使新數(shù)據(jù)排在前部適合讀取最新數(shù)據(jù)的場(chǎng)景。每種方案都有適用的場(chǎng)景需要結(jié)合業(yè)務(wù)特點(diǎn)選型。5.2 熱點(diǎn)問(wèn)題寫(xiě)入傾斜與讀取傾斜熱點(diǎn)主要指兩種情況寫(xiě)入熱點(diǎn)和讀取熱點(diǎn)。寫(xiě)入熱點(diǎn)是因?yàn)?RowKey 單調(diào)遞增所有新寫(xiě)入的數(shù)據(jù)都被路由到同一個(gè)或少數(shù)幾個(gè) Region 上。應(yīng)對(duì)方法就是加鹽Salting在 RowKey 前面拼一個(gè)隨機(jī)數(shù)或取模值比如把訂單號(hào)散列到 10 個(gè)桶桶號(hào)作為前綴。散列之后寫(xiě)入壓力均勻分散到 10 個(gè) Region 上。讀取熱點(diǎn)是大部分查詢都命中了某幾個(gè)固定 RowKey 或固定范圍導(dǎo)致這些 Region 所在節(jié)點(diǎn)的負(fù)載過(guò)高。這種情況單純調(diào) RowKey 解決不了需要從業(yè)務(wù)層面做緩存、分流或者把熱數(shù)據(jù)的 RowKey 進(jìn)一步細(xì)分比如按時(shí)間維度拆分。另一個(gè)經(jīng)常被忽略的細(xì)節(jié)RowKey 的前綴如果固定不變后面跟的業(yè)務(wù)字段即使長(zhǎng)度很大也會(huì)因?yàn)樽值湫蚺判驅(qū)е戮植繑?shù)據(jù)堆積。理想的設(shè)計(jì)是所有 RowKey 的前幾位都有足夠的離散度讓數(shù)據(jù)的分布盡可能均勻。5.3 預(yù)分區(qū)與桶表設(shè)計(jì)實(shí)操創(chuàng)建一張新表時(shí)默認(rèn)只有一個(gè) Region數(shù)據(jù)量上來(lái)后才慢慢分裂。如果一開(kāi)始就知道這張表數(shù)據(jù)量會(huì)很大建議直接預(yù)分區(qū)。預(yù)分區(qū)的操作是建表時(shí)指定 SPLITS 參數(shù)把 RowKey 范圍切割成多個(gè)區(qū)間。比如按 RowKey 前綴 0000-9999 均勻切割成 100 個(gè) Regioncreate big_table, info, {NUMREGIONS 100, SPLITALGO HexStringSplit}HexStringSplit 算法會(huì)把 RowKey 看成一串十六進(jìn)制字符均勻切割成給定數(shù)量的 Region。另一種手工指定關(guān)鍵邊界的方式是直接在 SPLITS 參數(shù)里寫(xiě)清楚區(qū)間邊界數(shù)組。預(yù)分區(qū)的意義在于數(shù)據(jù)寫(xiě)入一開(kāi)始就能均勻分布到多個(gè) RegionServer避免前期數(shù)據(jù)集中在一個(gè)節(jié)點(diǎn)上。同時(shí)還能避免高峰期自動(dòng)分裂帶來(lái)的性能抖動(dòng)。預(yù)分區(qū)數(shù)量不是越多越好Region 過(guò)多會(huì)帶來(lái)元數(shù)據(jù)管理開(kāi)銷和合并頻率上升的問(wèn)題。經(jīng)驗(yàn)值是按照未來(lái)半年到一年的數(shù)據(jù)量預(yù)估讓每個(gè) Region 的數(shù)據(jù)量在 5-10GB 之間比較合適。如果業(yè)務(wù)的 RowKey 分布不均勻還可以用桶表設(shè)計(jì)把 RowKey 先散列到 N 個(gè)桶每個(gè)桶對(duì)應(yīng)一個(gè)固定 Region 范圍。這樣即使原始 RowKey 分布不均經(jīng)過(guò)桶的散列后也能均勻分布。6. 核心參數(shù)配置與性能調(diào)優(yōu)6.1 內(nèi)存規(guī)劃RegionServer 堆內(nèi)堆外分配HBase 的內(nèi)存配置直接決定了讀寫(xiě)性能的上限。RegionServer 的內(nèi)存主要分為三塊堆內(nèi)內(nèi)存中的 MemStore 占比、BlockCache 占比以及堆外內(nèi)存用于網(wǎng)絡(luò)通信和部分?jǐn)?shù)據(jù)讀寫(xiě)。典型的堆內(nèi)存分配方式是把可用堆內(nèi)存按比例劃分給 MemStore 和 BlockCache但兩者之間需要預(yù)留一定余量避免某一塊被占滿后無(wú)法動(dòng)態(tài)調(diào)配。相關(guān)參數(shù)hbase.regionserver.global.memstore.size默認(rèn) 0.4表示 MemStore 占堆內(nèi)存的最大比例。寫(xiě)入密集場(chǎng)景可以調(diào)高到 0.5 以上但要注意留給 BlockCache 的空間不能過(guò)小。hbase.regionserver.global.memstore.size.lower.limit默認(rèn) 0.38表示觸發(fā)強(qiáng)制刷寫(xiě)的 MemStore 比例下限。hfile.block.cache.size默認(rèn) 0.4表示 BlockCache 占堆內(nèi)存的比例。實(shí)際調(diào)優(yōu)時(shí)可以用公式估算RegionServer 堆內(nèi)存 MemStore BlockCache 其他默認(rèn)約 20% 余量。如果寫(xiě)入壓力大MemStore 給 0.5、BlockCache 給 0.3如果讀取壓力大MemStore 給 0.3、BlockCache 給 0.5??偟脑瓌t是不能讓兩者相加接近 1否則 GC 壓力會(huì)非常大。堆外內(nèi)存方面HBase 默認(rèn)使用堆外內(nèi)存用于 RPC 層面的 ByteBuffer 緩沖效果是減少 GC 壓力和數(shù)據(jù)拷貝次數(shù)。一般不需要手動(dòng)改保持默認(rèn)配置即可。6.2 關(guān)鍵寫(xiě)路徑參數(shù)與讀路徑參數(shù)寫(xiě)路徑的核心參數(shù)控制的是 MemStore 何時(shí)刷寫(xiě)、WAL 同步方式、Region 分裂閾值。這些參數(shù)直接決定了寫(xiě)入吞吐量和數(shù)據(jù)安全性。hbase.hregion.memstore.flush.size默認(rèn) 128MB單個(gè) MemStore 大小達(dá)到該值后觸發(fā)刷寫(xiě)。hbase.regionserver.global.memstore.size默認(rèn) 0.4RegionServer 所有 Region 的 MemStore 總大小達(dá)到堆內(nèi)存比例后觸發(fā)強(qiáng)制刷寫(xiě)。hbase.regionserver.wal.codecWAL 文件編碼相關(guān)配置默認(rèn)使用WALCellCodec。hbase.wal.provider默認(rèn)使用AsyncFSWALProvider異步刷寫(xiě)模式性能更好。hbase.hregion.max.filesize默認(rèn) 10GB單個(gè) Region 的 Store 文件總大小超過(guò)該值觸發(fā)分裂。讀路徑的核心參數(shù)控制的是 BlockCache 容量、掃描緩存大小、RPC 超時(shí)等。hbase.client.scanner.cachingscan 時(shí)每次 RPC 請(qǐng)求返回給客戶端的行數(shù)默認(rèn) 100。值太大會(huì)增加單次 RPC 的數(shù)據(jù)量但能減少 RPC 次數(shù)值太小會(huì)導(dǎo)致頻繁請(qǐng)求性能下降。hbase.client.scanner.blockcachescan 時(shí)是否使用 BlockCache默認(rèn) true。全表掃描類場(chǎng)景建議關(guān)閉因?yàn)榇罅繑?shù)據(jù)涌入會(huì)污染緩存。hbase.rpc.timeoutRPC 超時(shí)時(shí)間默認(rèn) 60000ms高延遲場(chǎng)景需要適當(dāng)調(diào)大。6.3 GC 調(diào)優(yōu)與 JVM 參數(shù)最佳實(shí)踐HBase 是 Java 系服務(wù)GC 調(diào)優(yōu)是性能優(yōu)化的重要一環(huán)。RegionServer 節(jié)點(diǎn)上如果頻繁發(fā)生 Full GC整個(gè)節(jié)點(diǎn)的讀寫(xiě)請(qǐng)求都會(huì)出現(xiàn)卡頓表現(xiàn)為明顯的毛刺延遲。常見(jiàn)的 GC 問(wèn)題集中在 MemStore 上的對(duì)象過(guò)多導(dǎo)致年輕代回收頻繁。優(yōu)化方向是調(diào)整新生代大小讓短生命周期對(duì)象盡量在 Minor GC 階段就被回收合理使用 CMS 或 G1 垃圾回收器。對(duì)于 HBase 2.x 版本G1 是比較推薦的選擇。核心參數(shù)可以這樣設(shè)置export HBASE_REGIONSERVER_OPTS-Xms16g -Xmx16g -XX:UseG1GC -XX:MaxGCPauseMillis100Xms 和 Xmx 設(shè)置為相同值避免堆內(nèi)存動(dòng)態(tài)伸縮帶來(lái)的性能損失。MaxGCPauseMillis 設(shè)置目標(biāo)停頓時(shí)間G1 會(huì)盡量控制在這個(gè)范圍內(nèi)。如果 Full GC 仍然頻繁需要檢查是否有大對(duì)象分配、MemStore 是否過(guò)大、HFile 過(guò)多導(dǎo)致的合并壓力。一個(gè)容易忽視的地方HDFS 的 DataNode 進(jìn)程和 RegionServer 進(jìn)程混布在同一臺(tái)機(jī)器上時(shí)兩者的內(nèi)存和磁盤(pán) I/O 會(huì)互相爭(zhēng)搶。實(shí)際部署時(shí)要根據(jù)物理機(jī)內(nèi)存合理分配總內(nèi)存 64GB 的機(jī)器可以給 RegionServer 分配 24GB給 DataNode 分配 8GB其余留給操作系統(tǒng)頁(yè)緩存。6.4 讀寫(xiě)分離與熱點(diǎn)數(shù)據(jù)緩存HBase 層面沒(méi)有嚴(yán)格意義上的讀寫(xiě)分離但可以通過(guò)參數(shù)和架構(gòu)手法實(shí)現(xiàn)近似效果。一個(gè)常用方式是使用 Buffer 機(jī)制寫(xiě)入時(shí)批量提交降低 RPC 次數(shù)讀取時(shí)增加 BlockCache 命中率減少磁盤(pán) I/O。對(duì)于熱點(diǎn)數(shù)據(jù)的讀取可以在業(yè)務(wù)層加一層緩存。比如按用戶 ID 查詢的數(shù)據(jù)可以把查詢結(jié)果緩存在應(yīng)用層或 Redis 中緩存過(guò)期時(shí)間按數(shù)據(jù)更新頻率設(shè)置。HBase 底層的 BlockCache 也可以優(yōu)化如果某類數(shù)據(jù)查詢頻率極高可以通過(guò)參數(shù)調(diào)整讓這類數(shù)據(jù)的 Block 更長(zhǎng)時(shí)間留在緩存里。另一個(gè)實(shí)踐是把熱數(shù)據(jù)和冷數(shù)據(jù)拆分到不同表或不同列族。熱數(shù)據(jù)保留高版本數(shù)、短 TTL冷數(shù)據(jù)保留低版本數(shù)、長(zhǎng) TTL。這樣熱數(shù)據(jù)的查詢和寫(xiě)入都不受冷數(shù)據(jù)量大、合并頻繁的影響。7. 常見(jiàn)問(wèn)題與故障排查7.1 集群?jiǎn)?dòng)失敗與元數(shù)據(jù)異常集群?jiǎn)?dòng)失敗是每個(gè)人都會(huì)遇到的第一個(gè)坎。最常見(jiàn)的癥狀是啟動(dòng)后 HMaster 進(jìn)程自動(dòng)退出或者 RegionServer 注冊(cè)不上。排查第一步就是看日志。HBase 的日志放在$HBASE_HOME/logs目錄下HMaster 的日志文件是hbase-hmaster-xxx.logRegionServer 的是hbase-regionserver-xxx.log。打開(kāi)日志文件快速搜索 ERROR 和 FATAL 級(jí)別的信息。常見(jiàn)原因之一是 ZooKeeper 連接失敗日志里會(huì)出現(xiàn)ConnectionLossException或KeeperException。檢查 ZooKeeper 服務(wù)是否正常hbase.zookeeper.quorum配置的地址是否可達(dá)端口是否被防火墻攔截。另一個(gè)常見(jiàn)問(wèn)題是 HDFS 目錄權(quán)限不對(duì)。HBase 首次啟動(dòng)需要在 HDFS 上創(chuàng)建根目錄如果hbase.rootdir指向的路徑?jīng)]有寫(xiě)權(quán)限啟動(dòng)必然失敗。解決辦法是先在 HDFS 上mkdir -p并授權(quán)。元數(shù)據(jù)異常是更嚴(yán)重的問(wèn)題。HBase 的元數(shù)據(jù)存放在hbase:meta表中如果這個(gè)表的數(shù)據(jù)損壞整個(gè)集群都無(wú)法正常工作。日常運(yùn)維要監(jiān)控hbase:meta表所在 RegionServer 的健康狀態(tài)定期檢查 Region 是否卡在 RITRegion In Transition狀態(tài)。RIT 狀態(tài)卡住時(shí)用命令hbase hbck檢查并修復(fù)。7.2 讀寫(xiě)性能驟降的排查思路讀寫(xiě)性能驟降是運(yùn)維中最常見(jiàn)也最頭疼的問(wèn)題。引發(fā)原因通常有幾個(gè)GC 異常、磁盤(pán) I/O 打滿、Region 熱點(diǎn)、合并風(fēng)暴。GC 異常通過(guò)監(jiān)控面板看 RegionServer 的 GC 時(shí)間和頻率如果 Full GC 頻繁按前面說(shuō)的 JVM 調(diào)優(yōu)方向處理。磁盤(pán) I/O 打滿用iostat或dstat看磁盤(pán)的讀寫(xiě)速率和等待時(shí)間。如果磁盤(pán)持續(xù)高負(fù)載重點(diǎn)檢查是否有大合并任務(wù)在執(zhí)行必要時(shí)把 Major Compaction 挪到低峰期。Region 熱點(diǎn)檢查是否某個(gè) Region 的讀寫(xiě)請(qǐng)求量遠(yuǎn)高于其他 Region。熱點(diǎn)通常由 RowKey 設(shè)計(jì)不合理引起先查詢各 Region 的請(qǐng)求分布。合并風(fēng)暴RegionServer 上的 HFile 數(shù)量突然激增大量合并任務(wù)同時(shí)執(zhí)行。這種情況一般發(fā)生在大量寫(xiě)入后MemStore 頻繁刷寫(xiě)導(dǎo)致 HFile 文件數(shù)過(guò)多。排查思路可以按順序走先看監(jiān)控面板確認(rèn)問(wèn)題節(jié)點(diǎn)再看 GC 日志確認(rèn) JVM 狀態(tài)再用系統(tǒng)命令查看磁盤(pán)和網(wǎng)絡(luò) I/O最后分析 HBase 層的 Region 分布和請(qǐng)求量。7.3 數(shù)據(jù)不一致與 Region 遷移故障處理HBase 的數(shù)據(jù)不一致問(wèn)題相對(duì)少見(jiàn)但一旦出現(xiàn)影響很大。常見(jiàn)場(chǎng)景是在 Region 遷移或故障恢復(fù)期間客戶端訪問(wèn)到舊路由導(dǎo)致查詢失敗。這類問(wèn)題通常通過(guò)重試機(jī)制解決客戶端配置了合理的 RPC 重試次數(shù)后短暫的路由抖動(dòng)是可以容忍的。但如果持久不一致就需要檢查元數(shù)據(jù)表和實(shí)際 Region 分布是否匹配。Region 遷移故障的典型表現(xiàn)是某個(gè) Region 長(zhǎng)時(shí)間停留在 RIT 狀態(tài)。處理辦法是先檢查該 Region 涉及的 RegionServer 是否在線日志中有沒(méi)有異常堆棧。必要時(shí)手動(dòng)觸發(fā)assign操作assign region_encoded_name如果持續(xù)失敗檢查 ZooKeeper 中的節(jié)點(diǎn)狀態(tài)以及在 HDFS 上確認(rèn)對(duì)應(yīng) Region 的目錄是否完整。7.4 監(jiān)控體系搭建與告警策略沒(méi)有監(jiān)控就去運(yùn)維 HBase等于閉著眼睛開(kāi)車。必要的基礎(chǔ)監(jiān)控指標(biāo)包括集群層面RegionServer 在線狀態(tài)、HMaster 存活狀態(tài)、Region 總數(shù)、RIT 數(shù)量。節(jié)點(diǎn)層面CPU、內(nèi)存、磁盤(pán) I/O、網(wǎng)絡(luò)帶寬。HBase 內(nèi)部MemStore 大小、BlockCache 命中率、HFile 文件數(shù)、寫(xiě)延遲、讀延遲、Region 熱點(diǎn)分布、GC 暫停時(shí)間。推薦的監(jiān)控方案是把 HBase 的指標(biāo)暴露出來(lái)用主流監(jiān)控系統(tǒng)采集再配置告警規(guī)則。關(guān)鍵告警項(xiàng)包括RegionServer 宕機(jī)、HMaster 主備切換、RIT 數(shù)量大于 0、寫(xiě)阻塞或讀阻塞超過(guò)閾值、GC 暫停時(shí)間超過(guò) 5 秒、磁盤(pán)使用率超過(guò) 80%。有個(gè)運(yùn)維心得告警規(guī)則不是越多越好告警噪音太大會(huì)導(dǎo)致真正的問(wèn)題被淹沒(méi)。核心告警控制在 10 條以內(nèi)每條告警都要附帶排查文檔鏈接讓值班同學(xué)拿到告警就能按步驟處理。8. HBase 調(diào)優(yōu)與優(yōu)化的進(jìn)階路線8.1 基于業(yè)務(wù)特征的讀寫(xiě)優(yōu)化策略調(diào)優(yōu)不能脫離業(yè)務(wù)場(chǎng)景空談。同一套參數(shù)寫(xiě)入密集的日志場(chǎng)景和讀密集的查詢場(chǎng)景優(yōu)化方向完全是相反的。寫(xiě)入密集場(chǎng)景適當(dāng)增大 MemStore 刷寫(xiě)閾值減少小文件數(shù)量。合理配置 HDFS 的寫(xiě)入緩沖提升寫(xiě)吞吐。避免單個(gè) Region 同時(shí)接收過(guò)多寫(xiě)入請(qǐng)求預(yù)分區(qū)要到位??梢园葱桕P(guān)閉 WAL但必須清楚數(shù)據(jù)丟失的風(fēng)險(xiǎn)。讀密集場(chǎng)景增大 BlockCache 比例提升緩存命中率。減少 HFile 數(shù)量壓縮文件必要時(shí)手動(dòng)觸發(fā) Major Compaction。設(shè)計(jì)高效的 RowKey讓查詢盡量走精確 Get 而非全表 Scan。對(duì)熱點(diǎn)查詢?cè)黾訕I(yè)務(wù)層緩存。8.2 表結(jié)構(gòu)層面的優(yōu)化手段表結(jié)構(gòu)的優(yōu)化主要圍繞列族、壓縮、TTL 展開(kāi)。列族數(shù)量一張表不建議設(shè)置太多列族HBase 官方建議 1-3 個(gè)。列族過(guò)多會(huì)導(dǎo)致每個(gè) MemStore 都要占用內(nèi)存Region 的數(shù)據(jù)分布邏輯變復(fù)雜。壓縮算法HBase 支持 GZ、LZO、SNAPPY 等壓縮算法。不同算法的壓縮比和 CPU 消耗不同。SNAPPY 是平衡壓縮比和 CPU 開(kāi)銷的常用選擇。設(shè)置壓縮的語(yǔ)句示例alter user_profile, {NAME info, COMPRESSION SNAPPY}壓縮設(shè)置修改后后續(xù)的 HFile 文件會(huì)按新算法生成但已有的舊文件不會(huì)立即轉(zhuǎn)換需要觸發(fā)一次 Major Compaction 才能真正生效。TTL 設(shè)置HBase 支持按列族設(shè)置數(shù)據(jù)的存活時(shí)間超時(shí)數(shù)據(jù)會(huì)被自動(dòng)清理。日志類數(shù)據(jù)建議設(shè)置 TTL既能控制存儲(chǔ)成本又能減少數(shù)據(jù)量大帶來(lái)的合并壓力。create log_table, {NAME info, TTL 604800}上面例子表示 info 列族的數(shù)據(jù)保存 7 天604800 秒到期后自動(dòng)過(guò)期。8.3 數(shù)據(jù)遷移與備份恢復(fù)方案HBase 數(shù)據(jù)遷移的常用工具有很多但不同場(chǎng)景有不同選型Export 工具把表數(shù)據(jù)導(dǎo)出為 SequenceFile適合跨版本或跨集群遷移。缺點(diǎn)是速度較慢適合中小表。CopyTable直接跨集群拷貝數(shù)據(jù)支持在線操作但對(duì)網(wǎng)絡(luò)帶寬要求高。Snapshot對(duì)表做快照基于快照做 bulkload 或克隆。這是目前比較推薦的方式速度快且對(duì)在線業(yè)務(wù)影響小。雙寫(xiě)方案在新集群上線初期業(yè)務(wù)層同時(shí)向新舊集群寫(xiě)數(shù)據(jù)讀的時(shí)候先讀新集群回退到舊集群。適合對(duì)遷移窗口要求高的場(chǎng)景。備份層面HBase 的 Snapshot 是最常用的備份方式。定期對(duì)關(guān)鍵業(yè)務(wù)表做快照快照文件放在 HDFS 上不會(huì)影響線上讀寫(xiě)?;謴?fù)時(shí)直接restore_snapshot即可。實(shí)操中建議每日低峰期對(duì)核心表做一次快照快照保留周期根據(jù)業(yè)務(wù)需求設(shè)置。8.4 常見(jiàn)性能優(yōu)化場(chǎng)景實(shí)例復(fù)盤(pán)這里分享一個(gè)模擬項(xiàng)目中的真實(shí)調(diào)優(yōu)案例具備一定的普適性。背景某用戶行為分析系統(tǒng)將用戶行為日志寫(xiě)入 HBase每天新增約 5000 萬(wàn)行單表總量超過(guò) 20 億行。業(yè)務(wù)方要求查詢延遲在 100ms 以內(nèi)。上線初期寫(xiě)入吞吐量指標(biāo)不理想部分時(shí)段寫(xiě)阻塞延遲抖動(dòng)明顯。排查發(fā)現(xiàn)三個(gè)問(wèn)題RowKey 設(shè)計(jì)不合理。原設(shè)計(jì)是用戶ID:時(shí)間戳但用戶 ID 前幾位高度集中導(dǎo)致部分 Region 寫(xiě)入量遠(yuǎn)高于其他節(jié)點(diǎn)形成寫(xiě)熱點(diǎn)。修改為反轉(zhuǎn)用戶ID:時(shí)間戳后熱點(diǎn)消失。HFile 數(shù)量過(guò)多。MemStore 頻繁刷寫(xiě)Minor Compaction 跟不上小文件產(chǎn)生的速度。調(diào)大了刷寫(xiě)閾值同時(shí)關(guān)閉自動(dòng) Major Compaction改為每天凌晨手動(dòng)觸發(fā)一次。BlockCache 命中率偏低。部分報(bào)表場(chǎng)景進(jìn)行全表掃描污染了緩存。把這些掃描任務(wù)改成在專用查詢集群上執(zhí)行線上集群只承載實(shí)時(shí)查詢。經(jīng)過(guò)三天迭代調(diào)優(yōu)后寫(xiě)入吞吐提升了兩倍P99 延遲降到 50ms 以內(nèi)。整個(gè)調(diào)優(yōu)過(guò)程是典型的三步走先解決熱點(diǎn)分布再調(diào)整合并策略最后隔離查詢負(fù)載。9. 經(jīng)驗(yàn)沉淀與建議踩過(guò)的坑多了有些經(jīng)驗(yàn)還是想記錄下來(lái)給后來(lái)人一個(gè)參考。首先是 HBase 的版本選擇不要追新生產(chǎn)環(huán)境用社區(qū)廣泛驗(yàn)證的穩(wěn)定版本即可新版本雖然特性多但遇到的坑需要社區(qū)時(shí)間去填平。其次是監(jiān)控體系一定要在業(yè)務(wù)上線前就搭好不要等出了問(wèn)題才去補(bǔ)監(jiān)控。HBase 調(diào)優(yōu)不是一次性工作它會(huì)隨著數(shù)據(jù)量增長(zhǎng)和業(yè)務(wù)變化持續(xù)進(jìn)行。定期審視 Region 數(shù)量、HFile 文件數(shù)、熱點(diǎn)分布、GC 情況把優(yōu)化變成常態(tài)化機(jī)制比出事再救火有效得多。最后再分享一個(gè)小技巧每次表和 RowKey 設(shè)計(jì)評(píng)審時(shí)花十分鐘按照未來(lái)一年數(shù)據(jù)量模擬一遍寫(xiě)入分布和查詢路徑能提前篩掉大部分設(shè)計(jì)缺陷。這個(gè)習(xí)慣我堅(jiān)持了很多年價(jià)值非常大。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久草九九| 五月天色播网| 成人无码精品1区2区3区免费看| 久久草婷婷丁香网站| 丁香六月综合| 97在线99| 五月丁香六月成人| 九九热精品视频在线观看| 天天色天天搡| 色V狠狠的干| 五月J香蕉婷婷| 日本久久人人| 99热资源在线| 欧美中文五月天| 久热99| av操逼网| 色青青视频| 91婷婷丁香五月| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 色播五月婷婷| 99热这里只有精彩| 色婷久| 五月综合激情视频| 五月婷婷综合色啪首页| 狠狠狠激情网| 亚洲综合干| 六月婷欧美| 69超碰在线| 欧美激情综合| 亚洲综合色婷婷| 天天玩夜夜操| 丁香九月综合| 内射综合网| 婷婷中文字暮| 国产精品丝| 九九色综合| 色六月婷婷| 夜夜做夜夜愛| 色婷婷精品| 久久这里有精品在线观看| 综合激情开心五月| 69婷婷丁香午夜| 国产片天天爽夜夜爽| 天色综合网| 噢美99| 婷婷综合在线| 五月停视频天堂| 99热在线观看| 亚洲综合色婷| 色亭亭九月| 婷婷色影音天| 激情淫乱男女| 久久er视频6| 婷婷操超碰| 香蕉操亚洲| 91狠狠色色丁香婷婷综合久久| 欧美日韩日韩成人| 婷婷香蕉| 色色五月婷婷网| 综合AV网| 婷婷五月丁香欧洲| 婷婷五月天激情文学小说| 99热综合| 亚洲性爱日韩无码| 中文字幕激情综合| 99热18| 亚洲V国产V欧美V久久久久久| 五月丁香综合激情| 国产在线视频1234| AV激情五月| 婷婷欧美色| 丁香五月AV在线| 久久黄色网扯| 成功精品影院| www.夜夜操| 九九黄色网| 青草视频在线观看视频| 婷婷射图五月天| 爱操人妻| 99精品22| 丁香五月天激情视频| 久久五月天黄色五月天色网址| 99亚洲综合| 丁香 婷婷五月| 激情5月天天天| 六月婷婷五月天| 婷婷五月综激情| 色综合丁香| 色五月综合| 香蕉97碰碰碰欧美| 爱性综合网| 美妞av| 五月婷婷开心亚州在线| 色综合综合色| 欧美月久久| 2017狠狠干| 色婷婷成人丁香| 5月婷婷性视频| 婷婷综合视频| 九九9久九9国产视频| 潮汕成人AV片在线| 国产阿姨日皮艹逼内射视频| 婷婷丁香在线| 中文字幕黄色电影网址| 99aese| 激情久久 婷婷| 欧美影院婷婷| AV性爱网| 91免费啪视频| 天堂五月婷婷| 天天日天天干天天操| 91在线看片| 国产成人av在线| 亚洲综合在线丁香五月| 婷婷六月色| 亚洲无aV在线中文字幕 | 色色色com| 五月天婷婷影院| 久色88| 丁香婷婷啪啪啪| AV性爱在线| 丁香五月综合激情久久潮喷| 丁香婷婷五色月| 色五月激情综合| 五月丁香婷婷成人网| 粉嫩av懂色av蜜臀av熟妇| 亚洲欧美另类在线23p| 五月天综合色| 国产亚洲色婷婷99精品| 狠狠操狠狠操| 中文字幕婷婷五月天| 色婷婷六月| 99在线精品免费视频| 天天做天天爱天天搞| 99热综合网| 色色综合网www| 久久99激情| 亚洲区视频| 91传媒无码人妻精| 五月天婷婷成人网| 五月色亚洲| 丁香六月天之亚州热女| www九月婷婷| 激情五月天婷婷视频| 国产精品99久久久久久久女警| 黄网在线免费观看| 欧美一级色| 九九久久精品| 亚洲精品无码一区二区| 色五月五月丁香| 99视频只有精品| 成人短视频在线观看| 日本精品99网站| 99狠狠色| 亚洲无码99| 再綫Av免费視品| 伊人五月综合网| 99热国产精品| 国产成人精品一区二区三区视频 | 激情文学五月丁香六月婷婷| 99九无网码| 色狠狠综合网| 色月视频| 精品动漫 无码av| 成人免费va| 色情五月天导航| 久热只有精品| 伊人影音无码一区二区三区| 四川女人毛多水多A片| 亚洲久久婷婷| 色色色婷婷五月天| 日韩久久成人| 五月丁香六月激情综合| 欧美天天干五月丁香| 老师的粉嫩小又紧水又多A片视频| 亚洲色婷婷网站| 黄色中文字目| 五月丁香婷婷综合久久| 天天 日综合| 深夜婷婷 丁香| 天天摸天天日天天舔| 五月丁香最新| 亚洲成人免费在线| 99热99这里只有精品| 视频一区二区在线| 五月丁香婷婷成人网| 久久三级视频| 超碰操日| 色婷婷电影网| 婷婷久久亚洲| 五月丁香啪啪网| 九九综合| 五月天操逼网| 成人丁香五月婷| 亚洲婷婷免费| 亚洲 综合中文| 日韩精品AV一区二区三区| 丁香伊人综合| 色域五月婷婷丁香| 丁香五月狠狠在线观看| 99热e| 五月丁香婷婷久久| 97自拍99| 国产视频色色色色色色色 | 日本综合久久| 狼人狠狠操| 色婷婷综合网| 日本高清不卡免费一区二区三区| 97人妻碰碰中文无码久热丝袜| 欧美丁香六月在线观看视频| 亚洲成人超碰| 97啪在线观看视频| 日本色色网站| 甈吧vv| 热九九九九| 五月婷婷黄色| 26uuu精品一区二区| 中文字幕成人| 丁香五月天婷婷91| 春色激情| 一本色道久久88综合日韩精品| www.狠狠艹| 一本色道久久综合狠狠躁小说| 思思热再线视频| 成人综合AV| 婷婷视频在线碰| 97婷婷狠狠| 快乐激情五月色婷婷| 大香蕉七区| 内射爽无广熟女亚洲| 五月丁香婷婷深深爱| 69五月天视频| 激情综合青草| 日韩色色色色色| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV| 婷婷99中文字幕| 婷婷色情六月| 玖玖九九9999在线观看视频精品| 97在线99| 亚洲最大成人综合网720P| 中文在线成人| 日本天堂免费99| 综合久久五月| 日日做天天操夜夜爽| 久久九九爽| 欧美日本高清视频99| 亚洲妇女熟BBW| 五月丁香婷婷六月| 国产日产成人亚洲欧美国产VA| 五月刺激丁香月综合| 色综合久久天天综合网| 成人看片网站| 婷婷五月激情丁香| 99久久网站| 人人妻人人澡| 色狠狠综合| 思思久久精品| 六月婷婷综合| 婷婷综合激情| 激情网五月| 色九网| 国产精品色色| 久月婷婷| 五月综合色| 人人摸人人摸| 日韩成人精品中文字幕电影| 五月停性愛| 熟女人妻一区二区三区免费看 | 99爱视频| 婷婷99狠狠躁天天久久久九九九| 日韩中文字幕| 婷婷五月天亚洲综合网| 欧美69色| 大香蕉久久久| 九九这里都是精品| 五月婷婷深深爱| www.日日夜夜.com| 曰韩少妇内射免费播放| 99热最新国内| 日韩在线观看亚洲| 亚洲精品网站色视频| 久久免费试看120秒| 日韩色久| va中文资源在线观看| 五月天婷综合网站| 亚洲精色| 91色综合| 99燥99日| 欧美啪啪网| 婷婷中文网站| eeuss人妻| 色婷婷视频| 开心五月婷婷激情网| av在线色五月丁香婷区久| 丁香五月在线看| 亚洲久久激情| 激情五月婷婷| 天天干天天操天天射| 日本人人干| 99福利导航| 婷婷激情丁香五月婷婷激情丁香五月婷婷 | AA片在线观看视频在线播放| 99热99| 人人性久久| 97干在线视频| 色99热| 午夜爱爱网站| 亚洲情综合五月天| 人人干99| jiqingliuyuetian| 久热免费视频| 99九九综合久久九九| 色波激情五月天| 九九精品在线观看视频6| 色婷婷先锋| 99精品在线播放| 欧美 日韩 成人| 色婷婷狠狠干| 久草a片| 性生生活大片又黄又| 色99婷婷五月天| 综合五月草| 色婷婷偷拍| 婷婷五月天中文字幕| 中文字幕在线观看视频www| 激情五月综亚网| 亚洲五月丁香六月婷婷| 9久热精品在线视频| 99九九这里有免费视频| 午夜无码熟熟妇丰满人妻| 精品综合网在线| 97精品自拍| 快色t v在线入口| 色播五月天激情| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 激情久久四色| 九色91视频| 狠狠狠狠狠狠草| 欧美一级色| 五月色色激情网| 色五月婷婷网| 天天插天天狠| 国产精品成人在线| 色色婷婷五月| 婷婷五月丁香综合| 99热亚洲| 亚洲另类婷婷综合| 激情综合色图| 91美女被操| 五月婷婷狠狠久久| 裸体美女丁香五月天。| 婷婷基地成人五月天| 丁香五月花婷婷开心| 午夜婷婷久久| 超碰在线免费| 婷婷久久丁香五月| 五月天婷婷操逼视频| 激情五月婷婷色色| 思思 热 99| 少妇高潮呻吟A片免费看软件| 99re在线精品视频| www.激情五月| 亚洲激情无码久久| 国产亚洲精品AAAAAAA片| 久久五月综合| 色五月综合网| 99re这里只有精品国产99| 成人看片网站| 九月婷婷综合| 丁香五月天视频| 99色色爰| 天天日天天色| 激情五月天婷婷视频| 99热 精品在线| 色婷婷丁香五月天激情综合网| 欧美精品XXXXBBBB| 激情婷婷另类| 色综合久久无码| 五月丁香龟婷婷| 婷婷综合天堂| 婷婷色情网| 色吧综合网| 伊人婷婷五月天| 99日本在线| 97久久人人操| 日韩成人网站精品久久大全| se色婷婷视频| 看逼中文字幕| 啪啪综合| 久色视频首页| 91精品久| 综合五月婷婷| 亚洲一区先锋影音| 亚州精品成人片| 亚洲天堂大香蕉| 五月婷婷色情| 1024AV视频| 国产美女视频久| 中文精品在| 丁香五月天堂| 色丁香五月综合网| 日韩在线视频中文字幕| 丁香五月婷婷av影院| 天天插天天插天天插| 日韩大片艹艹| 色婷久久| 五月天播播| 色色色色综合网| 亚洲宗合激情| 国产免费AV在线| 玖玖伦理电影| 激情性爱网站| 色婷婷久久| 热热久久99| 九九国产视频| 久久九九经典| 青青久在线视频免费观看| 久久婷婷东京热| 婷婷五月天激情小说| 久久99这里只有精品视频| 成人Av在线大片| 99这里都是精品| 99九九精品视频| 在线观看av网站| 国产精品久久久久久久久久| 超碰93在线观看| 色婷丁香五月| 丁香五月情色| 激情五月综合久久| 波多野结衣不卡AV| 狠狠干,狠狠操| 日本五月婷婷| 五月婷在线| 东京热免费视频网站| 香蕉综合网| 五月婷婷综合视频| 伊人9999| 人妻操逼| 天天爽人人综合免费7799| 丁香五月色色婷| 亚洲九九夜夜| 99热精品在线播放| 伊人激情啪啪| 九九激情| 色情成人五月天| 狠狠操狠狠狠| 99 热| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 综激情网| 午夜婷婷久久| 思思久久精品| 欧美综合激情五月天| 五月丁香| 五月天成人综合| 丁香五月婷婷久久久| 天堂成人A片永久免费网站| 婷婷射图| 九九综合伊人| 色婷婷五月色| 99无码精品| 99成人精品视频| 久热这里精品免费| 六月婷五月丁香| 婷婷五月综合婷婷| 五月丁香六月婷婷亚洲天堂网站| 伊人久热91| 月丁香久久久| 婷婷综合在线视频| 中文字幕激情综合| 99欧州偷拍视频| 大香蕉免费9| 9久热在线视频精品| 色五月婷婷影视| 婷婷亚州综合| 五月婷免费视频| 无码一级片| 亚洲欧洲小视频9| 射琪琪| 蜜乳人妻一区二区三区| 成人毛片在线免费观看| 丁香五月手机在线| 久久草大香蕉| 秋霞午夜理论| 五月天综合婷婷| 99re这里| 狠狠久久婷五月| 色综合丁香| 狠狠干夜夜干| 97超碰,人人舔,人人操,人人摸| 欧美亚洲色色色色| 日本99婷婷| 日韩无码91| 一起草无码| 99热国产精品| 激情五月婷婷综合色播小说| 99这里有精品视频| 久色| 在线日本www| 国产色99| 婷婷久久免费看| 99视频在线观看视频| 免费播放99性爱视频| 五月天亚洲色| 久久九九99| 亚洲国产精品SUV| 欧美色偷偷大香| 国产婷婷五月天| 少妇丁香婷婷 | 大香蕉五月天婷婷| 26uuu欧美日韩| 六月伊人婷婷| 婷婷五月花| 涩五月婷婷| 欧美特大片黄| 久久免费操| 婷婷五月综合在线视频| 精品爆操| 丰满人妻妇伦又伦精品国产| 五月香蕉婷婷| 天天射射夜| www色五月| 99精品成人无码A片观看金桔| 123日本不卡在线| 99在线资源| 99色播| 14色综合婷婷| 99人人看| 天天成人五月天| 久久在线大香蕉| 大学生高潮无套内谢视频| 七七久久婷婷| 色婷婷色五月综合| 色综合色| www综合久久| 激情婷婷五月天网址| 久久久久人妻精品| 午夜天堂啪啪| 九九色精品| 丁香六月无码播放| 被男人添B超爽视频| 9999热在线免费观看| 综合在线丁香五月| 天天爱天天操| AV在线观看网站| 日日操天天| 99热这里只有精品8| 久久99jiu9| 五月天激情美女久久| 久久婷婷六月综合| 亚洲久久日| 国产精品久久久久久五月天加勒比| 超碰在线视屏| 无码人妻激情| 色99自拍| 午夜成人综合| 丁香五月婷婷六月丁香| 五月丁香 狠狠爱| 天天拍久久| 可以免费观看的av| 综合五月婷婷| 九九综合九九| 五月丁香 啪啪| 26uuu精品一区二区| 影音先锋五月天婷婷丁香在线观看| 99久久这里只有精品免费官网| 色婷婷综合久久久久| 五月丁香婷色| 99精品视频免费| 综合狠久久| 九九免费精品在线视频| 深爱激情五月网| 91婷婷在线| 久久99网站| 九洲一级A片| 久久性爱视频| 精品女人九九九| 丁香五月先锋| 亚洲传媒在线观看| 色五月播五月| 婷婷婷久久久| 97干欧美| 五月天婷婷激情网| 亚洲精品久久久无码| 国产裸舞福利资源在线视频| 少妇人妻偷人精品无码视频新浪| 丁香五月婷婷六月婷| 禁欲电影完整版在线播放| 97色五月天| 国产午夜成人免费看片无遮挡| 婷婷国产日本欧美| 东京热五月婷婷| 五月婷婷综合色拍| 成人 九九九九| AV性爱网| 国产激情综合五月久久| 99热在线观看| 天堂婷婷五月在线| 婷婷五月丁香综合瑟瑟| 在线观看婷婷5月| 激情床戏| 国产XXXX搡XXXXX搡麻豆| 96五月丁香熟女| 月色色综合婷婷网| 91美女被操| 欧美激情丁香五月天久久婷婷一区| 亚洲精品字幕在线观看| 99热这里只有精品5| 999热在线视频| 91碰碰碰| 激情综合色播| 成人网站av免费网站推荐| 丁香婷婷基地| 婷婷五月色丁香在线看| 精品久久婷婷| 丁香婷婷大香蕉| 天天肏天天舔AV| 色久丁香五| 97人妻碰碰中文无码久热丝袜| 国外亚洲成AV人片在线观看| 欧美va在线| 欧美日韩91| 性按摩玩人妻HD中文字幕| 99国产在线| 亚洲精品亚洲人成人网| 五月婷婷爽爽爽| 五月天婷婷在线播放| 99热精品在线播放| 秋霞九九无码| 五月天大香蕉| 久久综合五月天| 99精品无码网站| 91九色中文字幕女在线观看| 97人妻超级碰碰碰碰碰| 97se视频在线| 色婷婷五月天激情综合| 91婷婷搞| 91精品久| 亚洲乱码日产精品BD| 精品成人久久久久久久_一二三四视| 五月天婷婷网站| 大香蕉婷婷久久| 天天日天天爱天天噪| 狠狠综合| 欧美日韩成人在线网站| 五月丁香色欲| 大香蕉久操| 精品99在线| 99热的无码| 2023天天日夜夜爽| 丁香婷婷啪啪| 色99在线看| 激情五月丁香五月色| 99热97| 成人视频在线免费播放| 色色哒五月婷婷六月丁香| 五月天色狠狠| 操笔无码| 天天玩天天摸| 久久久18| 99热99精品| 91久久久久久久久久| 日韩啪啪视品| 人妻第九页| 亚洲欧洲另类| 91丨九色丨熟女丰满| 播五月,色五月,开心五月播放器 | 五月婷婷激情综合| www.婷婷五月天| 色七七九九| 亚洲精品永久久久久久| 情趣视频66| 只有精品在线观看| 888精品福利地址| 色99视频| 五月激情啪啪| 日日干五月天婷婷| 蜜乳.comcom| 五月天婷婷黄色视频| 丁香激情网| 超碰在线9| 99色干| 久久人人九九| 先锋五月婷婷丁香草草| 精品成人久久久久久久_一二三四视| 大香蕉五月婷婷| www.henhenl| 久碰久操| 九九热精品| 婷婷五月天Av| 亚洲中文乱字字幕线在永久| 五月丁香激情在线| 色欲久久久久| 99热这里只有精品9| 99九九视频| 婷婷中文字幕网| 操操天堂| 九九碰九九爱97超碰| 一起草AV| 九九热视频精品999| www.色欲丁香婷婷| 久久婷婷色情7777网站| 中文字幕婷婷五月天| 激情99。| 九九热这里只有精品在线观看| 色五月婷婷婷婷| 开心婷婷五月天激情网| 色婷另类| 无码色| AV中文字幕夜夜操b天天摸bb| 五月婷婷精品| 97色在线视频| 四色 爱 婷婷 精品 亚洲 五月天| www.久久av.com| 91精品国产99久久久久久天美| 婷婷五月无码| 久久久婷婷五月天| 99操视频| 婷婷开心综合人妻小说网址| 99热免费在线| 激情婷婷五月| 黄色91在线观看| 51XX午夜影福利| 婷婷成人丁香色情基地30 | 亚洲另类电影| 欧美激情凹凸丁香网| 婷婷五月激情的图片| 亚洲成人免费在线| 国产黄色大片| 五月丁香久人妻中文| 丁香婷婷色五月| 中文字幕成人| 免费播放AV| 九九热色视频| 夜夜久久综合网| 北京熟妇搡BBBB搡BBBB| 狠狠久久婷婷| 亚洲色婷婷网站| 超碰人人射| a级毛片一区二区免费视频| 色哟哟精品| 国产精品激情五月天色婷婷| 天天色粽合合合合合合合| 综合一啪| 五月天婷婷青青| 26uuu欧美日本| 国产探花一片区| 五月丁香在线视频观看| 99免费在线视频| 精品热九九| 婷婷五月天激情四射五月天激情| 色播播五月| 狠狠狠狠狠狠狠狠| 玖玖在线| 99热在线精品观看| 成人精品视频99在线观看免费| 九九精品综合| 色婷婷五月天视频网站| 国产69久久久欧美黑人A片| 97碰久久| 激情综合在线观看| 亚洲精品中文字幕成人片| 6080av| 五月婷婷啪啪| a色色色色色| 玖玖99免费视频| 丁香婷婷久久综合在线| 久久婷婷五月天综合| 色五月av| 欧美狠狠草| 久久伊人婷婷| 色色激情网| 999久久久国产精品| 91丨九色丨老熟女激情| caopeng97日韩| 婷色五月天| 大香蕉啪啪网| 五月天激情图片| 一起草Av| 超碰成人免费| 色婷婷久久久| 日本色五月| 亚洲成人AV在线播放| 国产日韩欧美性爱| www亚洲无码| 五月婷婷啪啪| a色婷婷| 色婷婷丁香五月| 五月婷丁香久久综合| 人妻自慰高清合集| 婷婷五月综合基地| 思思国产99| 久久国产高清| 超碰高清在线| 欧美综合五月丁香六月婷| 色久五月天| 婷婷五月a| 五月天激情婷婷| 久久久久98| 久久只有18视频| 五月天激情黄色小说在线观看| 亚洲12p| 特黄三级片| 亚洲中文字幕网| 亚洲中文字幕在线观看| 日本特黄aaaaa| 色五月综合激情网| 五月婷婷影| 97色欧美| 五月丁香啪啪啪| 嫩草综合网| 大香伊人婷婷影院| 欧美激情五月天| 激情综合网五月婷婷| 免费无码毛片一区二区A片| xxx日本东京热| 五月丁香狠狠爱婷婷综合| 天天爽夜爽| 五月色在线| 亚洲精品无人区| 亚洲热久久| www.99色| 黄色网址五月婷婷| 99热精品在线观看| 婷婷5月天激情综合| 亚洲综合五月天婷婷| 天天干天天操天天拍| 久久婷婷综合拍| 久久婷婷网站| 天天在线天天综合网色| 五月丁香婷婷激情图片| 狠狠丁香| 婷婷丁香亚洲五月天| 999精品久久久久久久| 99在线小视频| 伊人久久五月天| 超碰在线99热| 男人先锋久久| 9久国产精品| 亚洲色婷婷婷婷人人爽| 日本啪啪视频HD| 99精品久久久| RenRenSe在线视频网站| 亚洲第一成人无码A片| 天天射射夜| 日韩在线观看亚洲| 丰满少妇乱A片无码| 五月色婷婷影院| 丁香六月婷婷综合麻豆| 五月 激情视频| 人人操人人妻| 亚洲色网络| 直接看的AV| 欧美五月丁香啪啪响视频| 另类亚洲电影| 超碰av在线| 五月丁香六月婷婷激情网| 色五月婷婷激情五月| 婷婷少妇激情| 色综啪啪| 欧美性生交XXXXX无码小说| 色久激情在线| 国产综合激情五月久久| 97香蕉久久超级碰碰高清版| 色五月丁香91| 日日影院 | 成人精品在线| 综合五月婷婷| 婷婷综合色五月天| 日本本土色网第一区| 丁香五月婷婷欧美激情-中文天堂最新版在线观看| 久久综合久色欧美综合狠狠| 色狠狠色| 97色操| 99热在线观看免费精品| 26UUU在线观看| 国产伦理精品高清在线观看网站一区二区| 久久丝袜婷婷| 97sese婷婷| 婷婷综合中文| 亚洲成人AV电影在线| 九九热精品在线| AV在线资源| 精品人人操| 日本狠狠干| 婷婷五月综合激情免费| 婷婷色色欧美| 日日夜夜小色哥| 五月丁香六月婷婷综合免| av婷婷丁香 六月| 超碰在线99| 美女激情综合| 综合色色网| 97在线/亚洲| 五月丁香婷婷婷激情爱爱| 五月丁香五月丁香五月丁香五月丁香91| 老美AA片| 亚洲精品无人区| 五月天激情美女久久| 欧美S码亚洲码精品M码| 婷婷五月天网| 超碰亚洲欧美| 五月激情久久综合网| 久久久月丁香| 天天干天天爽天天爽| 色色日韩无码| 99精品久久久久久久婷婷久久| 亚洲激情五月丁香久久久久| 婷婷瑟五月天久久综合| 婷婷五月天Av| 婷婷丁香激情五月天色色| 五月丁香色播| 伊人深爱综合| AVDV久久| 久99久热| 亚洲欧美成人在线| 99热久久这里只有精品| 69精品人人人人人人人人人| 五月天色区| 久九男女天堂| 亚洲成人日韩无码精品| 五月 婷 久| 欧美色激情四射| 色九月综合| 色婷婷情片| 无码激情| 日本精品99网站| 中文字幕丰满乱孑伦无码专区| wWw色五月| 99精彩视频在线观看| 国产玖玖资源| 大香蕉婷婷五月| 人妻久久久久久| 99干日日干| 99热日| 这里只有精彩小视频视频网站| 99精品这里只有免费视频| 第一区久久网站| 婷婷五月天天爽| 色婷婷综合视频| 日日影院 | www.九月婷婷丁香.com| www色色com| 四色女婷婷| www.夜夜操| 精品无码久久久久久久久| 教师性爱毛片| 久久九九@| 婷婷五月免费在线| 国产亚洲色婷婷久久99精品91| 久久久激情| 国产三级在线播放| 人妻久久久久| 久久丁香五月婷| 丁香九月婷| 中字幕视频在线永久在线观看免费 | 亚洲综合另类| 欧美,日韩成人在线| 91超级碰在线视频| 婷婷综合五月色播| 欧日韩成人| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 99色色热| 天天色天天爱天天爱天天爱y| 色婷婷免费观看| 久月久在线视频| 成人 在线 日韩| 米奇影视五月天| 色色婷婷丁香| 久久 无毛。| 天天爽—爽| 婷婷五月天天爽| 97在线观视频免费观看| 丁香久久| 日韩无码色色| 琪琪色综合网站| 超碰人人色| 怡红院视频| 亚洲偷| 91日韩在线| 玖玖午夜视频| 五月久久丁香| 婷婷欧美色| 九九热黄色| 丁香六月婷婷久久亚洲天堂| 综合色图区| 五月婷婷婷| 少妇出轨做爰高潮A片| 五月色婷婷在线观看| 婷婷久久精品| 99爱在线| 第四色婷婷色五月| 天天日综合| 色色五月丁香| 日本爆乳片手机在线播放| 精品二区| 狠狠干在线视频| 婷婷激情图片| 91九九| 自拍偷窥99热| 激情五月天色婷婷综合| 79精品视频| 婷婷五月天免费99| 亚洲99视频| 99精品在线播放| 性爱综合网| 五月婷激情| 黄网免费看| 五月激情啪啪啪| 色欧美影院| 色五月婷婷小说亚洲中文字幕组| 偷偷操九九| 色欲AV导航| 免费看片在线观看| 九九精品视频在线6| 密着浓厚中出乚交尾GvG935| 六月丁香婷婷网| 在线观看国产高清视频免费网站| 久久一热免费视频| 天天爱天天爽| 九九视频免费| 伊人无码高清| 天天成人综合| 真实的国产乱XXXX在线91| 亚洲 无码 中文字幕 中出| 日本不卡高字幕在线2019| 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ | 色五月婷婷操逼| 国产 亚洲 在线| 九九Av| 激情五月天久久丁香| 久热免费视频| 伊人婷婷激情| 67久久| 五月性色| 婷婷五月色综合| 六月激情婷婷| 色播五月丁香综合| 91人人看| 五月丁香色综合| 99热永久在线观看| 极品人妻XXXXOOOO| 9这里只有精品| 色五月自偷自拍婷婷婷婷| 久热99热| 五月情四婷婷| 久久ri精品| 九九亚洲视频| 182TV大香蕉| 深爱五月激情| 另类小说五月天激情| 激情五月天情色| 五月丁香综合| 俺五月| 超碰在线观看三级片| 久久婷婷综合五月天| 熟女网站久久| 刘玥av在线| 97 A I色色| 99色视| 日本综合99| 久久久大香蕉| 婷婷五月免费观看| 亚洲成AV人片在线观看| 中文字幕婷婷| 综合在线丁香五月| AV动漫不卡无码免费| 婷婷天堂站| 五月丁香六月激情在线| 丁香九月久久| 香蕉人妻AV久久久久天天| www热久久yy9| 亚洲人人96@| 九月婷婷综合网| 综合色图区| www.婷婷| 色婷五月天亚洲| 五月丁香六月激情综合| 日产精品久久久久久久蜜臀| 天天精品视频免费观看| 777久久综合视频| 激情婷婷综合网| 五月婷婷六月丁香| 饮料下药迷倒漂亮女同事强干| 秋霞学生妹一二级| 9热久久| 99操久久| 五月丁香六月婷婷国产视频| 久久婷婷五月综合97色一本| 五月丁香六月婷婷的女人| 久久99网站| 色婷婷免费观看| www.久久66| 五月婷婷开心深| 色五月婷婷AV| 亚洲精品国产setv| 79精品视频在线观看,| 天堂爱爱| 思思99热这里只有精品| 九月婷婷在线观看| 超碰在线50| 五月天婷婷视频| www99在线观看视频| 密桃激情五月天综合网| 热无码A∨| 五月丁香婷婷色色色| 五月婷婷五月天| www.五月.com| 天天操夜夜操| 在线观看中文字幕| 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ | 五月丁香婷婷色播无码| 在线中文AV| 久久五月天综合| 色婷婷久久综合| 99精品综合视频| 五月婷婷综合在线视频小说| 情五月亚洲婷婷| 思思99热在线| 91久久久久久| 91啪啪视频| 激情久久久久久久久| 亚洲狠狠婷婷| 97超碰9久热婷婷热| 婷婷成人五月天| 能看的AV| 丁香五月电影| 玖玖资源在线视频| 久99综合婷婷| 婷婷久久五月| 99在线精品视频| 婷婷综合色| www,com,五月色色| 五月婷婷偷拍| 26.uuu丁香五月婷婷| 色五月天丁香婷婷| 久婷五月| 最新久久网址| 99热在线精品观看| 国产免费一区二区在线A片视频| 五月丁香激情综合啪啪| 国产免费AV在线| 丁香六月激情四射| www.91色| 狠狠综合| 大香蕉520| 亚洲成人综合在线| 国产精品涩涩涩视频网站| 国产偷人爽久久久久久老妇APP| 九九成人视频| 久9精品视频| 六月丁香av| 久热大香蕉| 五月天婷婷成人网| 国产精品电| www91色网站| 99热丁香五月| 9999三级片| 影音先锋xfplay资源男人网| 婷婷激情五月天天天开心| 婷婷五月丁香基| 久热a| 99综合网| 超碰九九热| 这里只有精品视频在线| 色色色综合网| 中文字幕在线视频播放| 久久女人九九| 色婷婷丁香| 婷婷五月在线综合| 秋霞三及片| 深爱激情五月天| www.婷婷五月| 五月开心播播网| 婷婷五月丁香色播| 婷香五月| 婷婷五月天成人影片| 久草五月天| 久久婷婷视频| 精品国产AV色一区二区深夜久久| 综合 蜜月 婷婷| 欧美日韩成人免费在线| 五月丁香婷婷综合激情基地| 九九热手机在线视频| 久超超碰| 婷婷久久大香蕉| 亚洲无码AV片| 97精品自拍| www,五月天激情| 丁香五月亚综合图片| 综合色五月天| 操日本99| 婷婷操久久| 毛片新网地| 伊人玖玖精品| 男同91| 99热热这里只精品996小说| 欧美色播综合在线观看| 五月激情偷拍| 狠狠色婷婷| 丁香激情五月天| 久久综合热17c| 婷婷五月天色| 婷婷六月中文字幕| 97色色色| 久久er99热精品一区二区| 91精品久| 狠狠干2007| 67194中文字幕| 人妻第九页| 99ri精品视频在线观看| 色婷婷综合网站| 99精品在这里| www.yw色| 色久五月| 96丁香六月婷婷蜜桃综合久久| 就去色色五月丁香婷婷久久久| 五月丁香日本一抹本| 色五月婷婷影院| 成人.在线日韩| 五月开心久久| 五月丁香在线精品| 99热网站| www久久久久| 99爱精品视频| 五月天婷婷小说| 丁香六月婷婷综合激情欧美| 亚洲色综久久五月| 国产亚洲精品久久久久久郑州| 综合色网站| 五月丁香中文字幕| 无码日本精品XXXXXXXXX| 亚洲综合成人网| 婷婷激情人妻| 丁香五月天堂亚洲社区| 四色女婷婷| 五月天婷婷无码| 538任你爽| 国产五月天欧美色| 香港九九六区八区99| 影音先锋女人av鲁色资源网小说免费| 久操无码| 欧美婷婷色| 九九亚洲小视频| 国产AV一区二区三区最新精品| 91干| 婷婷激情性爱| 人人搡人人| 99色色视频| 99ri6在线视频| VfJxEwPH| 超级久久久| 天天狠狠色综合| 色99最新网址| 亚洲婷婷丁香五月视频| 无码少妇高潮喷水A片免费| 久久机热这里只有精品免费视频 | www狠狠| 五月欧美色播| 丁香五月影院| 99热精品在线| 中文字幕在线资源| 99视频内射三四| 99热只有| 婷婷五月天改成什么了| 国产成人片| 人妻videos人妻高清|