亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        SparkStreaming寫入HBase的實現(xiàn)和優(yōu)化

        2016-04-29 03:34:34陳曉朱志祥梁小江
        物聯(lián)網(wǎng)技術(shù) 2016年4期
        關(guān)鍵詞:大數(shù)據(jù)

        陳曉 朱志祥 梁小江

        摘 要:海量數(shù)據(jù)的實時處理不僅要求計算框架快速高效,同時要求流處理過程中產(chǎn)生的中間數(shù)據(jù)的存儲過程同樣高效,因此,可通過提高Spark Streaming對中間結(jié)果數(shù)據(jù)的處理速度來提升流處理效率。為提高Spark Streaming處理中間結(jié)果的效率,文中選擇HBase作為中間數(shù)據(jù)存儲系統(tǒng),并通過分析Spark Streaming的架構(gòu)及HBase的存儲原理,給出了Spark Streaming向HBase寫入數(shù)據(jù)的方法并進行優(yōu)化。通過對Spark Streaming存儲過程的優(yōu)化,可以一定程度上提高實時數(shù)據(jù)的流處理效率。

        關(guān)鍵詞:Spark Streaming;HBase;大數(shù)據(jù);內(nèi)存計算;流處理

        中圖分類號:TP274.2 文獻標識碼:A 文章編號:2095-1302(2016)04-00-03

        0 引 言

        隨著移動互聯(lián)網(wǎng)、社交網(wǎng)絡(luò)等領(lǐng)域的快速發(fā)展,數(shù)據(jù)量呈指數(shù)式增長,大數(shù)據(jù)時代全面來臨。在這個高速發(fā)展的時代,數(shù)據(jù)的變化速度也越來越快,對數(shù)據(jù)處理和響應(yīng)時間的要求也更加苛刻,數(shù)據(jù)的實時分析和流式處理變得尤為重要。例如,在移動通信領(lǐng)域,對海量數(shù)據(jù)進行實時的挖掘分析,可以準確識別類似于詐騙的電信請求,從而有效避免電信詐騙的發(fā)生。再比如,通過對移動人口數(shù)據(jù)的實時挖掘分析,快速預(yù)測可能的突發(fā)事件。Spark Streaming是建立在Spark上的實時計算框架,擁有基于內(nèi)存的高速執(zhí)行引擎,并且提供豐富的接口和API,被廣泛用于實時數(shù)據(jù)流的分析處理。

        對海量實時數(shù)據(jù)進行處理,必然會產(chǎn)生大量的中間數(shù)據(jù),如何高效存儲Spark Streaming處理過程中產(chǎn)生的數(shù)據(jù)也是大數(shù)據(jù)處理過程中常見的問題。HBase的LSM樹型存儲結(jié)構(gòu)使其具有實時讀寫數(shù)據(jù)的功能。使用HBase作為Spark Streaming中間數(shù)據(jù)的存儲數(shù)據(jù)庫可大大提高數(shù)據(jù)處理的效率。

        本文基于實時數(shù)據(jù)的流式處理過程,給出了Spark Streaming將數(shù)據(jù)寫入HBase的具體方法,并在此基礎(chǔ)上進行了優(yōu)化。

        1 Spark Streaming簡介

        Spark Streaming是Spark生態(tài)系統(tǒng)的重要組成部分,主要用于實時數(shù)據(jù)流的處理。Spark Streaming的工作原理是將流式計算分解成一系列短小的批處理作業(yè),本質(zhì)上也是數(shù)據(jù)的批量處理,只是將時間跨度控制在數(shù)十毫秒到數(shù)秒之間。這里批處理的引擎依然為Spark,Spark Streaming將輸入數(shù)據(jù)按照批量大?。ù颂幹笗r間跨度如1秒)分成一段一段的數(shù)據(jù)(Discretized Stream),然后每一段數(shù)據(jù)都會轉(zhuǎn)換成Spark中的彈性數(shù)據(jù)集(Resilient Distributed Dataset,RDD),最后將Spark Streaming中對DStream的具體操作都轉(zhuǎn)換成Spark中對RDD的操作,并將中間結(jié)果暫存在內(nèi)存中。整個流式數(shù)據(jù)處理任務(wù)可以根據(jù)需求對中間數(shù)據(jù)加以利用,比如疊加,或者將結(jié)果存儲到外部設(shè)備,例如文件系統(tǒng)HDFS,或者外部數(shù)據(jù)庫Hive,HBase。

        HBase – Hadoop Database是Apache Hadoop的一個子項目,是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統(tǒng)。HBase采用LSM樹的存儲結(jié)構(gòu),這種結(jié)構(gòu)的核心在于每一次執(zhí)行插入操作時數(shù)據(jù)都會先進入MemStore(內(nèi)存緩沖區(qū)),當MemStore達到上限時,HBase會將內(nèi)存中的數(shù)據(jù)輸出為有序的StoreFile文件數(shù)據(jù)。而在HBase中數(shù)據(jù)列是由列簇來組織的,所以每一個列簇都會有對應(yīng)的一個數(shù)據(jù)結(jié)構(gòu),HBase將列簇的存儲數(shù)據(jù)結(jié)構(gòu)抽象為Store,一個Store代表一個列簇。這樣在Store中會形成很多個小的StoreFile,當這些小的File數(shù)量達到閾值時,HBase會用一個線程來把這些小File合并成一個大File。這樣,HBase就把效率低下的文件中的插入、移動操作轉(zhuǎn)變成了單純的文件輸出、合并操作。從而使HBase的讀寫數(shù)據(jù)速度非???,能夠支持實時讀寫。所以在對海量實時數(shù)據(jù)進行處理時通常使用HBase作為數(shù)據(jù)存儲系統(tǒng)。

        2 Spark Streaming寫入數(shù)據(jù)到HBase

        2.1 實現(xiàn)方法

        Spark Streaming向HBase寫入數(shù)據(jù)時需要對每一條數(shù)據(jù)執(zhí)行插入操作,通常會采用輸出方法foreachRDD(func),將func(此處指將數(shù)據(jù)插入HBase表格)作用于DStream的每一個RDD。

        在上述代碼中,countBase為待處理的DStream,首先對countBase進行foreachRDD操作,然后對每個RDD進行操作。此處依據(jù)項目需求對每個RDD進行非空判斷,然后對每個RDD執(zhí)行foreach操作,進而對RDD的每條數(shù)據(jù)record調(diào)用writeToHBase方法,實現(xiàn)數(shù)據(jù)寫入HBase表格。其中zkQuorum為HBase的zookeeper服務(wù)的主機名配置信息,row為HBase表的行鍵,family為表的列簇,key為表的列,value為列的值。writeToHBase方法為自定義的將數(shù)據(jù)寫入HBase的方法。

        由上述代碼可看出,在向外部HBase數(shù)據(jù)庫寫數(shù)據(jù)時,通常要先創(chuàng)建與數(shù)據(jù)庫的連接,并獲取HTable實例,其中HTable為操作HBase表格的接口,通過HTable對象對HBase表格中的數(shù)據(jù)進行增,刪,查詢等操作。對RDD的每條數(shù)據(jù)調(diào)用writeToHBase進行寫入操作之前先對setTable對象進行序列化,即對每條數(shù)據(jù)都創(chuàng)建了連接,獲取HTable實例的confTable方法具體代碼如下,其中tableName為建立連接的表格名稱。

        2.2 優(yōu)化方法

        方法一成功將DStream數(shù)據(jù)寫入HBase數(shù)據(jù)庫,但是資源開銷較大。Sparking Streaming在向HBase寫入數(shù)據(jù)時,必須給每條數(shù)據(jù)都創(chuàng)建一次連接,獲取一個HTable實例,但是創(chuàng)建連接是一項非常耗時的操作,通常耗時數(shù)秒才能完成。在資源高度緊張的環(huán)境下,每秒都有幾千個請求,為每條數(shù)據(jù)單獨創(chuàng)建HTable實例是非常消耗資源的?;诖颂岢鰞?yōu)化方法,減少建立連接與創(chuàng)建HTable實例的次數(shù),從而降低資源消耗,提高數(shù)據(jù)寫入HBase表的效率。方法二的代碼如下:

        依據(jù)方法二依次對countBase執(zhí)行foreachRDD與foreachPartition操作,為每個分區(qū)創(chuàng)建一個confTable對象。對于RDD一個分區(qū)內(nèi)的所有數(shù)據(jù),這一個confTable對象是共用的。相比于給RDD中所有數(shù)據(jù)都實例化一個HTable,方法二明顯減少了實例創(chuàng)建次數(shù),大大提升了Spark Streaming向HBase寫入數(shù)據(jù)的性能。

        方法一和方法二的操作流程見圖2和圖3所示。

        上圖中方形表示一個RDD,每一個橢圓形代表RDD的一個分區(qū)Partition,分區(qū)里的每個圓形代表RDD的一條數(shù)據(jù)record。上圖展示了DStream經(jīng)過foreachRDD操作后對每個RDD的操作。由圖2和圖3可知,方法一對RDD經(jīng)過foreach操作后對每條數(shù)據(jù)record都要經(jīng)過創(chuàng)建連接然后才能寫入HBase表格。方法二先對RDD進行foreachPartition操作,然后對一個分區(qū)創(chuàng)建一個連接,連接創(chuàng)建后對該分區(qū)foreach每條數(shù)據(jù)record進行寫入操作。對比兩圖可看出優(yōu)化后的方法創(chuàng)建連接的次數(shù)明顯比原始方法少。而對于整個處理任務(wù)來說,建立連接,實例化HTable對象消耗資源過多,所以優(yōu)化后的方法二性能大大提升。

        HTable是HBase客戶端,實現(xiàn)對HBase表的增加 (Create)、查詢(Retrieve)、更新(Update)和刪除(Delete)。但是HTable適合對單表操作,對讀或?qū)懖僮鞫疾皇蔷€程安全的。對于寫操作(Put或Delete),如果多線程共享一個HTable實例,寫緩沖區(qū)可能會被破壞。對于讀操作,一些被scan使用的字段同時被多個線程共享,如果此時有Get操作,不能保證數(shù)據(jù)的一致性。而大量數(shù)據(jù)的事實分析通常是多線程運作,為了解決線程安全問題,我們使用HTablePool類創(chuàng)建一個HTable的對象池,讓多個HTable實例共享一個Configuration,使用時通過getTable方法獲取一個HTable對象,然后可以進行各種增加(Create)、刪除(Delete)和更新(Update)等操作,使用完后調(diào)用close()方法可將HTable對象歸還到池中。方法三代碼如下:

        def confTable(zkQuorum:String,tableName:String): HTable = {

        import org.apache.hadoop.fs.Path

        val conf = HBaseConfiguration.create()

        conf.addResource(new Path(“/etc/HBase/conf/core-site.xml”))

        conf.addResource(new Path(“/etc/HBase/conf/HBase-site.xml”))

        conf.set(“HBase.zookeeper.quorum”,zkQuorum)

        val pool = new HTablePool(conf, SIZE);

        val hTable = pool.getTable(tableName);

        return hTable

        }

        由于HTablePool僅僅作為HTable的連接池,里面維護的HTable使用的Configuration是同一個,所以本質(zhì)上所有的HTable共用同一個HConnection。而對于創(chuàng)建一個連接,HConnection的創(chuàng)建所損耗的資源遠遠多于創(chuàng)建一個HTable。既然HTable的創(chuàng)建是輕量級的,那么共享一個HConnection的HTablePool實際價值就不大。只要保證HConnection實例是唯一的,全局共享的,然后在每次操作HBase表時根據(jù)HConnection對象來重新創(chuàng)建,使用完成之后及時關(guān)閉即可。

        最簡單的創(chuàng)建HConnection實例的方式是HConnectionManager.createConnection()。HConnectionManager是一個不可實例化的類,專門用于創(chuàng)建HConnection。該方法創(chuàng)建了一個連接到集群的HConnection實例,該實例被創(chuàng)建的程序管理。通過這個HConnection實例,可以使用HConnection.getTable(byte[])方法取得HTableInterface implementations的實現(xiàn)。方法四的代碼如下:

        def confTable(zkQuorum:String,tableName:String): HTableInterface = {

        import org.apache.hadoop.fs.Path

        val conf = HBaseConfiguration.create()

        conf.addResource(new Path(“/etc/HBase/conf/core-site.xml”))

        conf.addResource(new Path(“/etc/HBase/conf/HBase-site.xml”))

        conf.set(“HBase.zookeeper.quorum”,zkQuorum)

        val connection = HConnectionManager.createConnection(conf);

        val table = connection.getTable(“tablename”);

        return table

        }

        3 結(jié) 語

        本文先給出了海量數(shù)據(jù)的實時流處理過程中將數(shù)據(jù)存儲到HBabe中的方法。通過Spark Streaming直接將中間數(shù)據(jù)實時寫入HBase表格,在解決中間數(shù)據(jù)存儲問題的同時,確保了流處理過程的高效率,并進一步優(yōu)化此方法,將數(shù)據(jù)的處理速度大大提高,更大程度的提升流處理的效率。

        參考文獻

        [1] Spark[EB/OL].http://spark.apache.org//. 2015

        [2] Apache HBase[EB/OL]. http://HBase.apache.org/. 2015

        [3] 卓海藝.基于HBase的海量數(shù)據(jù)實時查詢系統(tǒng)設(shè)計與實現(xiàn)[D].北京:北京郵電大學(xué), 2013.

        [4] 張榆,馬友忠,孟小峰.一種基于HBase的高效空間關(guān)鍵字查詢策略[J].小型微型計算機系統(tǒng), 2012,33(10):2141-2146.

        [5] 夏俊鸞,邵賽賽.Spark Streaming: 大規(guī)模流式數(shù)據(jù)處理的新貴[EB/OL]. http://www.csdn.net/article/2014-01-28/2818282-Spark-Streaming-big-data. 2014.

        猜你喜歡
        大數(shù)據(jù)
        基于在線教育的大數(shù)據(jù)研究
        中國市場(2016年36期)2016-10-19 04:41:16
        “互聯(lián)網(wǎng)+”農(nóng)產(chǎn)品物流業(yè)的大數(shù)據(jù)策略研究
        中國市場(2016年36期)2016-10-19 03:31:48
        基于大數(shù)據(jù)的小微電商授信評估研究
        中國市場(2016年35期)2016-10-19 01:30:59
        大數(shù)據(jù)時代新聞的新變化探究
        商(2016年27期)2016-10-17 06:26:00
        淺談大數(shù)據(jù)在出版業(yè)的應(yīng)用
        今傳媒(2016年9期)2016-10-15 23:35:12
        “互聯(lián)網(wǎng)+”對傳統(tǒng)圖書出版的影響和推動作用
        今傳媒(2016年9期)2016-10-15 22:09:11
        大數(shù)據(jù)環(huán)境下基于移動客戶端的傳統(tǒng)媒體轉(zhuǎn)型思路
        新聞世界(2016年10期)2016-10-11 20:13:53
        基于大數(shù)據(jù)背景下的智慧城市建設(shè)研究
        科技視界(2016年20期)2016-09-29 10:53:22
        數(shù)據(jù)+輿情:南方報業(yè)創(chuàng)新轉(zhuǎn)型提高服務(wù)能力的探索
        中國記者(2016年6期)2016-08-26 12:36:20
        五月天精品视频在线观看| 色视频网站一区二区三区| 天天爽夜夜爽人人爽| 色婷婷综合中文久久一本| 999久久66久6只有精品| 国产三级c片在线观看| 中文字幕亚洲乱码成熟女1区| 国产成熟人妻换╳╳╳╳| 日韩二三区| 中文字幕一区二区三区精品在线 | 亚洲国产成人精品激情| 亚洲中文字幕视频第一二区| 亚洲国产av无码精品| 99偷拍视频精品一区二区| 久久久久成人精品免费播放网站| 亚洲国产av高清一区二区三区| 性无码一区二区三区在线观看 | 天堂在线www中文| 麻豆国产VA免费精品高清在线| 国产亚洲av综合人人澡精品| 国产两女互慰高潮视频在线观看| 国产精品户露av在线户外直播| 中国精品久久久久国产| 国产三级不卡一区不卡二区在线 | 亚洲一区二区三区,日本| 毛片大全真人在线| 最新国产女主播福利在线观看| 丝袜美腿亚洲综合在线播放| 国产精品538一区二区在线| 亚洲 欧美 国产 日韩 精品| 一片内射视频在线观看| 久久九九精品国产av| 精品无码久久久久成人漫画 | 久久久午夜精品福利内容| 在线看片国产免费不卡| 亚洲国产精品久久久婷婷| 乱中年女人伦av一区二区| 狠狠狠色丁香婷婷综合激情| 久久精品国产福利亚洲av| 中国少妇×xxxx性裸交| 欧美性群另类交|