《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 基于Spark的數據庫增量準實時同步
基于Spark的數據庫增量準實時同步
2016年微型機與應用第19期
王浩,葛昂,趙晴
華北計算機系統工程研究所,北京 100083
摘要: 為了實現將傳統關系型數據庫中的增量數據快速導入同構或者異構目的庫,在使用已有的增量提取方法的基礎上,提出了通過增加并行度和流式計算的方法加快同步速度。此方法不僅支持插入、更新和刪除的增量數據同步,而且可以抽取出數據庫表結構信息動態支持表結構變更。與傳統單點抽取方式相比,大大提高了目的庫數據的新鮮度。
Abstract:
Key words :

  王浩,葛昂,趙晴

 ?。ㄈA北計算機系統工程研究所,北京 100083)

       摘要:為了實現將傳統關系型數據庫中的增量數據快速導入同構或者異構目的庫,在使用已有的增量提取方法的基礎上,提出了通過增加并行度和流式計算的方法加快同步速度。此方法不僅支持插入、更新和刪除的增量數據同步,而且可以抽取出數據庫表結構信息動態支持表結構變更。與傳統單點抽取方式相比,大大提高了目的庫數據的新鮮度。

  關鍵詞:增量同步; Spark; 流式計算

0引言

  隨著大數據技術的發展,越來越多的企業開始構建大數據平臺進行數據處理。然而如何將保存在關系型數據庫中的數據快速同步到大數據平臺組件(例如HBase、HDFS)中,正成為很多企業面臨的問題。Sqoop是常用的數據同步工具,其實質是MapReduce任務,延時較高,而且需要通過定時任務來達到自動化流程效果。本文在觸發器記錄數據變化的基礎上,提出了一種使用Spark Streaming將增量數據抽取出來,然后根據需要寫入到不同的目的庫的方法。由于只提取增量數據,所以較Sqoop減少了數據量。另外由于是流式處理方式,降低了延時。

1增量提取

  1.1增量提取的概念

  增量提取是針對上一次提取而言,將上一次提取時間點到現在數據庫中插入、更新、刪除的數據提取出來[1]。

  1.2常用的增量提取方法

  1.2.1基于業務系統日志

  在業務中將數據庫DML(Data Manipulation Language)語句輸出以日志的方式存儲,然后通過解析日志將DML語句在目的庫中重放以達到目的。此方法需要侵入業務系統,對于已經成型的業務系統不適用。

  1.2.2基于數據庫日志

  解析數據庫日志也能達到增量提取的目的,但是各大數據庫廠商不對外開放數據庫系統的日志格式,這就使得解析日志變成了問題。而且各數據庫的日志格式還不盡相同,難以達到通用性。

  1.2.3基于觸發器

  基于觸發器的方式,目前被廣泛運用于數據庫增量提取。它通過在源表上建立插入、更新、刪除觸發器來記錄對數據的操作。每當有數據變化時,就會觸發相應的觸發器,然后運行觸發器定義的邏輯,將變化記錄到增量表。

  1.3基于觸發器方法的具體實現

  由于觸發器方法具有實現邏輯簡單,對業務無入侵,數據庫通用等優點,所以本文采用了基于觸發器方式的增量提取方法。具體實現方法如下:

 ?。?)創建名為dml_log的數據庫表,字段為id、table_name、record_id、execute_date、dml_type。其中id為自增id,table_name存儲要同步的源表表名稱,record_id是源表中發生變化的記錄的唯一標識,execute_date為觸發器執行時的時間戳,dml_type為I、U、D分別代表insert、update、delete操作。

 ?。?)在源表上創建插入、更新、刪除類型的觸發器。創建語句在此省略。

