一種實(shí)現(xiàn)實(shí)時(shí)增量同步數(shù)據(jù)的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及大數(shù)據(jù)技術(shù)領(lǐng)域,尤指一種實(shí)現(xiàn)實(shí)時(shí)增量同步數(shù)據(jù)的方法及裝置。
【背景技術(shù)】
[0002] 互聯(lián)網(wǎng)的快速發(fā)展,產(chǎn)生了體積激增的大量數(shù)據(jù),海量數(shù)據(jù)的出現(xiàn)和數(shù)據(jù)結(jié)構(gòu)的 改變,給各行各業(yè)在管理和分析處理中帶來了巨大的挑戰(zhàn)。傳統(tǒng)的基于關(guān)系型數(shù)據(jù)庫數(shù)據(jù) 的處理方法已經(jīng)無法有效的存儲(chǔ)和分析處理日益增長的各種業(yè)務(wù)數(shù)據(jù)。為此,許多行業(yè)開 始采用分布式系統(tǒng)基礎(chǔ)架構(gòu)(Hadoop)來對數(shù)據(jù)進(jìn)行分析處理。目前主流的將關(guān)系型數(shù)據(jù) 庫數(shù)據(jù)同步到Hadoop平臺的方法主要通過Sqoop來實(shí)現(xiàn)數(shù)據(jù)的一次性全量導(dǎo)入。Sqoop是 一種存在于關(guān)系型數(shù)據(jù)庫和分布式文件系統(tǒng)(HDFS)間的高效傳輸數(shù)據(jù)工具,其可以將一 個(gè)關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入到Hadoop的HDFS中,也可以將HDFS的數(shù)據(jù)導(dǎo)進(jìn)關(guān)系型數(shù)據(jù) 庫中。
[0003] 當(dāng)關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)發(fā)生變化時(shí),若要實(shí)現(xiàn)將關(guān)系型數(shù)據(jù)庫中的更新數(shù)據(jù)導(dǎo)入 Hadoop中,則需要定時(shí)對關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行全量導(dǎo)入。其中全量導(dǎo)入的含義為將 關(guān)系型數(shù)據(jù)庫中實(shí)時(shí)存在的全部數(shù)據(jù)導(dǎo)入Hadoop中。這樣不僅加重了Hadoop分布式系統(tǒng) 的負(fù)擔(dān),并且耗時(shí)嚴(yán)重。而目前還沒有一種方法可以實(shí)現(xiàn)數(shù)據(jù)由關(guān)系型數(shù)據(jù)庫到Hadoop的 實(shí)時(shí)增量更新同步,即只同步關(guān)系型數(shù)據(jù)庫中的變更數(shù)據(jù)至Hadoop中。
【發(fā)明內(nèi)容】
[0004] 為解決上述問題,本發(fā)明提供了一種實(shí)現(xiàn)實(shí)時(shí)增量同步數(shù)據(jù)的方法及裝置,能夠 實(shí)現(xiàn)數(shù)據(jù)由關(guān)系型數(shù)據(jù)庫到Hadoop的實(shí)時(shí)增量更新同步,同時(shí)有效減輕Hadoop平臺的負(fù) 擔(dān),增強(qiáng)用戶體驗(yàn)。
[0005] 為了達(dá)到上述發(fā)明目的,本發(fā)明公開了一種實(shí)現(xiàn)實(shí)時(shí)增量同步數(shù)據(jù)的方法,應(yīng)用 于關(guān)系型數(shù)據(jù)庫到分布式系統(tǒng)架構(gòu)的數(shù)據(jù)導(dǎo)入,包括:
[0006] 根據(jù)關(guān)系型數(shù)據(jù)庫的表結(jié)構(gòu)信息,在面向列的開源數(shù)據(jù)庫HBase中生成與上述關(guān) 系型數(shù)據(jù)庫相對應(yīng)的映射關(guān)系文件;
[0007] 實(shí)時(shí)獲取上述關(guān)系型數(shù)據(jù)庫的操作日志;
[0008] 根據(jù)獲得的操作日志,獲取上述關(guān)系型數(shù)據(jù)庫的變更數(shù)據(jù),根據(jù)建立的上述映射 關(guān)系文件,將獲得的變更數(shù)據(jù)更新至Hadoop的HBase中。
[0009] 進(jìn)一步地,預(yù)先配置上述關(guān)系型數(shù)據(jù)庫的身份標(biāo)識和起始位點(diǎn);上述實(shí)時(shí)獲取關(guān) 系型數(shù)據(jù)庫的操作日志包括:
[0010] 根據(jù)上述身份標(biāo)識和起始位點(diǎn),從起始位點(diǎn)開始獲取上述身份標(biāo)識對應(yīng)的關(guān)系型 數(shù)據(jù)庫的操作日志。
[0011] 進(jìn)一步地,上述獲取上述關(guān)系型數(shù)據(jù)庫的操作日志包括:
[0012] 接收上述身份標(biāo)識對應(yīng)的關(guān)系型數(shù)據(jù)庫的操作日志的變更數(shù)據(jù),并將接收到的變 更數(shù)據(jù)按順序存儲(chǔ)在一個(gè)消息隊(duì)列中;或者,
[0013] 當(dāng)未接收到獲取變更數(shù)據(jù)請求以及消息隊(duì)列中的變更數(shù)據(jù)超過閾值時(shí),則將上述 消息隊(duì)列中的變更數(shù)據(jù)按順序存儲(chǔ)到對應(yīng)目錄文件中。
[0014] 進(jìn)一步地,在上述實(shí)時(shí)獲取關(guān)系型數(shù)據(jù)庫的操作日志之后,上述方法還包括:
[0015] 更新上述關(guān)系型數(shù)據(jù)庫的起始位點(diǎn);
[0016] 根據(jù)更新后的起始位點(diǎn),獲取上述關(guān)系型數(shù)據(jù)庫的下一個(gè)操作日志。
[0017] 進(jìn)一步地,上述方法還包括:將獲得的上述變更數(shù)據(jù)保存在本地文件中,并記錄下 更新歷史。
[0018] 本發(fā)明還公開了一種實(shí)現(xiàn)實(shí)時(shí)增量同步數(shù)據(jù)的裝置,應(yīng)用于關(guān)系型數(shù)據(jù)庫到分布 式系統(tǒng)架構(gòu)的數(shù)據(jù)導(dǎo)入,包括:建表模塊、日志獲取模塊、多個(gè)日志解析客戶端模塊和數(shù)據(jù) 更新模塊,其中:
[0019] 建表模塊,用于根據(jù)關(guān)系型數(shù)據(jù)庫的表結(jié)構(gòu)信息,在分布式的、面向列的開源數(shù)據(jù) 庫HBase中生成與上述關(guān)系型數(shù)據(jù)庫相對應(yīng)的映射關(guān)系文件;
[0020] 日志獲取模塊,用于實(shí)時(shí)獲取上述關(guān)系型數(shù)據(jù)庫的操作日志;
[0021] 每個(gè)日志解析客戶端模塊,分別與上述日志獲取模塊相連,用于接收上述日志解 析模塊發(fā)送的操作日志及變更數(shù)據(jù),并將獲得的變更數(shù)據(jù)發(fā)送給數(shù)據(jù)更新模塊;
[0022] 數(shù)據(jù)更新模塊,用于實(shí)時(shí)的接收上述每個(gè)日志解析客戶端模塊發(fā)送的變更數(shù)據(jù), 并根據(jù)上述建表模塊建立的上述映射關(guān)系文件,將獲得的變更數(shù)據(jù)更新至Hadoop的HBase 中。
[0023] 進(jìn)一步地,上述日志獲取模塊具體用于:
[0024] 預(yù)先配置上述關(guān)系型數(shù)據(jù)庫唯一的身份標(biāo)識和起始位點(diǎn);
[0025] 根據(jù)上述身份標(biāo)識和起始位點(diǎn),從起始位點(diǎn)開始獲取上述身份標(biāo)識相對應(yīng)的關(guān)系 型數(shù)據(jù)庫的操作日志。
[0026] 進(jìn)一步地,上述日志獲取模塊還用于:
[0027] 接收上述身份標(biāo)識對應(yīng)的關(guān)系型數(shù)據(jù)庫的操作日志的數(shù)據(jù),并將接收到的數(shù)據(jù)按 順序存儲(chǔ)在一個(gè)消息隊(duì)列中,供相對應(yīng)的上述日志解析客戶端模塊請求獲??;或者,
[0028] 若上述日志解析客戶端模塊未請求獲取上述數(shù)據(jù),當(dāng)消息隊(duì)列中的數(shù)據(jù)超過閾值 時(shí),則將上述消息隊(duì)列中的數(shù)據(jù)按順序存儲(chǔ)到對應(yīng)目錄文件中。
[0029] 進(jìn)一步地,上述日志獲取模塊還用于:
[0030] 更新上述關(guān)系型數(shù)據(jù)庫的起始位點(diǎn);
[0031] 根據(jù)更新后的起始位點(diǎn),獲取上述關(guān)系型數(shù)據(jù)庫的下一個(gè)操作日志。
[0032] 進(jìn)一步地,上述日志解析客戶端模塊還用于:當(dāng)上述數(shù)據(jù)更新模塊未啟動(dòng)時(shí),將接 收到的上述變更數(shù)據(jù)存儲(chǔ)在本地文件中。
[0033] 進(jìn)一步地,將獲得的上述變更數(shù)據(jù)保存在本地文件中,并記錄下更新歷史。
[0034] 本申請技術(shù)方案提供的實(shí)現(xiàn)實(shí)時(shí)增量同步數(shù)據(jù)的方法,應(yīng)用于關(guān)系型數(shù)據(jù)庫到分 布式系統(tǒng)架構(gòu)的數(shù)據(jù)導(dǎo)入,包括:根據(jù)關(guān)系型數(shù)據(jù)庫的表結(jié)構(gòu)信息,在分布式的、面向列的 開源數(shù)據(jù)庫HBase中生成與所述關(guān)系型數(shù)據(jù)庫相對應(yīng)的映射關(guān)系文件;實(shí)時(shí)獲取所述關(guān)系 型數(shù)據(jù)庫的操作日志;根據(jù)獲得的操作日志,獲取所述關(guān)系型數(shù)據(jù)庫的變更數(shù)據(jù),根據(jù)建立 的所述映射關(guān)系文件,將獲得的變更數(shù)據(jù)更新至Hadoop的HBase中。本申請的技術(shù)方案實(shí) 現(xiàn)了數(shù)據(jù)由關(guān)系型數(shù)據(jù)庫到Hadoop的實(shí)時(shí)增量更新同步,同時(shí)有效減輕了Hadoop平臺的 負(fù)擔(dān),增強(qiáng)用戶體驗(yàn)。
【附圖說明】
[0035] 此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā) 明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
[0036] 圖1為本發(fā)明實(shí)現(xiàn)實(shí)時(shí)增量同步數(shù)據(jù)的方法流程圖;
[0037] 圖2為本發(fā)明實(shí)現(xiàn)實(shí)時(shí)增量同步數(shù)據(jù)的裝置的組成結(jié)構(gòu)示意圖;
【具體實(shí)施方式】
[0038] 下面結(jié)合附圖及具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)說明。
[0039] 圖1為本發(fā)明實(shí)現(xiàn)實(shí)時(shí)增量同步數(shù)據(jù)的方法流程圖,應(yīng)用于關(guān)系型數(shù)據(jù)庫到分布 式系統(tǒng)架構(gòu)(Hadoop)的數(shù)據(jù)導(dǎo)入,如圖1所示,包括以下步驟:
[0040] 步驟101,根據(jù)關(guān)系型數(shù)據(jù)庫的表結(jié)構(gòu)信息,在分布式的、面向列的開源數(shù)據(jù)庫 (HBase)中生成與該關(guān)系型數(shù)據(jù)庫相對應(yīng)的映射關(guān)系文件。
[0041] 需要說明的是,在本步驟中,還可以在數(shù)據(jù)倉庫工具(Hive)和HBase中生成與關(guān) 系型數(shù)據(jù)庫相對應(yīng)的關(guān)聯(lián)表。該關(guān)聯(lián)表是指在Hive和HBase中創(chuàng)建的與關(guān)系型數(shù)據(jù)庫中 表結(jié)構(gòu)一致的數(shù)據(jù)表。在歷史數(shù)據(jù)導(dǎo)入到Hadoop平臺后,關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)表的更新會(huì) 被更新到Hive和HBase中的對應(yīng)表中。HBase用于數(shù)據(jù)存儲(chǔ),Hive提供查詢功能。該關(guān)聯(lián) 表可通過Hive腳本創(chuàng)建。
[0042] 本步驟中關(guān)于如何生成映射關(guān)系文件的方法是本領(lǐng)域技術(shù)人員所熟知的,即通過 程序從關(guān)系型數(shù)據(jù)庫即可以得到的,或者說是在連接到關(guān)系型數(shù)據(jù)庫后,通過相應(yīng)的接口 執(zhí)行某些SQL語句即可得到。具體為:在得到關(guān)系型數(shù)據(jù)庫的表結(jié)構(gòu)信息后,自定義Hadoop 平臺中HBase的對應(yīng)列名(如可簡單的通過A-Z的順序依次來對應(yīng)關(guān)系型數(shù)據(jù)庫中的各 個(gè)列名)。在Hive中,表結(jié)構(gòu)的各個(gè)列名與關(guān)系型數(shù)據(jù)庫中表結(jié)構(gòu)的列名是相同的,此處自 定義的列名是對應(yīng)到HBase中的列名。
[0043] 所以,如果關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)表中的主鍵為組合鍵,則對組合鍵按照一定的規(guī) 則進(jìn)行拼接處理,作為HBase的行主鍵。此處的規(guī)則可根據(jù)數(shù)據(jù)的特定及處理需求需進(jìn)行 自定義,只要保證每條記錄按照該規(guī)則拼接出來的字段唯一即可。例如,可直接以下劃線連 接的方式將組合主鍵中的字段進(jìn)行拼接。
[0044] 步驟102,實(shí)時(shí)獲取所述關(guān)系型數(shù)據(jù)庫的操作日志。
[0045] 首先,預(yù)先配置該關(guān)系型數(shù)據(jù)庫唯一的身份標(biāo)識和起始位點(diǎn)。
[0046] 本步驟中,除了為關(guān)系型數(shù)據(jù)庫配置唯一身份標(biāo)識和起始位點(diǎn)之外,還可以配置 其他必要信息,如關(guān)系型數(shù)據(jù)庫所在主機(jī)的IP地址,服務(wù)端口號,數(shù)據(jù)庫用戶名和密碼等。[0047] 其次,實(shí)時(shí)獲取關(guān)系型數(shù)據(jù)庫的操作日志具體包括:
[0048] 根據(jù)身份標(biāo)識和起始位點(diǎn),從起始位點(diǎn)開始獲取所述身份標(biāo)識對應(yīng)的關(guān)系型數(shù)據(jù) 庫的操作日志。
[0049] 最后,在實(shí)時(shí)獲取所述關(guān)系型數(shù)據(jù)庫的操作日志之后,更新所述關(guān)系型數(shù)據(jù)庫的 起始位點(diǎn);并根據(jù)更新后的起始位點(diǎn),獲取該關(guān)系型數(shù)據(jù)庫的下一個(gè)操作日志。
[0050] 需要說明的是,起始位點(diǎn)是保存在內(nèi)存中的一個(gè)變量,在每次成功獲取到操作日 志后,便可由程序直接修改該變量的值,即更新該起始位點(diǎn),同時(shí)將該值由程序?qū)懭氲脚渲?文件中。保存至文件中是為了防止在程序異常終止后而丟失當(dāng)前的起始位點(diǎn)。這樣,下次 程序啟動(dòng)時(shí)可通過該文件