分布式數(shù)據(jù)庫HBase 課件 單元5 HBaseAPI;單元6 HBase模式設(shè)計(jì)與優(yōu)化_第1頁
分布式數(shù)據(jù)庫HBase 課件 單元5 HBaseAPI;單元6 HBase模式設(shè)計(jì)與優(yōu)化_第2頁
分布式數(shù)據(jù)庫HBase 課件 單元5 HBaseAPI;單元6 HBase模式設(shè)計(jì)與優(yōu)化_第3頁
分布式數(shù)據(jù)庫HBase 課件 單元5 HBaseAPI;單元6 HBase模式設(shè)計(jì)與優(yōu)化_第4頁
分布式數(shù)據(jù)庫HBase 課件 單元5 HBaseAPI;單元6 HBase模式設(shè)計(jì)與優(yōu)化_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

單元5HBaseAPI目錄01HBaseAPI概述與生態(tài)定位02JavaAPI環(huán)境搭建與配置03HBase表管理操作精講04HBase數(shù)據(jù)操作實(shí)踐05過濾器機(jī)制與查詢優(yōu)化06綜合案例與開發(fā)規(guī)范01HBaseAPI概述與生態(tài)定位HBaseAPI的核心功能與作用大數(shù)據(jù)生態(tài)中的角色HBaseAPI是應(yīng)用程序與HBase數(shù)據(jù)庫交互的核心,在大數(shù)據(jù)生態(tài)中扮演著重要角色,能充分發(fā)揮HBase分布式、高可伸縮性和高性能的特性。過濾器功能過濾器可根據(jù)列族、列、版本等條件對數(shù)據(jù)進(jìn)行過濾,降低網(wǎng)絡(luò)傳輸壓力,提高查詢效率,如RowFilter可篩選出符合匹配條件的行。表管理功能數(shù)據(jù)增刪改查開發(fā)者可通過HBaseAPI創(chuàng)建、刪除和修改HBase中的表,設(shè)置表的屬性和配置,如創(chuàng)建命名空間、判斷表格是否存在等操作。支持插入新數(shù)據(jù)、更新已有數(shù)據(jù)、刪除數(shù)據(jù)以及按行鍵進(jìn)行查詢,實(shí)現(xiàn)對數(shù)據(jù)的高效管理,例如使用Put類插入數(shù)據(jù),Get類獲取數(shù)據(jù)。HBaseJavaAPI核心類與接口用于配置HBase連接,可對HBase運(yùn)行時(shí)的環(huán)境進(jìn)行配置,通過靜態(tài)方法create()獲得實(shí)例,如Configurationconfiguration=HBaseConfiguration.create()。HBaseConfiguration類用于管理HBase數(shù)據(jù)庫的表信息,如創(chuàng)建或刪除表、列出表項(xiàng)等,需通過Connection.getAdmin()方法獲取子對象來操作。Admin接口代表與HBase集群的連接,能查找到HMaster,定位HRegion位置并緩存,Table和Admin實(shí)例也從該接口實(shí)例中獲取數(shù)據(jù)。Connection接口主要用于和HBase中的表進(jìn)行通信,可獲取、添加、刪除、掃描表中的數(shù)據(jù),如使用put()方法添加值,get()方法獲取單元值。Table接口02JavaAPI環(huán)境搭建與配置Maven工程創(chuàng)建與依賴配置打開IDEA,在菜單欄選擇“File→New→Project”,新建工程類型選“Maven”,設(shè)置名稱為“HBaseDemo”,存儲(chǔ)路徑按需設(shè)置,添加組名為“com.bigdata.hbase”。新建Maven工程1在工程左側(cè)結(jié)構(gòu)的pom.xml中添加hbase-client依賴,版本為2.4.6。添加完成后打開Maven界面,單擊“更新”按鈕更新依賴。添加依賴2HBase集群連接配置實(shí)戰(zhàn)將core-site.xml(位于虛擬機(jī)主節(jié)點(diǎn)下的/usr/local/hadoop-3.1.4/etc/hadoop/)和hbase-site.xml(位于虛擬機(jī)主節(jié)點(diǎn)下的/opt/hbase-2.4.6/conf/)放入resources目錄,也可將Hbase的perties導(dǎo)入工程的resource目錄。配置文件準(zhǔn)備在IDEA中新建連接類,命名為“HBaseConnect”,在該類中添加連接HBase的代碼,運(yùn)行代碼,若結(jié)果符合預(yù)期則說明連接成功。新建連接類單擊此處添加文本,簡明扼要地闡述您的觀點(diǎn)。根據(jù)需要可酌情增減文字,以便觀者準(zhǔn)確地理解您傳達(dá)的思想。單擊此處添加文本具體內(nèi)容,簡明扼要地闡述您的觀點(diǎn)。根據(jù)需要可酌情增減文字,以便觀者準(zhǔn)確地理解您傳達(dá)的思想。單擊此處添加文本具體內(nèi)容代碼示例03HBase表管理操作精講命名空間與表創(chuàng)建方法該方法的主要參數(shù)是namespace,即命名空間名稱。在代碼中,通過傳入該參數(shù)構(gòu)建命名空間描述,如NamespaceDescriptor.create(namespace)。createNamespace()參數(shù)配置在創(chuàng)建命名空間時(shí),首先要獲取Admin對象,然后使用NamespaceDescriptor.Builder來構(gòu)建命名空間描述。例如,可通過builder.addConfiguration("user","atguigu")添加需求,最后調(diào)用admin.createNamespace(builder.build())完成創(chuàng)建。若命名空間已存在,會(huì)捕獲IOException并輸出提示。createNamespace()實(shí)現(xiàn)邏輯命名空間與表創(chuàng)建方法創(chuàng)建表格時(shí),先判斷是否有至少一個(gè)列族以及表格是否已存在。若條件滿足,獲取Admin對象,使用TableDescriptorBuilder和ColumnFamilyDescriptorBuilder構(gòu)建表格和列族描述,添加參數(shù)如setMaxVersions(5),最后調(diào)用admin.createTable(tableDescriptorBuilder.build())創(chuàng)建表格。createTable()實(shí)現(xiàn)邏輯此方法的參數(shù)包括namespace(命名空間名稱)、tableName(表格名稱)和可變參數(shù)columnFamilies(列族名稱)。通過這些參數(shù)來確定表格的命名空間、名稱和列族信息。createTable()參數(shù)配置表結(jié)構(gòu)修改與刪除操作修改表格列族版本時(shí),先判斷表格是否存在。若存在,獲取Admin對象和原表格描述,使用TableDescriptorBuilder和ColumnFamilyDescriptorBuilder構(gòu)建新的表格和列族描述,通過columnFamilyDescriptorBuilder.setMaxVersions(version)修改版本,最后調(diào)用admin.modifyTable(tableDescriptorBuilder.build())完成修改。關(guān)鍵步驟包括獲取原表格描述、創(chuàng)建新的描述建造者、修改列族版本和更新表格描述。例如,使用TableDescriptorBuilder.newBuilder(descriptor)獲取舊表格描述信息,避免創(chuàng)建新的表格描述。modifyTable()調(diào)整列族版本modifyTable()關(guān)鍵步驟表結(jié)構(gòu)修改與刪除操作刪除表格前,先判斷表格是否存在。若存在,獲取Admin對象,調(diào)用admin.disableTable(tableName1)將表格標(biāo)記為不可用,再調(diào)用admin.deleteTable(tableName1)刪除表格。deleteTable()禁用后刪除表01關(guān)鍵步驟是先禁用表格再刪除,這是HBase刪除表格的必要流程。若不先禁用,直接刪除會(huì)拋出異常。deleteTable()關(guān)鍵步驟02表狀態(tài)檢查與異常處理isTableExists()方法用于判斷表格是否存在,在創(chuàng)建、修改、刪除表格等操作前都可使用。例如,在創(chuàng)建表格時(shí),先調(diào)用該方法判斷表格是否已存在,避免重復(fù)創(chuàng)建。isTableExists()應(yīng)用場景1該方法通過獲取Admin對象,調(diào)用admin.tableExists(TableName.valueOf(namespace,tableName))判斷表格是否存在,最后關(guān)閉Admin對象并返回結(jié)果。isTableExists()實(shí)現(xiàn)邏輯2在涉及與HBase交互的操作中,如創(chuàng)建命名空間、判斷表格是否存在等,可能會(huì)拋出IOException??赏ㄟ^try-catch塊捕獲異常,在catch塊中進(jìn)行相應(yīng)處理,如輸出錯(cuò)誤信息或進(jìn)行重試操作。IOException容錯(cuò)機(jī)制設(shè)計(jì)304HBase數(shù)據(jù)操作實(shí)踐數(shù)據(jù)插入與更新的Put類應(yīng)用Put類的addColumn()方法可向指定列族和列限定符添加列值,還能添加帶時(shí)間戳的列值,以此實(shí)現(xiàn)多版本數(shù)據(jù)寫入。例如addColumn(byte[]family,byte[]qualifier,longts,byte[]value)方法。addColumn()實(shí)現(xiàn)多版本數(shù)據(jù)寫入1使用Put對象插入數(shù)據(jù)時(shí),會(huì)先向HBase集群發(fā)送RPC請求,得到響應(yīng)后將Put類數(shù)據(jù)序列化傳給集群,集群節(jié)點(diǎn)接收數(shù)據(jù)后執(zhí)行添加操作。RPC請求流程分析2精準(zhǔn)查詢與范圍掃描的實(shí)現(xiàn)Get類主要針對單行數(shù)據(jù)進(jìn)行精準(zhǔn)查詢,而Scan類側(cè)重于對一定范圍內(nèi)的數(shù)據(jù)進(jìn)行掃描查詢,應(yīng)用場景有所不同。兩者差異對比Get類用于獲取表中的行數(shù)據(jù),通過指定行鍵和列族、列標(biāo)識(shí)符進(jìn)行精準(zhǔn)的單行檢索,如addColumn(byte[]family,byte[]qualifier)指定列族和列。Get類單行檢索Scan類可實(shí)現(xiàn)范圍查詢,通過setStartRow(byte[]startRow)和setStopRow(byte[]stopRow)設(shè)定掃描的起始和結(jié)束行鍵,從而獲取指定范圍的數(shù)據(jù)。Scan類范圍查詢多版本數(shù)據(jù)讀取與結(jié)果解析使用getCells()方法可以遍歷Result對象,Result對象表示HBase查詢的結(jié)果,包含符合條件的數(shù)據(jù)集合,通過遍歷可獲取其中的數(shù)據(jù)。getCells()遍歷Result對象1CellUtil工具類的克隆方法如cloneValue(cell)、cloneRow(cell)等,可用于從Cell對象中提取行鍵、列族、列名、值等信息,方便對查詢結(jié)果進(jìn)行解析。CellUtil工具類克隆方法解析205過濾器機(jī)制與查詢優(yōu)化RowFilter與PrefixFilter實(shí)戰(zhàn)使用RowFilter結(jié)合BinaryComparator可精確篩選出具有特定行鍵的行。例如篩選出行鍵為002的行數(shù)據(jù),通過創(chuàng)建RowFilter對象并設(shè)置比較操作符和比較器,將其應(yīng)用于Scan對象,能高效定位所需行數(shù)據(jù)。RowFilter行鍵精確匹配PrefixFilter可匹配出帶有固定前綴的行。如篩選出帶有rw前綴的行,只需創(chuàng)建PrefixFilter對象并傳入前綴字節(jié)數(shù)組,添加到Scan對象中,即可快速過濾出符合前綴條件的行,提升查詢效率。PrefixFilter行前綴過濾RowFilter與PrefixFilter實(shí)戰(zhàn)在代碼中,先連接HBase,獲取Table對象和Scan對象,創(chuàng)建相應(yīng)的過濾器并設(shè)置到Scan對象上,最后通過Table的getScanner方法獲取結(jié)果集進(jìn)行數(shù)據(jù)處理。如RowFilter示例:Filterrf=newRowFilter(CompareFilter.CompareOp.EQUAL,newBinaryComparator("002".getBytes()));scan.setFilter(rf)。實(shí)戰(zhàn)代碼示例復(fù)合過濾器與服務(wù)端執(zhí)行原理FilterList可通過組合多個(gè)過濾器實(shí)現(xiàn)復(fù)雜的篩選邏輯,支持AND(MUST_PASS_ALL)和OR(MUST_PASS_ONE)兩種關(guān)系。例如將RowFilter和ValueFilter組合,可同時(shí)對行鍵和列值進(jìn)行篩選。FilterList組合邏輯01帶有過濾器條件的RPC查詢請求會(huì)把過濾器分發(fā)到各個(gè)RegionServer,在服務(wù)端進(jìn)行過濾操作,這樣可以減少不必要的數(shù)據(jù)傳輸,降低網(wǎng)絡(luò)壓力,提高查詢性能。服務(wù)端過濾優(yōu)勢02服務(wù)端接收到帶有過濾器的查詢請求后,根據(jù)過濾器的條件對本地?cái)?shù)據(jù)進(jìn)行篩選,只將滿足條件的數(shù)據(jù)返回給客戶端,避免了大量無效數(shù)據(jù)的傳輸,提升了系統(tǒng)的整體效率。執(zhí)行原理解析03ValueFilter與列值條件篩選示例代碼:Filtervf=newValueFilter(CompareFilter.CompareOp.LESS,newSubstringComparator("100"));scan.setFilter(vf);通過這樣的代碼可實(shí)現(xiàn)對商品價(jià)格區(qū)間的篩選。實(shí)際代碼演示在電商場景中,若要篩選價(jià)格低于100元的商品,可使用ValueFilter結(jié)合SubstringComparator對商品價(jià)格列進(jìn)行過濾。創(chuàng)建ValueFilter對象,設(shè)置比較操作符和比較器,應(yīng)用到Scan對象上進(jìn)行查詢。商品價(jià)格區(qū)間過濾案例SubstringComparator可用于字符串子串的比較,在ValueFilter中使用能篩選出值滿足特定子串條件的單元格。如篩選出具有l(wèi)ucy子串的值,可創(chuàng)建ValueFilter并設(shè)置比較操作符和SubstringComparator。SubstringComparator應(yīng)用06綜合案例與開發(fā)規(guī)范用戶管理系統(tǒng)表設(shè)計(jì)與CRUD使用JavaAPI創(chuàng)建名為“user_info”的表,并定義列族“basic_info”。代碼中需獲取Admin對象,通過TableDescriptorBuilder構(gòu)建表描述,添加列族描述后創(chuàng)建表。表創(chuàng)建代碼演示使用JavaAPI查詢表中的數(shù)據(jù),創(chuàng)建Get對象,添加列族和列名,讀取數(shù)據(jù)并處理結(jié)果,驗(yàn)證數(shù)據(jù)的正確性。條件查詢代碼演示插入示例數(shù)據(jù),如用戶名、密碼、郵箱和電話號(hào)碼。創(chuàng)建Put對象,添加列族、列名和值,使用Table對象的put方法寫入數(shù)據(jù)。數(shù)據(jù)插入代碼演示電商商品過濾查詢最佳實(shí)踐使用JavaAPI創(chuàng)建名為“products”的表,并定義列族“info”。插入商品ID、名稱、價(jià)格和描述等示例數(shù)據(jù),為后續(xù)查詢做準(zhǔn)備。表創(chuàng)建與數(shù)據(jù)插入創(chuàng)建一個(gè)過濾器,僅選擇價(jià)格低于100元的商品。使用ValueFilter和SubstringComparator等,定義過濾條件。過濾器創(chuàng)建使用帶有過濾器的查詢來獲取滿足條件的商品列表。創(chuàng)建Scan對象,設(shè)置過濾器,通過Table對象的getScanner方法獲取結(jié)果,驗(yàn)證查詢結(jié)果。過濾查詢實(shí)現(xiàn)謝謝匯報(bào)人:WPS單元6HBase模式設(shè)計(jì)與優(yōu)化目錄01Schema概念與HBase特性02HBaseSchema設(shè)計(jì)原則03高級(jí)設(shè)計(jì)技巧實(shí)戰(zhàn)04數(shù)據(jù)分區(qū)與壓縮優(yōu)化05索引與查詢性能提升06綜合實(shí)踐與案例01Schema概念與HBase特性Schema的定義與數(shù)據(jù)庫演變Schema是數(shù)據(jù)庫的結(jié)構(gòu)化框架,用于描述數(shù)據(jù)庫中的對象關(guān)系,可視為數(shù)據(jù)庫的“藍(lán)圖”或“結(jié)構(gòu)圖”,由一系列Schema對象表示。Schema的定義01在關(guān)系型數(shù)據(jù)庫如Oracle、MySQL等中,Schema通常包含表、列、主鍵、索引等對象,使用標(biāo)準(zhǔn)SQL語言創(chuàng)建,數(shù)據(jù)結(jié)構(gòu)較為固定。關(guān)系型數(shù)據(jù)庫中的Schema02NoSQL數(shù)據(jù)庫的Schema更加靈活,不同類型有不同的主要Schema對象,如文檔數(shù)據(jù)庫的集合和索引、鍵值數(shù)據(jù)庫的鍵和值等,以適應(yīng)多樣化的數(shù)據(jù)存儲(chǔ)需求。NoSQL數(shù)據(jù)庫中的Schema03Schema為數(shù)據(jù)存儲(chǔ)提供結(jié)構(gòu),不同數(shù)據(jù)庫類型的Schema設(shè)計(jì)影響數(shù)據(jù)的組織、存儲(chǔ)和訪問方式,是數(shù)據(jù)管理的基礎(chǔ)。Schema在數(shù)據(jù)管理中的核心作用04HBase半結(jié)構(gòu)化模式特點(diǎn)01關(guān)系型數(shù)據(jù)庫有表、列等對象;HBase有命名空間、表、列族、列限定符和行鍵等。與其他數(shù)據(jù)庫相比,HBase的Schema更靈活。02HBase表由列族組成,列族下的列可動(dòng)態(tài)添加,行不需要有相同列集合,且列不強(qiáng)制要求數(shù)據(jù)類型,所有數(shù)據(jù)以字節(jié)數(shù)組存儲(chǔ)。03這種模式使HBase在處理大規(guī)模數(shù)據(jù)時(shí)性能強(qiáng),能在不預(yù)先完整定義表結(jié)構(gòu)的情況下存儲(chǔ)數(shù)據(jù),適應(yīng)復(fù)雜多變的數(shù)據(jù)場景。不同數(shù)據(jù)庫的Schema對象對比列族與列的動(dòng)態(tài)性半結(jié)構(gòu)化模式優(yōu)勢HBaseSchema創(chuàng)建方法無論是Shell命令還是JavaAPI,都能實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建表,可根據(jù)業(yè)務(wù)需求靈活調(diào)整表結(jié)構(gòu),提高開發(fā)效率和系統(tǒng)適應(yīng)性。動(dòng)態(tài)創(chuàng)建表的優(yōu)勢先初始化HBase配置,建立連接;若表不存在則創(chuàng)建表并指定列族;創(chuàng)建Put實(shí)例添加數(shù)據(jù),最后將數(shù)據(jù)插入表中。通過JavaAPI創(chuàng)建Schema以博客系統(tǒng)為例,使用create命令定義表和列族,如create'BlogPosts','AuthorInfo','PostContent','PostMeta';用put命令寫入數(shù)據(jù)。通過HBaseShell創(chuàng)建Schema02HBaseSchema設(shè)計(jì)原則訪問模式與性能權(quán)衡讀取密集型應(yīng)用可選擇緊湊型列族,提高數(shù)據(jù)壓縮率,減少存儲(chǔ)空間,如金融數(shù)據(jù)查詢場景;寫入密集型應(yīng)用適合稀疏型列族,便于快速插入和更新數(shù)據(jù),像日志記錄系統(tǒng)。讀寫密集型場景的列族選擇讀取密集型場景可增加緩存容量,降低讀取延遲;寫入密集型場景可優(yōu)化緩存刷新策略,避免緩存溢出,如電商系統(tǒng)在促銷活動(dòng)期間的寫入優(yōu)化。緩存優(yōu)化方案需平衡讀寫性能,混合型應(yīng)用要合理分配列族類型,根據(jù)業(yè)務(wù)需求和數(shù)據(jù)特點(diǎn)調(diào)整緩存策略,以實(shí)現(xiàn)整體性能最優(yōu)。性能權(quán)衡要點(diǎn)行鍵設(shè)計(jì)的四大鐵律唯一性原則在HBase中,若插入相同RowKey,原數(shù)據(jù)會(huì)被覆蓋(版本為1時(shí)),如交易系統(tǒng)中訂單ID作為RowKey必須唯一。熱點(diǎn)問題案例若Region1數(shù)據(jù)是Region2的5倍,會(huì)導(dǎo)致Region1訪問頻率高,影響所在機(jī)器其他Region,合理設(shè)計(jì)RowKey可避免此類問題。散列性原則長度控制原則設(shè)計(jì)的RowKey應(yīng)均勻分布在各節(jié)點(diǎn),避免熱點(diǎn)問題。如按時(shí)間戳遞增的RowKey可能導(dǎo)致數(shù)據(jù)堆積,可采用加鹽、哈希等方法解決。建議RowKey長度為10-100字節(jié),過長會(huì)影響HFile存儲(chǔ)效率和MemStore緩存利用率,如1000萬行數(shù)據(jù),100字節(jié)的RowKey將占用近1G空間。列族規(guī)劃與存儲(chǔ)效率HBase官方推薦每個(gè)表列族數(shù)量為1-3個(gè),過多會(huì)增加內(nèi)存消耗和磁盤I/O操作,如電商平臺(tái)可設(shè)商品信息、用戶評價(jià)和銷售數(shù)據(jù)3個(gè)列族。列族數(shù)量規(guī)劃列族名稱應(yīng)盡量簡短,因?yàn)槠浯鎯?chǔ)在每個(gè)單元格中,過長會(huì)增加存儲(chǔ)需求和帶寬消耗,如庫存管理系統(tǒng)可用“stk”“trn”作列族名。命名規(guī)范對于寫入量大的列族,應(yīng)分配更多內(nèi)存資源,可通過設(shè)置MemStore刷新閾值調(diào)節(jié)寫入和讀取性能平衡,如創(chuàng)建表時(shí)為不同列族指定不同閾值。MemStore配置03高級(jí)設(shè)計(jì)技巧實(shí)戰(zhàn)行鍵散列化:加鹽與反轉(zhuǎn)在電商訂單系統(tǒng)中,若行鍵按訂單生成時(shí)間遞增,新訂單數(shù)據(jù)會(huì)集中在一個(gè)RegionServer,如某熱門促銷日,大量訂單數(shù)據(jù)堆積,導(dǎo)致該節(jié)點(diǎn)負(fù)載過高,出現(xiàn)數(shù)據(jù)傾斜。電商訂單數(shù)據(jù)傾斜問題1通過在訂單行鍵前添加隨機(jī)前綴,如用字母a-d作為鹽,將原本集中在同一Region的訂單數(shù)據(jù)分散到4個(gè)不同Region。例如,原行鍵為“order0001”,加鹽后變?yōu)椤癮-order0001”等,使寫操作吞吐量理論上提升4倍。加鹽解決數(shù)據(jù)傾斜2對于固定格式的行鍵,如訂單編號(hào),反轉(zhuǎn)后可增加隨機(jī)性。如訂單編號(hào)“123456”反轉(zhuǎn)為“654321”,避免因編號(hào)開頭相同導(dǎo)致的數(shù)據(jù)熱點(diǎn)問題。反轉(zhuǎn)優(yōu)化行鍵3動(dòng)態(tài)列與稀疏存儲(chǔ)日志系統(tǒng)中,不同類型的日志可能包含不同的字段,如系統(tǒng)日志、用戶操作日志等,數(shù)據(jù)結(jié)構(gòu)靈活多變,傳統(tǒng)固定列的存儲(chǔ)方式難以適應(yīng)。日志系統(tǒng)的數(shù)據(jù)特點(diǎn)稀疏存儲(chǔ)使得只有實(shí)際存在數(shù)據(jù)的列才會(huì)被存儲(chǔ),節(jié)省存儲(chǔ)空間。如某些日志記錄可能只有部分字段有值,其他字段為空,在HBase中不會(huì)為這些空字段分配存儲(chǔ)空間。稀疏存儲(chǔ)的優(yōu)勢在HBase中,動(dòng)態(tài)列允許在運(yùn)行時(shí)隨時(shí)添加新列。例如,日志系統(tǒng)中,可根據(jù)不同的日志類型動(dòng)態(tài)添加“操作類型”“錯(cuò)誤代碼”等列,無需預(yù)先定義表結(jié)構(gòu)。動(dòng)態(tài)列的靈活性MOB特性與大數(shù)據(jù)對象在HBase中直接存儲(chǔ)圖像、文檔等大文件會(huì)面臨性能問題,因?yàn)镠Base單元格大小限制為10MB,使用大對象(MOB)特性時(shí)可擴(kuò)展到50MB,大文件存儲(chǔ)會(huì)超出限制。大數(shù)據(jù)對象存儲(chǔ)挑戰(zhàn)01MOB特性將超過設(shè)定閾值的數(shù)據(jù)作為大對象存儲(chǔ)在專用的HDFS文件里,HBase表中僅存儲(chǔ)指向這些大對象的指針。例如,當(dāng)圖像文件大小超過閾值,會(huì)存儲(chǔ)在HDFS,HBase表記錄其指針。MOB特性原理02在列族級(jí)別通過設(shè)置IS_MOB為true和定義MOB_THRESHOLD來啟用MOB特性。如在存儲(chǔ)用戶頭像的列族中,設(shè)置合適的閾值,可高效存儲(chǔ)大尺寸圖像文件。MOB特性的配置與應(yīng)用0304數(shù)據(jù)分區(qū)與壓縮優(yōu)化預(yù)分區(qū)與負(fù)載均衡根據(jù)行鍵的范圍進(jìn)行預(yù)分區(qū),可將相似的數(shù)據(jù)存儲(chǔ)在同一節(jié)點(diǎn)。例如在電商系統(tǒng)中,按商品ID范圍預(yù)分區(qū),能提高特定商品數(shù)據(jù)的查詢效率?;谛墟I范圍的預(yù)分區(qū)1利用哈希算法對行鍵進(jìn)行處理,使數(shù)據(jù)均勻分布在各個(gè)Region。如使用MD5算法對用戶ID哈希后預(yù)分區(qū),避免數(shù)據(jù)熱點(diǎn)?;诠K惴ǖ念A(yù)分區(qū)2當(dāng)Region數(shù)據(jù)量達(dá)到一定閾值時(shí),自動(dòng)進(jìn)行分裂擴(kuò)展??赏ㄟ^設(shè)置hbase.hregion.max.filesize參數(shù),控制Region的最大大小,實(shí)現(xiàn)自動(dòng)擴(kuò)展。Region自動(dòng)擴(kuò)展策略3壓縮算法選型指南Snappy算法解壓/壓縮速度快,占用CPU少,但壓縮率相對較低。適用于對讀寫性能要求高、對存儲(chǔ)空間要求相對較低的熱數(shù)據(jù)場景。Snappy算法性能GZIP算法壓縮率高,但解壓/壓縮速度慢,更消耗CPU。適合冷數(shù)據(jù)存儲(chǔ),如歷史數(shù)據(jù)歸檔場景。GZIP算法性能LZ4算法的壓縮率和LZO相近,但解壓/壓縮速度更快。在需要快速解壓數(shù)據(jù)的場景中表現(xiàn)出色。LZ4算法性能對于實(shí)時(shí)讀寫頻繁的業(yè)務(wù),優(yōu)先選擇Snappy;對于長期存儲(chǔ)且對空間要求高的業(yè)務(wù),可選用GZIP;而對解壓速度要求極高的場景,LZ4是較好的選擇。場景化選型建議TTL與數(shù)據(jù)生命周期管理TTL(Time-To-Live)可設(shè)置數(shù)據(jù)的存活時(shí)間,到期后數(shù)據(jù)自動(dòng)刪除。在HBase中,可通過設(shè)置列族的TTL屬性實(shí)現(xiàn)。TTL自動(dòng)過期機(jī)制01在金融系統(tǒng)中,將超過一定時(shí)間的交易數(shù)據(jù)設(shè)置TTL,到期后自動(dòng)歸檔到冷存儲(chǔ)。如設(shè)置一年前的交易數(shù)據(jù)自動(dòng)過期,釋放存儲(chǔ)空間。金融數(shù)據(jù)歸檔案例02通過TTL實(shí)現(xiàn)數(shù)據(jù)生命周期管理,可節(jié)省存儲(chǔ)空間,提高查詢性能,同時(shí)符合數(shù)據(jù)合規(guī)性要求。數(shù)據(jù)生命周期管理優(yōu)勢0305索引與查詢性能提升二級(jí)索引構(gòu)建方法論查詢商品時(shí),先查二級(jí)索引表獲取唯一ID列表,再根據(jù)列表查原始商品表獲取完整信息,跳過全表掃描,提高查詢效率。查詢流程優(yōu)化以電商商品檢索為例,原始商品表以商品唯一ID為行鍵,存儲(chǔ)商品屬性。二級(jí)索引表行鍵設(shè)為商品名稱,將原始表中商品名稱

溫馨提示

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

最新文檔

評論

0/150

提交評論