2構建Spark Streaming程序

  2.1Spark Streaming

  Spark是目前大數據處理領域比較常用的計算框架。它將中間計算結果維護在內存中,這樣不僅可以做到中間結果的重用,而且減少了磁盤IO,大大加快了計算速度。Spark Streaming是構建于Spark core之上的流式處理模塊。其原理是將流式數據切分成一個個小的片段,以mini batch的形式來處理這一小部分數據,從而模擬流式計算達到準實時的效果。

  2.2JdbcRDD

  彈性分布式數據集(Resilient Distributed Datasets,RDD),它是Spark數據抽象的基石。RDD是一個只讀的分區記錄集合,分區分散在各個計算節點[2]。RDD提供了transformation和action兩類操作,其中transformation是lazy級別的,主要對數據處理流程進行標記,而不立即進行運算。action操作會觸發作業的提交,然后進行回溯導致transformation操作進行運算。

  JdbcRDD擴展自RDD,是RDD的子類。內部通過JDBC(Java Data Base Connectivity)操作以數據庫為源頭構建RDD。其構造函數簽名為:

  class JdbcRDD[T: ClassTag](

  sc: SparkContext,

  getConnection:()=> Connection,

  sql: String,

  lowerBound: Long,

  upperBound: Long,

  numPartitions: Int,

  mapRow:(ResultSet) => T =

  JdbcRDD.resultSetToObjectArray _)

  extends RDD[T](sc, Nil) with Logging {…}

  2.3具體實現

  Spark官方提供用于構建Spark Streaming的數據源沒有對數據庫進行支持,所以本文自己實現對數據庫的支持。編寫繼承自InputDStream類的DirectJdbcInputDStream類,其簽名為:

  class DirectJdbcInputDStream[T: ClassTag](

  @transient ssc_ : StreamingContext,

  param: JdbcParam) extends

  InputDStream[Row] (ssc_) with Logging {…}

  對start()、compute()和stop()方法進行重寫。

  (1)在start函數中注冊JDBC驅動,用于JDBC獲取初始化信息(構造JdbcRDD時的參數);

  (2)compute函數會被框架間隔指定的時間反復調用,其實質是如何返回一個JdbcRDD。首先通過JDBC獲取本次需要拉取的trigger記錄的id的上下界以及表的Schema信息;然后以這些信息為參數生成提取真實數據的SQL,其邏輯為用選中的trigger表中的記錄和原表在record_id上進行左連接;最后使用該SQL當做參數構建JdbcRDD。值得說明的是,構建JdbcRDD時是可以指定并行度的,每個worker節點都會建立到數據庫的JDBC連接,由多個節點并行去數據庫拉取屬于自己的那一部分數據,這就大大增加了提取和處理速度。

  (3)在stop函數中關閉JDBC連接??傮w來看,就是在driver程序中執行的JDBC程序獲取初始化參數,在executor中執行的JDBC程序拉取真實的數據。

  (4)編寫driver程序:

  val sc = new SparkContext(new SparkConf)

  val ssc = new StreamingContext(sc, Seconds(30))

  val directStream = new DirectJdbcInputDStream[Row](ssc, jdbcParam)

  directStream.foreachRDD(rdd => {

  …//對數據進行處理

  })

  2.4限流

  假設當前時間點到上次提取的時間點之間新增數據量太大,就會導致在新一次作業提交時,上一次的作業仍然沒有完成,可能會因此造成作業積壓使得系統不穩定。本文使用了基于規則的限流方法,綜合考慮集群處理能力以及間隔時間,可以配置化設置每次最大提取條數。如果當前需要提取的數據條數大于最大提取條數,則本次就只提取最大條數,剩下的延時到下次再進行提取。這樣做的好處是削減了峰流對系統造成的影響。

3測試分析

  測試環境:VMware虛擬機,處理器設置為4核心,2 GB內存, 64位CentOS 6.5操作系統,Spark 1.5.1,Oracle 11g。使用4臺虛擬機搭建成Spark集群,1臺為Master,3臺為Worker。數據庫表分別設置為20、40個字段,每次最大抽取記錄數分別設置為10 000、50 000、500 000。將抽取出來的數據寫成parquet格式的文件存儲到hdfs上。測試結果如表1所示。

圖像 004.png

