99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁職業(yè)發(fā)展揭秘中興大數(shù)據(jù)在銀行領(lǐng)域的系統(tǒng)部署
揭秘中興大數(shù)據(jù)在銀行領(lǐng)域的系統(tǒng)部署
2016-01-14
收藏

揭秘中興大數(shù)據(jù)在銀行領(lǐng)域的系統(tǒng)部署

本文首度揭秘了中興通訊的大數(shù)據(jù)平臺系統(tǒng)DAP在國內(nèi)Z銀行的部署過程。

大數(shù)據(jù)是一個開放的平臺,當(dāng)前大部分系統(tǒng)是基于互聯(lián)網(wǎng)公司的開源的產(chǎn)品而生,銀行業(yè)是不能完全照搬互聯(lián)網(wǎng)原生技術(shù)模式,銀行業(yè)在安全性、穩(wěn)定性有其特殊要求,對高可用、安全私密有更高的需求,新的大數(shù)據(jù)技術(shù)平臺必須與傳統(tǒng)行業(yè)的企業(yè)級特性相融合。

為了保證穩(wěn)定性,從硬件到軟件都需要考慮高可用問題。

Z銀行的大數(shù)據(jù)業(yè)務(wù)場景如下:

  • 對用戶的數(shù)據(jù)進行ETL處理,通過MapReduce完成,為離線應(yīng)用。
  • 將某類數(shù)據(jù)進行抽取,放入到數(shù)據(jù)庫中,對外提供查詢,為在線應(yīng)用。
  • 當(dāng)數(shù)據(jù)越來越多時,可通過增加存儲服務(wù)器的方式進行線性擴展。

設(shè)計思路

綜合上述業(yè)務(wù)場景,同步考慮金融行業(yè)的數(shù)據(jù)高安全性,服務(wù)高穩(wěn)定性,我們進行規(guī)劃設(shè)計。

Z銀行需要進行海量數(shù)據(jù)的存儲,則必須要部署HDFS,且該組件是其他組件的基礎(chǔ)。同時用戶需要對數(shù)據(jù)進行ETL處理,則MapReduce(YARN)也同樣要部署。對外進行在線查詢離不開HBase,因為HBase也需要進行部署。

綜上,需要部署的組件有Zookeeper、HDFS、HBase和MapReduce(YARN)。

金融業(yè)的特殊性要求我們必須考慮到整體服務(wù)的高穩(wěn)定性,所以需要考慮組件的高可用實現(xiàn)。對于各個組件的高可用實現(xiàn),我們分別采用如下的實現(xiàn)方式:

Zookeeper:選擇三臺服務(wù)器部署,為集群提供協(xié)調(diào)服務(wù)。

NameNode:采用QJMHA方式部署,選擇兩臺服務(wù)器部署NameNode,選擇三臺服務(wù)器部署JournalNode。

HBase:配置兩臺Hmaster,分別為主備,主備倒換借助Zookeeper實現(xiàn)。

ResourceManager:采用HA的方式部署。YARN依賴于HDFS運行,故部署時可選擇將ResourceManager與HDFSNameNode合設(shè)、將NodeMamager與DataNode合設(shè)的方式。

業(yè)務(wù)及管理數(shù)據(jù)庫:采用分布式數(shù)據(jù)庫實現(xiàn),一般選擇三臺機器作分布式數(shù)據(jù)庫集群的部署。

HIVE、ZHD-Manager:分別配置兩臺作為主備。

了解到該銀行的業(yè)務(wù)主要分為普通業(yè)務(wù)和重點業(yè)務(wù),因此我們又必須考慮到數(shù)據(jù)和業(yè)務(wù)的安全性,為降低彼此的影響,需要進行物理隔離。我們基于此將整個機群設(shè)計為由一個大集群和若干小集群組成,大集群用于進行基礎(chǔ)數(shù)據(jù)的清洗等ETL任務(wù),再將處理后的數(shù)據(jù)導(dǎo)入到小集群中進行處理,由小集群專享該數(shù)據(jù)。一般來說一個集群都自帶一套管理門戶,但這樣會造成維護使用上的復(fù)雜,所以為了降低部署成本和維護復(fù)雜性,就要采用單個門戶管理多個集群的方式。

另外,一般來說在實際部署時整套系統(tǒng)環(huán)境又要分為生產(chǎn)環(huán)境和測試環(huán)境。其中生產(chǎn)環(huán)境僅僅用于實際運營,承載真實業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)應(yīng)用;測試環(huán)境用于各種必要的功能驗證和性能測試等,包括應(yīng)用在上線前的功能驗證。

