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