4結束語

  本文在基于數據庫觸發器記錄數據變化的基礎上,通過自己構造DirectJdbcStream類提供Spark Streaming對數據庫的支持,達到準實時從數據庫中抽取出增量數據的目的。并且可以對抽取出來的數據進行過濾、清洗等操作,根據需求靈活地寫入到不同的目的庫。

  參考文獻

  [1] 郭亮. 基于MD5與HASH的數據庫增量提取算法及其應用[D]. 長沙:湖南大學,2013.

 ?。?] ZAHARIA M, CHOWDHURY M, DAS T, et al. Resilient distributed datasets: a fault tolerant abstraction for in memory cluster computing[C]. Usenix Conference on Networked Systems Design & Implementation, 2012, 70(2):141146.

 ?。?] DEAN J, GHEMAWAT S. MapReduce: simplified dataprocessing on large clusters[C]. USENIX Association OSDI′04: 6th Symposium on Operating Systems Design and Implementation, 2004:137149.

  [4] MARTIN O. Programming in scala[M]. California: Artima Press,2010.

 ?。?] YADAV R. Spark cookbook[M]. UK: Packt Publishing Ltd, 2015.

  [6] KARAU H. Learning spark[M]. America: O’Reilly Media, Inc. 2015.

 ?。?] 梁剛. 企業大數據管理解決方案[J]. 微型機與應用,2013,32(24):7 10,13.