如把兩個環(huán)境合用,將帶來很多不確定性,測試環(huán)境容易對生產(chǎn)環(huán)境造成干擾,影響生產(chǎn)環(huán)境正常業(yè)務(wù)的提供,甚至測試環(huán)境中不成熟的應(yīng)用和業(yè)務(wù)運行時可能對環(huán)境造成破壞性的影響。因此對生產(chǎn)環(huán)境和測試環(huán)境進行物理隔離,兩者獨立運行,互不干擾,防止因硬件資源的占用或者搶奪對運行造成不必要的影響。保證系統(tǒng)運行的安全和資源的有效利用,進一步保障銀行的安全生產(chǎn)。

解決了生產(chǎn)測試可能造成的互相干擾的問題,接下來我們還要考慮各種不同類型應(yīng)用的部署和運行。在Z銀行的應(yīng)用場景中,大數(shù)據(jù)平臺上運行的應(yīng)用分為在線應(yīng)用和離線應(yīng)用兩大類。作為大數(shù)據(jù)平臺,就必須要對在線應(yīng)用和離線應(yīng)用的運行提供基本的運行規(guī)劃,為應(yīng)用的部署提供依據(jù),因為不用的應(yīng)用在同一套物理集群上部署運行時,同樣會出現(xiàn)資源競爭的情形。

1)不同應(yīng)用所用資源的隔離,解決在線類應(yīng)用和離線類應(yīng)用在運行時的資源爭搶問題。

對于目前的業(yè)務(wù)場景,MapReduce任務(wù)、Hive為離線應(yīng)用,HBase服務(wù)為在線應(yīng)用,提供實時查詢服務(wù)。部署方式如下圖所示:

36大數(shù)據(jù)

在線應(yīng)用與離線應(yīng)用資源隔離

集群中的數(shù)據(jù)都是基于HDFS進行存放的,因此對于屬于同一個集群內(nèi)的應(yīng)用的數(shù)據(jù)隔離,可通過設(shè)置不同的HDFS目錄存放的方式實現(xiàn)。不同應(yīng)用屬于不同的用戶,不同的應(yīng)用使用不同的目錄,然后通過對目錄進行權(quán)限配置的方式進行隔離和共享。

2)不用應(yīng)用運行時計算資源的隔離考慮,解決運行時內(nèi)存和CPU的調(diào)度問題。主要包括如下兩種手段:

  • YARN自動均衡
  • 通過調(diào)度器指定

由于MapReduce任務(wù)運行時往往會占用大量的CPU和磁盤資源,為保證自身或者其他任務(wù)的正常執(zhí)行,對MapReduce也要進行隔離。

對于普通MapReduce任務(wù)的隔離通過YARN自身的機制完成。在YARN中,資源管理由ResourceManager和NodeManager共同完成,其中ResourceManager中的調(diào)度器負(fù)責(zé)資源的分配,NodeManager負(fù)責(zé)資源的供給和隔離。ResourceManager將某個NodeManager上資源分配給任務(wù)后,NodeManager按照要求為任務(wù)提供相應(yīng)的資源,保證這些資源具有獨占性,為任務(wù)運行提供基礎(chǔ)的保證。

另外MapReduce任務(wù)實時性要求不高,可通過為各個MapReduce任務(wù)單獨規(guī)劃運行時間段的方式來輔助隔離,避免多個應(yīng)用同時運行時出現(xiàn)資源搶占的情況。其中對于任務(wù)的執(zhí)行時間,需要通過先在測試環(huán)境中運行采集,再通過等比例推算評估的方式獲得,防止出現(xiàn)某個MapReduce任務(wù)的實際運行時間超出了配置時間。

而對于某些用戶認(rèn)為重要或者特殊(由用戶自主決定)的MapReduce任務(wù)的隔離可通過設(shè)置專用調(diào)度器的方式完成。為應(yīng)用設(shè)定調(diào)度隊列,并為隊列指定專屬服務(wù)器,通過將MapReduce任務(wù)指定在某臺服務(wù)器上運行的方式達(dá)到隔離的目的。而其他普通的MapReduce應(yīng)用則無權(quán)使用該專屬服務(wù)器的資源。

3)對不同功能的在線服務(wù)數(shù)據(jù)進行隔離,保證重點在線應(yīng)用的正常運行。

需要單獨規(guī)劃HBase集群,且該集群基于一套獨立的HDFS運行,從物理上和邏輯上和其他在線集群都進行隔離。該HBase集群的數(shù)據(jù)來源問題可通過兩種方式解決:接口程序或者基于distcp的集群拷貝。

