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

熱線電話:13121318867

登錄
首頁精彩閱讀大索引技術(shù),大數(shù)據(jù)的未來_數(shù)據(jù)分析師培訓(xùn)
大索引技術(shù),大數(shù)據(jù)的未來_數(shù)據(jù)分析師培訓(xùn)
2015-03-22
收藏

大索引技術(shù),大數(shù)據(jù)的未來_數(shù)據(jù)分析師培訓(xùn)


不管你信也好,不信也好,大數(shù)據(jù)時(shí)代真的來臨了,隨著Hadoop技術(shù)的普及,其生態(tài)圈發(fā)展的越來越壯大,Hive、Hbase、Spark、Storm等的一系列新名詞不斷的涌現(xiàn)在我們的眼里。似乎NoSQL一夜間,攻陷了全部的大數(shù)據(jù)陣地。
 
那么傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的一些思路,真的沒有用武之地了么?真的就一去不復(fù)返了么?當(dāng)大數(shù)據(jù)技術(shù)大旗在每個(gè)山頭搖擺的時(shí)候,我們躲在角落里還能做些什么?“索引”,沒錯(cuò),數(shù)據(jù)庫時(shí)代的必殺,大數(shù)據(jù)的利器。
 
當(dāng)大數(shù)據(jù)使用上大索引后有什么好處?
1. 索引技術(shù)大幅度的加快數(shù)據(jù)的檢索速度。
2. 索引技術(shù)可以顯著減少查詢中分組、統(tǒng)計(jì)和排序的時(shí)間。
3. 索引技術(shù)大幅度的提高系統(tǒng)的性能和響應(yīng)時(shí)間,從而節(jié)約資源。
 
這個(gè)大索引系統(tǒng)應(yīng)該什么樣?
 1.數(shù)據(jù)規(guī)模:超過萬億甚至十萬億。
 2.數(shù)據(jù)時(shí)效性高:數(shù)據(jù)從產(chǎn)生到能夠查詢到結(jié)果這個(gè)間隔不會(huì)超過30秒。
 3.查詢響應(yīng)要快:從幾萬億規(guī)模的數(shù)據(jù)里,查詢到相關(guān)數(shù)據(jù),響應(yīng)時(shí)間為毫秒或者幾秒。
 4.支持容災(zāi):要能夠支撐可靠的容災(zāi),并且保證良好的數(shù)據(jù)的準(zhǔn)確性。
 5. 能夠與現(xiàn)有的大數(shù)據(jù)系統(tǒng)進(jìn)行較好的融合,方便之間的交互(數(shù)據(jù)導(dǎo)入導(dǎo)出)。
 
存在哪些問題?
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的索引目前存在如下幾個(gè)問題,是我們需要改進(jìn)的。

1. 索引存儲(chǔ)在本地硬盤
首先是分散在機(jī)器的每個(gè)硬盤上,索引不容易管理,容災(zāi)與高可用的實(shí)現(xiàn)代價(jià)較高。
其次是索引的遷移成本以及單機(jī)硬盤的大小制約了其索引規(guī)模和大小。
最后是如果是通過冗余("master/slave"或者"雙寫")等方式實(shí)現(xiàn)數(shù)據(jù)容災(zāi),數(shù)據(jù)一致性的設(shè)計(jì)難度較大。

2. 表的管理,索引,調(diào)度曾混雜在一起,集群規(guī)模上不去。
索引數(shù)據(jù)、計(jì)算資源摻雜在一起,調(diào)度系統(tǒng)管理的事情太多,既要管理索引,又要管理心跳,也要維護(hù)容災(zāi),導(dǎo)致調(diào)度系統(tǒng)的機(jī)器規(guī)模上不來。同一個(gè)計(jì)算資源只分配給固定的索引數(shù)據(jù)導(dǎo)致計(jì)算資源太多的浪費(fèi)。

3. 對硬件要求太高
數(shù)據(jù)必須長期持久的滯留在內(nèi)存中,否則無法快速的加載和查詢數(shù)據(jù),對硬件要求較高一般都是需要大內(nèi)存(48G以上)以及SSD硬盤,百億規(guī)模的數(shù)據(jù)甚至需要數(shù)百臺(tái)機(jī)器來支撐快速的查詢,對于萬億規(guī)模的數(shù)據(jù)來說成本太高。
 