此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          久久久久国产一区二区| 欧美在线观看一二区| 欧美一区二区国产| 一本色道久久88综合日韩精品| 狠狠狠色丁香婷婷综合久久五月| 国产精品激情电影| 亚洲综合日本| 玖玖在线精品| 午夜精品福利电影| 国产精品亚洲人在线观看| 国产一区二区三区不卡在线观看| 欧美精品二区三区四区免费看视频| 国产欧美精品日韩区二区麻豆天美| 国产精品乱码一区二区三区| 亚洲大片免费看| 亚洲欧美日韩电影| 国产视频久久| 国产伦精品一区二区三区四区免费| 国产精品自拍一区| 韩日在线一区| 一区二区三区**美女毛片| 欧美顶级艳妇交换群宴| 亚洲欧美日韩精品久久亚洲区| 欧美日韩视频不卡| 国产偷久久久精品专区| 午夜久久久久| 午夜精品久久久久久久久久久| 久久久亚洲影院你懂的| 国产精品美女主播| 国产日本欧美一区二区三区在线| 久久久久99精品国产片| 在线观看亚洲一区| aaa亚洲精品一二三区| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲人成亚洲人成在线观看图片| 亚洲毛片一区二区| 亚洲欧美成人精品| 黄色日韩网站| 亚洲网站在线| 久久综合免费视频影院| 欧美日韩一区二区三区视频| 欧美a级理论片| 亚洲精品国产精品国自产观看浪潮| 亚洲精品国产精品国自产在线| 一二三区精品福利视频| 亚洲欧美一区二区精品久久久| 久久福利一区| 欧美在线观看日本一区| 黑丝一区二区三区| 最新国产の精品合集bt伙计| 亚洲黑丝在线| 国产精品亚洲欧美| 欧美日韩国产综合在线| 一本大道久久a久久精二百| 国产精品香蕉在线观看| 午夜欧美大片免费观看| 精品av久久707| 99精品国产99久久久久久福利| 欧美影院久久久| 欧美日韩www| 亚洲大胆视频| 另类专区欧美制服同性| 国产亚洲精品成人av久久ww| 欧美日韩精品在线| 久久青草久久| 一区二区三区视频免费在线观看| 99www免费人成精品| 亚洲成色www久久网站| 一区二区欧美在线观看| 亚洲美女91| 国产麻豆精品久久一二三| 国产亚洲精品自拍| 免费高清在线视频一区·| 国内精品美女av在线播放| 国内精品视频一区| 久久精品成人一区二区三区蜜臀| 亚洲一区二区三区国产| 国产视频一区二区在线观看| 国内精品久久久久影院优| 另类av导航| 久久精品国产v日韩v亚洲| 国产欧美日韩精品a在线观看| 亚洲国产精品久久久久秋霞不卡| 久久成人免费电影| 久久久亚洲欧洲日产国码αv| 香蕉久久一区二区不卡无毒影院| 欧美.日韩.国产.一区.二区| 激情婷婷久久| 欧美一区二区三区免费在线看| 国内精品视频在线观看| 久久久青草青青国产亚洲免观| 国产精品一区毛片| 国产日韩欧美精品综合| 国产精品激情av在线播放| 欧美成人一区二区三区在线观看| 久久www成人_看片免费不卡| 欧美精品一区二区三区高清aⅴ| 在线播放国产一区中文字幕剧情欧美| 久久久爽爽爽美女图片| 亚洲三级电影在线观看| 一区免费视频| 国产精品www| 欧美性大战xxxxx久久久| 久久女同互慰一区二区三区| 午夜精品国产| 欧美 日韩 国产一区二区在线视频| 国产精品久久久久久av福利软件| 一色屋精品视频在线观看网站| 国产一区二区成人久久免费影院| 午夜精品影院| 欧美视频一区二区| 欧美成人精品1314www| 亚洲国产精品成人精品| 欧美激情va永久在线播放| 国产一区av在线| 欧美一区二区三区成人| 免费日韩精品中文字幕视频在线| 亚洲欧美日韩中文在线制服| 欧美色视频日本高清在线观看| 国产综合色在线视频区| 国产免费成人av| 美女国产精品| 欧美视频国产精品| 国产香蕉97碰碰久久人人| 欧美精品九九| 日韩一级黄色大片| 久久岛国电影| 亚洲日本欧美在线| 久久久91精品国产一区二区三区| 国产精品亚洲а∨天堂免在线| 日韩视频在线免费观看| 一本一本a久久| 国产欧美69| 篠田优中文在线播放第一区| 亚洲九九爱视频| 亚洲一区图片| 最新热久久免费视频| 国产免费成人| 欧美jizzhd精品欧美巨大免费| 欧美一区三区二区在线观看| 国内久久视频| 韩国av一区二区三区在线观看| 久久精品av麻豆的观看方式| 欧美一区深夜视频| 久久成人羞羞网站| 亚洲国产精品成人| 国产精品免费一区豆花| 亚洲国产精品久久久久婷婷老年| 国产亚洲一区二区在线观看| 久久国产精品网站| 国产亚洲永久域名| 欧美成人一区二区三区在线观看| 欧美1区视频| 欧美视频不卡| 一本色道久久综合狠狠躁篇的优点| 国产精品一区二区久久久久| 好看的av在线不卡观看| 亚洲国产精品传媒在线观看| 国产字幕视频一区二区| 久久久一区二区三区| 欧美高清视频一二三区| 亚洲黄色高清| 国产精品爱久久久久久久| 一区二区三区四区蜜桃| 亚洲精品资源美女情侣酒店| 在线视频免费在线观看一区二区| 亚洲人被黑人高潮完整版| 亚洲日本理论电影| 免费一级欧美在线大片| 欧美一二三区精品| 亚洲精品综合久久中文字幕| 亚洲男人av电影| 亚洲永久在线观看| 亚洲电影在线观看| 欧美性感一类影片在线播放| 性色av一区二区怡红| 亚洲——在线| 亚洲在线视频网站| 久久久久久久久久久一区| 亚洲摸下面视频| 亚洲高清视频在线| 在线天堂一区av电影| 亚洲欧美日韩直播| 国产欧美欧洲在线观看| 亚洲黄色av| 久久精品国产清高在天天线| 欧美在线三区| 亚洲影视在线| 国内精品视频在线播放| 国产婷婷成人久久av免费高清| 亚洲第一精品夜夜躁人人躁| 欧美激情第六页| 欧美精品一区二区三区高清aⅴ| 在线 亚洲欧美在线综合一区| 亚洲综合电影| 欧美成人三级在线| 国产一区视频在线看| 亚洲天堂免费观看| 美女日韩欧美| 国产伦精品一区二区三区在线观看| 国产亚洲精品aa| 久热精品视频在线观看一区| 久久久久久久高潮| 一区二区三区在线高清| 性欧美长视频| 国产精品日韩一区二区三区| 亚洲欧美成人| 亚洲欧美一区二区三区久久| 欧美看片网站| 欧美黑人一区二区三区| 久久疯狂做爰流白浆xx| 久久精品国产精品亚洲精品| 亚洲欧美日韩成人| 黄色综合网站| 国内成人精品2018免费看| 久久免费99精品久久久久久| 亚洲精品一区二区三区99| 亚洲激情综合| 国产色婷婷国产综合在线理论片a| 日韩午夜在线电影| 99视频精品免费观看| 国产精品嫩草99av在线| 99热在线精品观看| 亚洲国内欧美| 日韩视频免费| 亚洲免费观看在线观看| 国精产品99永久一区一区| 亚洲一区二区三区成人在线视频精品| 狠狠色狠狠色综合日日tαg| 性xx色xx综合久久久xx| 国产亚洲福利| 亚洲视频视频在线| 亚洲人体偷拍| 国产一区二区三区在线免费观看| 国产亚洲人成a一在线v站| 欧美一区免费| 久久欧美肥婆一二区| 国产精品99久久久久久久女警| 欧美成人精品不卡视频在线观看| 一本色道久久| 亚洲欧美国产另类| 亚洲精品激情| 亚洲成人在线| 一区二区三区四区国产精品| 亚洲清纯自拍| 欧美激情一区二区| 国内不卡一区二区三区| 亚洲日本电影| 免费不卡中文字幕视频| 一本久道久久久| 国产一区二区三区在线观看免费| 久久免费精品日本久久中文字幕| 久久精品国产96久久久香蕉| 久久综合给合久久狠狠狠97色69| 亚洲欧美电影院| 亚洲欧美日韩综合aⅴ视频| 欧美高清在线精品一区| 欧美黄色视屏| 欧美日韩一本到| 国产精品久久7| 亚洲乱码国产乱码精品精可以看| 国产精品自在在线| 国产精品成人免费精品自在线观看| 在线观看国产一区二区| 黄色亚洲在线| 欧美三级电影一区| 久久国产日本精品| 久久久久久久波多野高潮日日| 欧美大香线蕉线伊人久久国产精品| 欧美中文字幕久久| 中文精品99久久国产香蕉| 国内精品写真在线观看| 久久在线播放| 一区二区三区国产在线| 久久精品国产欧美激情| 亚洲欧美日韩国产另类专区| 一区二区欧美在线| 欧美在线国产| 久久国产精品黑丝| 欧美精品v国产精品v日韩精品| 欧美日韩亚洲高清一区二区| 亚洲免费成人av| 国产一区二区三区视频在线观看| 国产精品免费在线| 亚洲一区二区三区在线播放| 国产精品色网| 国产亚洲欧美日韩在线一区| 亚洲精品美女久久7777777| 亚洲第一中文字幕在线观看| 一区二区欧美在线观看| 国产欧美三级| 久久久av毛片精品| 久久久亚洲影院你懂的| 欧美日韩日韩| 亚洲婷婷综合色高清在线| 久久精品免视看| 亚洲人成亚洲人成在线观看图片| 午夜在线观看免费一区| 亚洲精品视频啊美女在线直播| 99精品欧美一区二区蜜桃免费| 欧美激情第二页| 国产视频在线观看一区二区| 欧美系列亚洲系列| 国产精品久久久久久五月尺| 欧美视频你懂的| 欧美色中文字幕| 欧美一区二区三区四区在线观看地址| 9人人澡人人爽人人精品| 久久伊人免费视频| 在线成人激情黄色| 在线成人激情黄色| 麻豆9191精品国产| 一本色道久久加勒比精品| 欧美网站大全在线观看| 国内自拍亚洲| 欧美一区二区三区久久精品| 久久久久久久久久久一区| 99热在这里有精品免费| 久久这里有精品15一区二区三区| 欧美精品麻豆| 久久中文精品| 欧美不卡福利| 欧美午夜精品久久久久久浪潮| 国产精品国产三级国产专播品爱网| 久久久久88色偷偷免费| 精品9999| 嫩草成人www欧美| 激情综合网址|