一種基于HBase的數(shù)據(jù)存儲(chǔ)方法和設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種基于HBase的數(shù)據(jù)存儲(chǔ)方法和設(shè) 備。
【背景技術(shù)】
[0002] 隨著通信技術(shù)的發(fā)展,數(shù)據(jù)業(yè)務(wù)詳單的數(shù)量呈爆發(fā)性增長(zhǎng)趨勢(shì)。目前各大運(yùn)營(yíng) 商采用數(shù)據(jù)庫(kù)或文件系統(tǒng)的方式來(lái)存儲(chǔ)用戶的詳細(xì)話單(以下簡(jiǎn)稱詳單),并提供詳單的查 詢;或者通過(guò)整合數(shù)據(jù)庫(kù)技術(shù)與文件系統(tǒng)技術(shù)來(lái)實(shí)現(xiàn)詳單的混合存儲(chǔ)和查詢。
[0003] 但是當(dāng)詳單的數(shù)據(jù)量達(dá)到TB級(jí)甚至PB級(jí)別時(shí),目前采用的數(shù)據(jù)庫(kù)或文件系統(tǒng)將 無(wú)法在如此大數(shù)據(jù)量的情況下支持高并發(fā)的詳單查詢。
[0004]HBase(HadoopDatebase)作為一個(gè)基于Hadoop之上的高可靠性、高性能、面向 列、可伸縮的分布式存儲(chǔ)數(shù)據(jù)庫(kù),適合被引入到詳單存儲(chǔ)查詢場(chǎng)景中來(lái),替代原有數(shù)據(jù)庫(kù)或 文件系統(tǒng)的方式。在引入HBase技術(shù)替代數(shù)據(jù)庫(kù)或文件系統(tǒng)存儲(chǔ)詳單后,整個(gè)詳單存儲(chǔ)系 統(tǒng)由一個(gè)服務(wù)器集群組成。
[0005] 而HBase的運(yùn)行需要包含Client組件、Master組件、RegionServer組件、 Zookeeper組件和HDFS組件。
[0006] 其中,Client(事件)組件:包含訪問(wèn)HBase的接口,Client維護(hù)著一些cache(緩 存),加快對(duì)HBase的訪問(wèn),比如Region(區(qū)域)的位置信息等。
[0007]Master(主機(jī))組件:為RegionServer分配Region;負(fù)責(zé)RegionServer的負(fù)載 均衡;發(fā)現(xiàn)失效的RegionServer,并重新分配其上的Region;負(fù)責(zé)HDFS上的垃圾文件回 收;處理schema更新請(qǐng)求等。
[0008]RegionServer(區(qū)域服務(wù))組件:RegionServer維護(hù)Master分配給它的Region, 處理對(duì)這些Region的10請(qǐng)求;負(fù)責(zé)切分在運(yùn)行過(guò)程中變得過(guò)大的Region。
[0009] 其中,Client訪問(wèn)HBase上數(shù)據(jù)的過(guò)程并不需要Master組件參與(尋址訪問(wèn)需要 Zookeeper組件和RegionServer組件,數(shù)據(jù)讀寫訪問(wèn)RegionServer組件),Master僅僅 維護(hù)著Table(表格)和Region(區(qū)域)中的元數(shù)據(jù)信息,負(fù)載很低。
[0010] Zookeeper組件:保證集群中只有一個(gè)Master激活;存C目錄表的尋址入口;實(shí) 時(shí)監(jiān)控RegionServer的狀態(tài),將RegionServer的上線和下線信息實(shí)時(shí)通知給Master; 存儲(chǔ)HBase的schema,包括有哪些表,每個(gè)表有哪些列簇。
[0011]HDFS組件:Hadoop的分布式文件系統(tǒng),用于存儲(chǔ)分析和查詢所需的數(shù)據(jù)。
[0012] 需要說(shuō)明的是,HBase的詳單數(shù)據(jù)加載流程為:當(dāng)HBase需要進(jìn)行詳單數(shù)據(jù)加載 時(shí),HBaseClient首先根據(jù)一條記錄的RowKey找到對(duì)應(yīng)的Region和RegionServer(需 要說(shuō)明的是,RegionServer中包含多個(gè)Region,而每一個(gè)Region對(duì)應(yīng)一個(gè)DateNode)。
[0013] 其次,向該RegionServer提交寫請(qǐng)求,RegionSever找到目標(biāo)Region,檢查插入 詳單的數(shù)據(jù)格式,根據(jù)客戶端指定的版本作為該條記錄的數(shù)據(jù)版本;
[0014] 再次,將該條記錄寫入Hlog,同時(shí)寫入該Region的MemStore。
[0015] 需要說(shuō)明的是,當(dāng)MemStore超過(guò)一定大小時(shí),HBase調(diào)用HDFSClient寫文件系 統(tǒng),由HDFSClient向NameNode申請(qǐng)新的block,NameNode返回用來(lái)存儲(chǔ)副本的Data Node列表,HBase根據(jù)NameNode返回用來(lái)存儲(chǔ)副本的DataNode列表,將詳單數(shù)據(jù)分別 備份存儲(chǔ)在不同的DataNode,其中,備份的一個(gè)DataNode與該Region屬于同一個(gè)物理 節(jié)點(diǎn),而存儲(chǔ)詳單數(shù)據(jù)的其他DataNode可以是與該Region對(duì)應(yīng)的RegionServer屬于同 一個(gè)物理節(jié)點(diǎn)中的其他DataNode,還可以是與該Region屬于不同物理節(jié)點(diǎn)中的其他Data Node。
[0016] 在實(shí)際應(yīng)用中,當(dāng)服務(wù)器集群的某個(gè)DataNode宕機(jī)(在大規(guī)模集群情況下不可避 免)后,與該DataNode對(duì)應(yīng)的Region將被分配到其他DataNode上,而HBase是根據(jù)所有 RegionServer的負(fù)載情況,將巖機(jī)DataNode對(duì)應(yīng)的Region分配到負(fù)載較輕的DataNode 上,這樣就引出了一個(gè)問(wèn)題:HBase將巖機(jī)DataNode對(duì)應(yīng)的Region分配至新的DataNode 上之后,使得Region在訪問(wèn)原DataNode上的詳單數(shù)據(jù)時(shí),出現(xiàn)跨網(wǎng)絡(luò)訪問(wèn)DataNode的 情況,不僅使得訪問(wèn)詳單數(shù)據(jù)的速度降低,而且消耗大量的系統(tǒng)資源,降低系統(tǒng)性能。
【發(fā)明內(nèi)容】
[0017] 本發(fā)明實(shí)施例提供了一種基于HBase的數(shù)據(jù)存儲(chǔ)方法和設(shè)備,用于解決目前 HBase在將巖機(jī)DataNode對(duì)應(yīng)的Region分配至新的DataNode上之后,使得Region在訪 問(wèn)原DataNode上的詳單數(shù)據(jù)時(shí),出現(xiàn)跨網(wǎng)絡(luò)訪問(wèn)DataNode的情況,導(dǎo)致訪問(wèn)詳單數(shù)據(jù)的 速度降低、系統(tǒng)資源消耗大,且系統(tǒng)性能降低的問(wèn)題。
[0018] 一種基于HBase的數(shù)據(jù)存儲(chǔ)方法,包括:
[0019] 控制設(shè)備接收來(lái)自Hadoop數(shù)據(jù)庫(kù)HBase發(fā)送的查詢請(qǐng)求消息,其中,所述查詢請(qǐng) 求消息中包含了發(fā)生故障的區(qū)域服務(wù)器RegionServer中區(qū)域Region的標(biāo)識(shí)信息;
[0020] 所述控制設(shè)備根據(jù)Region的標(biāo)識(shí)信息與多個(gè)數(shù)據(jù)存儲(chǔ)副本數(shù)據(jù)節(jié)點(diǎn)DateNode 的標(biāo)識(shí)信息之間的對(duì)應(yīng)關(guān)系,確定所述發(fā)生故障的Region的標(biāo)識(shí)信息對(duì)應(yīng)的多個(gè)數(shù)據(jù)存 儲(chǔ)副本DateNode的標(biāo)識(shí)信息;
[0021] 所述控制設(shè)備向所述HBase發(fā)送查詢響應(yīng)消息,以便于所述HBase根據(jù)接收到的 所述查詢響應(yīng)消息,重新選擇新的Region,并將所述發(fā)生故障的Region內(nèi)存儲(chǔ)的數(shù)據(jù)轉(zhuǎn)移 至所述新的Region內(nèi);
[0022] 其中,所述新的Region是所述控制設(shè)備確定的多個(gè)數(shù)據(jù)存儲(chǔ)副本DateNode的 標(biāo)識(shí)信息中,除了與所述發(fā)生故障的Region的標(biāo)識(shí)信息對(duì)應(yīng)的Region屬于同一個(gè)物理節(jié) 點(diǎn)的DateNode的標(biāo)識(shí)信息之外的其他多個(gè)數(shù)據(jù)存儲(chǔ)副本DateNode的標(biāo)識(shí)信息對(duì)應(yīng)的 Region中的其中一個(gè)。
[0023] Region的標(biāo)識(shí)信息與多個(gè)數(shù)據(jù)存儲(chǔ)副本數(shù)據(jù)節(jié)點(diǎn)DateNode的標(biāo)識(shí)信息之間的 對(duì)應(yīng)關(guān)系,包括:
[0024] 所述控制設(shè)備在接收來(lái)自Hadoop數(shù)據(jù)庫(kù)HBase發(fā)送的查詢請(qǐng)求消息之前,接收所 述HBase發(fā)送的Region狀態(tài)信息,其中,所述Region狀態(tài)信息中包含了Region的標(biāo)識(shí)信 息、存儲(chǔ)的數(shù)據(jù)信息、所述數(shù)據(jù)信息存儲(chǔ)的且與其屬于同一個(gè)物理節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)副本的 DateNode的標(biāo)識(shí)信息以及所述數(shù)據(jù)信息存儲(chǔ)的其他至少一個(gè)數(shù)據(jù)存儲(chǔ)副本的DateNode 的標(biāo)識(shí)信息;
[0025] 所述控制設(shè)備根據(jù)接收到的所述Region狀態(tài)信息,建立Region的標(biāo)識(shí)信息與多 個(gè)數(shù)據(jù)存儲(chǔ)副本的DateNode的標(biāo)識(shí)信息。
[0026] 所述控制設(shè)備向所述HBase發(fā)送查詢響應(yīng)消息,包括:
[0027] 所述控制設(shè)備從確定的所述發(fā)生故障的Region的標(biāo)識(shí)信息對(duì)應(yīng)的多個(gè)數(shù)據(jù)存儲(chǔ) 副本DateNode的標(biāo)識(shí)信息中,查找出與所述發(fā)生故障的Region的標(biāo)識(shí)信息對(duì)應(yīng)的Region 屬于同一個(gè)物理節(jié)點(diǎn)的DateNode的標(biāo)識(shí)信息;并將除了查找出的DateNode的標(biāo)識(shí)信息 之外的確定的其他多個(gè)數(shù)據(jù)存儲(chǔ)副本DateNode的標(biāo)識(shí)信息攜帶在查詢請(qǐng)求響應(yīng)消息中發(fā) 送給所述fffiase,以便于所述HBase從接收到其他多個(gè)數(shù)據(jù)存儲(chǔ)副本DateNode的標(biāo)識(shí)信息 選擇其中一個(gè)數(shù)據(jù)存儲(chǔ)副本DateNode的標(biāo)識(shí)信息對(duì)應(yīng)的Region作為新的Region。
[0028] 所述控制設(shè)備向所述HBase發(fā)送查詢響應(yīng)消息,包括:
[0029] 所述控制設(shè)備將確定的所述發(fā)生故障的Region的標(biāo)識(shí)信息對(duì)應(yīng)的多個(gè)數(shù)據(jù)存儲(chǔ) 副本DateNode的標(biāo)識(shí)信息攜帶在查詢響應(yīng)消息中發(fā)送給所述HBase,以便于所述HBase從 接收到的多個(gè)數(shù)據(jù)存儲(chǔ)副本DateNode的標(biāo)識(shí)信息中查找出與所述發(fā)生故障的Region的 標(biāo)識(shí)信息對(duì)應(yīng)的Region不屬于同一個(gè)物理節(jié)點(diǎn)的DateNode的標(biāo)識(shí)信息,并從查找出的 DateNode的標(biāo)識(shí)信息中確定一個(gè)DateNode的標(biāo)識(shí)信息對(duì)應(yīng)的Region作為新的Region。
[0030] 所述方法還包括:
[0031] 所述控制設(shè)備接收所述fffiase發(fā)送的Region狀態(tài)更新信息,其中,所述Region狀 態(tài)更新信息中包含了新的Region的標(biāo)識(shí)信息、存儲(chǔ)的數(shù)據(jù)信息、所述數(shù)據(jù)信息存儲(chǔ)的且與 所述新的Region的標(biāo)識(shí)信息屬于同一個(gè)物理節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)副本的DateNode的標(biāo)識(shí)信 息以及所述數(shù)據(jù)信息存儲(chǔ)的其他至少一個(gè)數(shù)據(jù)存儲(chǔ)副本的DateNode的標(biāo)識(shí)信息;
[0032] 所述控制設(shè)備根據(jù)接收到的所述Region狀態(tài)更新信息,建立所述新的Region的 標(biāo)識(shí)信息與多個(gè)數(shù)據(jù)存儲(chǔ)副本的DateNode的標(biāo)識(shí)信息的對(duì)應(yīng)關(guān)系,并更新Region狀態(tài)信 息列表。
[0033] 所述方法還包括:
[0034] 所述控制設(shè)備接收到HDFS文件系統(tǒng)發(fā)送的節(jié)點(diǎn)補(bǔ)充請(qǐng)求消息,其中,所述節(jié)點(diǎn)補(bǔ) 充請(qǐng)求消息中包含了發(fā)生故障的DateNode的標(biāo)識(shí)信息,所述節(jié)點(diǎn)補(bǔ)充請(qǐng)求消息是所述 HDFS文件系統(tǒng)在檢測(cè)到所述DateNode故障時(shí)發(fā)送的;
[0035] 所述控制設(shè)備根據(jù)DateNode的標(biāo)識(shí)信息與Region的標(biāo)識(shí)信息之間的對(duì)應(yīng)關(guān) 系,確定所述發(fā)生故障的DateNode的標(biāo)識(shí)信息對(duì)應(yīng)的Region的標(biāo)識(shí)信息,并得到確定的 Region的標(biāo)識(shí)信息對(duì)應(yīng)在其他DateNode上存儲(chǔ)的備份數(shù)據(jù)塊;
[0036] 所述控制設(shè)備將所述備份數(shù)據(jù)塊攜帶在節(jié)點(diǎn)補(bǔ)充響應(yīng)消息中發(fā)送給所述HDFS文 件系統(tǒng),以便于所述HDFS文件系統(tǒng)將得到的備份數(shù)據(jù)塊存儲(chǔ)在除了發(fā)生故障的DateNode 和已備份了所述備份數(shù)據(jù)塊的DateNode之外的一個(gè)DateNode中;
[0037] 所述控制設(shè)備接收所述HDFS文件系統(tǒng)發(fā)送的節(jié)點(diǎn)補(bǔ)充完畢消息,其中,所述節(jié)點(diǎn) 補(bǔ)充完畢消息中包含了所述HDFS文件系統(tǒng)將得到的備份數(shù)據(jù)塊存儲(chǔ)在除了發(fā)生故障的DateNode和