應(yīng)該如何改進(jìn)?
隨著基于Docker on Gaia (騰訊版的Yarn)技術(shù)的趨于成熟以及在HDFS中的索引技術(shù)的成熟和性能的提升,低延遲的萬億規(guī)模的索引技術(shù)有了希望。
1.Gaia本身是一套完美的任務(wù)調(diào)度系統(tǒng),他解決了Hadoop1.0版本Jobtracker調(diào)度的不足,調(diào)度延遲時(shí)間大大縮小,并且適合實(shí)時(shí)的即席任務(wù)調(diào)度,啟動(dòng)的任務(wù)是可以長久的持久化的運(yùn)行的,并且有很好的容災(zāi)機(jī)制。

2.Docker解決了復(fù)雜的環(huán)境的依賴的問題,簡化了Hermes繁雜的部署步驟。

3.索引可以直接存放在HDFS中,通過HFDS來解決數(shù)據(jù)的容災(zāi)問題,讓業(yè)務(wù)能更專注索引的實(shí)現(xiàn)。目前也不要說HDFS性能很差了,那是過去,現(xiàn)在來看,HDFS結(jié)合Hermes的BlockBuffer后性能還是很不錯(cuò)的。

Hermes大數(shù)據(jù)大索引的一個(gè)實(shí)現(xiàn)
我們實(shí)現(xiàn)Hermes on Docker的版本,該版本的設(shè)計(jì)有如下幾個(gè)特點(diǎn)。

1.易于使用與部署,幾個(gè)Jar包幾個(gè)Submit命令,服務(wù)直接在Docker上啟動(dòng),不再需要部署復(fù)雜的環(huán)境。

2.將索引數(shù)據(jù)與計(jì)算資源的分開,不再交叉的放在一起,分別管理,劃清界限,減少程序設(shè)計(jì)復(fù)雜度。計(jì)算資源的管理直接交給Gaia來處理,從而提升集群的規(guī)模。

3.一個(gè)計(jì)算資源不再固定的負(fù)責(zé)一個(gè)索引,而是根據(jù)實(shí)際的計(jì)算需要,處理不同的索引,這比之前一個(gè)資源(CPU+內(nèi)存)固定的分配給一個(gè)索引利用率會(huì)高很多,因?yàn)椴⒉皇敲看螜z索和查詢都需要掃描全部的數(shù)據(jù),有些數(shù)據(jù)根本就不需要或者很少去查,就沒必要讓他們長期的占用一個(gè)資源。

4.索引會(huì)直接存儲(chǔ)在HDFS上,通過HDFS來實(shí)現(xiàn)數(shù)據(jù)的高可用,這樣程序的設(shè)計(jì)復(fù)雜性就會(huì)減少很多,不再擔(dān)心本地硬盤的問題(是否損壞,是否已滿,硬盤損壞時(shí)遷移時(shí)間過長),也不用擔(dān)心各種網(wǎng)絡(luò)的問題,理論上HDFS上有多大的空間,我們就可以存儲(chǔ)多少索引,不再受限于本地磁盤大小的限制,數(shù)據(jù)規(guī)??梢院苋菀椎乃酵卣?。

5.索引的管理將會(huì)充分的放權(quán),采用HDFS的目錄形式的層次結(jié)構(gòu),便于管理,外部可以自由的配置索引的存儲(chǔ)目錄,根據(jù)不同業(yè)務(wù)的需要,索引可以按照時(shí)間進(jìn)行打散,按照時(shí)間進(jìn)行目錄分區(qū),也可以按照某些用戶ID進(jìn)行hash,也可以按照某些業(yè)務(wù)來管理配置不同的生命周期。

6.這個(gè)版本的Hermes除了可以單獨(dú)對外提供服務(wù),也會(huì)更加的開放,對外提供索引服務(wù),提供了很多拓展功能,現(xiàn)有的Hive以及Spark可以很方便的通過類似InputFormat或RDD的方式直接使用大索引。同時(shí)可以方便的與HDFS,Hbase,Hive,進(jìn)行交互,也可以通過自定義實(shí)時(shí)的消費(fèi)Kafka,MetaQ等消息隊(duì)列的數(shù)據(jù)。

試想下,Spark在利用上這個(gè)大索引后,一個(gè)幾萬億的數(shù)據(jù),幾秒鐘就返回結(jié)果,而且還支持很多的復(fù)雜查詢,是不是很值得期待呢 。

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

若不方便掃碼,搜微信號(hào):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(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) 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){ //倒計(jì)時(shí)完成 $(".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); }