對于少量的數(shù)據(jù)遷移可通過接口程序?qū)崿F(xiàn),對于大量的數(shù)據(jù)遷移可通過distcp的方式進行。后者需要先在離線應(yīng)用服務(wù)集群內(nèi)對數(shù)據(jù)進行處理,生成HFile文件,再通過distcp將文件拷貝到在線應(yīng)用集群,再在在線應(yīng)用集群內(nèi)執(zhí)行數(shù)據(jù)導(dǎo)入到HBase的操作。在線應(yīng)用服務(wù)再基于導(dǎo)入的數(shù)據(jù)對外提供實時查詢服務(wù)。如下圖所示:

2

另外由于MapReduce任務(wù)在運行時對磁盤、CPU等要求較高,當(dāng)MapReduce的Job和HBase等部署在一臺服務(wù)器運行時,容易對HBase服務(wù)造成影響(響應(yīng)很慢,長時間等待)。所以在同一套HDFS內(nèi),在服務(wù)器比較充足的情形下,也建議對MapReduce任務(wù)的運行和HBase服務(wù)也需要進行隔離。將HBase服務(wù)指定在集群中的某些服務(wù)器上運行,MapReduce任務(wù)指定在集群中的其他服務(wù)器上運行。通過部署不同的基礎(chǔ)服務(wù)在不同的服務(wù)器上的方式來實現(xiàn)。

為了節(jié)省資源,我們提供了一種基于一套HDFS來實現(xiàn)對多套HBase支撐的實現(xiàn),不用的HBase共用一套Zookeeper,部署方式見下圖:

3

所有HBase集群基于同一套zookeeper實現(xiàn),每個集群包含各自的HMaster和Region Server,可對外獨立提供在線查詢服務(wù)。通過調(diào)用HBase java api實現(xiàn)HBase客戶端訪問集群內(nèi)的HBase集群。由于使用相同的HDFS存儲,為了防止相同的表存儲空間重疊,不同的HBase集群使用不同的存儲路徑。同時為了區(qū)分Zookeeper中存儲的rootdnode路徑,也需要修改配置文件。不同的HBase集群對外提供不同類型的數(shù)據(jù)查詢服務(wù)。對于同一個HBase服務(wù),可通過對列和表的所屬權(quán)配置實現(xiàn)對HBase的訪問控制。

實際部署

Z銀行的實際部署如下圖所示:

4

大數(shù)據(jù)平臺上運行的應(yīng)用分為在線應(yīng)用(HBase服務(wù))和離線應(yīng)用(MapReduce服務(wù))兩大類。Z銀行大數(shù)據(jù)平臺分為基礎(chǔ)集群和在線集群。

基礎(chǔ)集群用于接收外部導(dǎo)入的數(shù)據(jù),并對數(shù)據(jù)進行加工處理,主要通過MapReduce任務(wù)對數(shù)據(jù)進行基礎(chǔ)加工。

在線集群是為保證重點在線應(yīng)用的正常運行而單獨規(guī)劃的區(qū)域,第一期是由歷史數(shù)據(jù)平臺1個HBase集群構(gòu)成,后期再擴展個人綜合對賬單系統(tǒng)以及反洗錢風(fēng)險管理系統(tǒng)。

基礎(chǔ)集群和在線集群相互關(guān)系說明如下:

每個集群都基于一套獨立的HDFS運行,這樣從物理上和邏輯上與其他集群都進行隔離。在線集群的數(shù)據(jù)都來源于基礎(chǔ)集群,依靠本地萬兆網(wǎng)實現(xiàn)高效的傳輸。在線應(yīng)用服務(wù)基于導(dǎo)入的數(shù)據(jù)對外提供實時查詢服務(wù)。

基礎(chǔ)集群以及歷史數(shù)據(jù)平臺集群各自基于一套Zookeeper實現(xiàn),每個集群包含各自的Master和RegionServer。

整個集群中部署一套CBDP-Manager用于實現(xiàn)集群的管理,并且該Manager單獨使用一套單機MariaDB實現(xiàn)管理數(shù)據(jù)、告警數(shù)據(jù)、性能數(shù)據(jù)的存儲。

交付效果

整套大數(shù)據(jù)平臺在部署后一直平穩(wěn)運行,效果得到客戶的一致稱贊,并成為客戶的集團內(nèi)的典型案例。在后續(xù)的擴容中,也是非常的方便簡潔,在短時間內(nèi)即完成了擴容升級。

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }