自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用Hadoop,還是不用Hadoop?

開發(fā) 項(xiàng)目管理 前端 Hadoop
Hadoop通常被認(rèn)定是能夠幫助你解決所有問題的唯一方案。 當(dāng)人們提到“大數(shù)據(jù)”或是“數(shù)據(jù)分析”等相關(guān)問題的時候,會聽到脫口而出的回答:Hadoop!實(shí)際上Hadoop被設(shè)計和建造出來,是用來解決一系列特 定問題的。

Hadoop通常被認(rèn)定是能夠幫助你解決所有問題的唯一方案。 當(dāng)人們提到“大數(shù)據(jù)”或是“數(shù)據(jù)分析”等相關(guān)問題的時候,會聽到脫口而出的回答:Hadoop!實(shí)際上Hadoop被設(shè)計和建造出來,是用來解決一系列特 定問題的。對某些問題來說,Hadoop至多算是一個不好的選擇。對另一些問題來說,選擇Hadoop甚至?xí)且粋€錯誤。對于數(shù)據(jù)轉(zhuǎn)換的操作,或者更廣泛 意義上的抽?。D(zhuǎn)換-裝載的操作(譯者注:Extraction Transformation Load,ETL,數(shù)據(jù)倉庫中對數(shù)據(jù)從初始狀態(tài)到可用狀態(tài)處理過程的經(jīng)典定義), 使用Hadoop系統(tǒng)能夠得到很多好處, 但是如果你的問題是下面5類之中的一個的話,Hadoop可能會是一不合適的解決方案。

1.對于大數(shù)據(jù)的渴望

很多人相信他們擁有正真“大”的數(shù)據(jù), 但通常情況并非如此。 當(dāng)考慮數(shù)據(jù)容量和理解大多數(shù)人對“大數(shù)據(jù)”處理的想法的時候, 我們應(yīng)當(dāng)參考這篇研究論文, 沒有人會因?yàn)橘I了一個集群的服務(wù)器而被辭退, 它告訴了我們一些有趣的事實(shí)。 Hadoop是被設(shè)計成用來處理在TB或PB級別的數(shù)據(jù)的, 而世界上大多數(shù)的計算任務(wù)處理的是100GB以下的輸入數(shù)據(jù)。(Microsoft和Yahoo在這個數(shù)據(jù)統(tǒng)計上的中位數(shù)是14GB,而90% Facebook的任務(wù)處理的是100GB以下的數(shù)據(jù))。對于這樣的情況來說, 縱向擴(kuò)展的解決方案就會在性能上勝過橫向擴(kuò)展(scale-out)的解決方案。

(譯者注:縱向擴(kuò)展scale-up通常是指在一臺機(jī)器上增加或更換內(nèi)存、CPU、硬盤或網(wǎng)絡(luò)設(shè)備等硬件來實(shí)現(xiàn)系統(tǒng)整體性能的提升, 橫向擴(kuò)展(scale-out)指的是通過在集群中增加機(jī)器來提升集群系統(tǒng)整體性能的提升。論文中比較了對Hadoop系統(tǒng)進(jìn)行各種縱向擴(kuò)展和橫向擴(kuò)展之 后, 在性能指標(biāo)上進(jìn)行評測的試驗(yàn)。結(jié)論是在某些情況下在一臺機(jī)器上的縱向擴(kuò)展會比在Hadoop集群中增加機(jī)器得到更高的系統(tǒng)性能,而且性價比會更好。這個結(jié) 論打破了大多數(shù)人對Hadoop系統(tǒng)的簡單認(rèn)識, 那就是一定要用若干廉價的機(jī)器組成集群才能到達(dá)最好的整體性能。 )

所以你需要問自己:

  • 我是否有超過幾個TB的數(shù)據(jù)?
  • 我是否有穩(wěn)定、海量的輸入數(shù)據(jù)?
  • 我有多少數(shù)據(jù)要操作和處理?

2.你在隊(duì)列中

當(dāng)你在Hadoop系統(tǒng)中提交計算任務(wù)的時候, 最小的延遲時間是1分鐘 。 這意味系統(tǒng)對于客戶的商品購買信息要花1分鐘的時間才能響應(yīng)并提供相關(guān)商品推薦。這要求系統(tǒng)有非常忠實(shí)和耐心的客戶, 盯著電腦屏幕超過60秒鐘等待結(jié)果的出現(xiàn)。 一種好的方案是將庫存中的每一件商品都做一個預(yù)先的相關(guān)商品的計算, 放在Hadoop上。 然后提供一個網(wǎng)站,或者是移動應(yīng)用來訪問預(yù)先存儲的結(jié)果,達(dá)到1秒或以下的即時響應(yīng)。 Hadoop是一個非常好的做預(yù)先計算的大數(shù)據(jù)引擎。 當(dāng)然,隨著需要返回的數(shù)據(jù)越來越復(fù)雜,完全的預(yù)先計算會變得越來越?jīng)]有效率。

所以你需要問自己:

  • 用戶期望的系統(tǒng)響應(yīng)時間大概在什么范圍?
  • 哪些計算任務(wù)是可以通過批處理的方式來運(yùn)行的?

(譯者注:原作者應(yīng)該是用了B2C電子商務(wù)網(wǎng)站上經(jīng)典的商品推薦功能作為用例,描述如何用Hadoop實(shí)現(xiàn)這個功能。)

3.你的問題會在多少時間內(nèi)得到響應(yīng)

對于要求實(shí)時響應(yīng)查詢的問題來說,Hadoop并不是一個好的解決方案。Hadoop的計算任務(wù)要在map和reduce上花費(fèi)時間, 并且在shuffle階段還要花時間。 這些過程都不是可以在限定時間內(nèi)可以完成的, 所以Hadoop并不適合用于開發(fā)有實(shí)時性需求的應(yīng)用。一個實(shí)際的例子是,在期貨或股票市場的程序化交易系統(tǒng)(Program Trading)中用到的成交量加權(quán)平均價格(Volume-weighted average price,VWAP)的計算,通常是實(shí)時的。這要求交易系統(tǒng)在限定時間內(nèi)將結(jié)果給到用戶,使得他們能夠進(jìn)行交易。

(譯者注:Hadoop的MapReduce中的shuffle過程指的是將多個map任務(wù)的結(jié)果分配給一個或多個reduc任務(wù)是的數(shù)據(jù)洗牌和分配的操作,這篇blog解釋的比較詳細(xì),http://langyu.iteye.com/blog/992916 。 這里的用例是在投資銀行的程序交易中,如何計算股票或期貨交易的基準(zhǔn)價格。 這樣的計算我覺得每次對數(shù)據(jù)的查詢響應(yīng)時間應(yīng)該是在100ms以下的,詳見http://baike.baidu.com/view/1280239.htm,http://baike.baidu.com/view/945603.htm。關(guān)于這個例子,相信投行的xdjm們應(yīng)該有更多的發(fā)言權(quán)。)

對數(shù)據(jù)分析人員來說, 他們實(shí)際上非常想使用SQL這樣的查詢語言的。Hadoop系統(tǒng)并不能很好地支持對存儲在Hadoop上的數(shù)據(jù)的隨即訪問 。即便你使用了HIVE來幫助將你的類似SQL的查詢轉(zhuǎn)換成特定MapReduce計算任務(wù)的時候, 數(shù)據(jù)的隨機(jī)訪問也不是Hadoop的強(qiáng)項(xiàng)。Google的Dremel系統(tǒng)(和它的擴(kuò)展, BigQuery系統(tǒng))被設(shè)計成能夠在幾秒中之內(nèi)返回海量的數(shù)據(jù)。啟示SQL還能夠很好地支持?jǐn)?shù)據(jù)表之間的各種join操作。 另外一些支持實(shí)時響應(yīng)的技術(shù)方案包括,從Berkley 加州分校(University of California, Berkeley)的AmpLab誕生的Shark項(xiàng)目, 以及Horntoworks領(lǐng)導(dǎo)的Stinger項(xiàng)目等。

所以你需要問自己:

  • 你的用戶和分析人員期望的數(shù)據(jù)訪問的交互性和實(shí)時性要求是怎樣的?
  • 你的用戶希望要能夠訪問TB級別的數(shù)據(jù)嗎,還是只需要訪問其中的一部分?jǐn)?shù)據(jù)?

(譯者注:Apache Hive 是Hadoop生態(tài)系統(tǒng)中的一個開源項(xiàng)目,其主要目的是在Hadoop系統(tǒng)上提供接近ANSI SQL的數(shù)據(jù)操作,以方便熟悉SQL語言的數(shù)據(jù)分析人員對Hadoop上的數(shù)據(jù)進(jìn)行查詢。Dremel 系統(tǒng)是Google開發(fā)的支持大數(shù)據(jù)的實(shí)時查詢系統(tǒng),它利用了精心設(shè)計的列式存儲結(jié)構(gòu)和大規(guī)模并行查詢的機(jī)制, 在測試中能夠到達(dá)在3秒內(nèi)在分析和查詢1PB數(shù)據(jù)的性能(英文論文,中文翻譯 )。 BigQuery是Google基于Dremel開發(fā)出的開放給開發(fā)人員的SaaS服務(wù),可以對大量數(shù)據(jù)進(jìn)行操作  。Berkeley Data Analytics Stack, BDAS 是AmpLab提供的基于Hadoop的大數(shù)據(jù)平臺, 包含多個開源項(xiàng)目, 詳見https://amplab.cs.berkeley.edu/software/。 Spark項(xiàng)目是BDAS中的一個項(xiàng)目, 它使用Scala語言開發(fā),提供了類似于SQL的數(shù)據(jù)操作接口,完全兼容Hive。其主要的特點(diǎn)是利用底層的Spark將查詢翻譯為具體的計算任務(wù)。 Spark會通過大量使用Hadoop集群中結(jié)點(diǎn)上內(nèi)存的方式來進(jìn)行數(shù)據(jù)緩存和在內(nèi)存中進(jìn)行實(shí)時計算, 達(dá)到加速查詢和計算的目的。詳見http://shark.cs.berkeley.edu/。 Hortonworks是目前幾家專注于提供基于Hadoop的大數(shù)據(jù)系統(tǒng)和應(yīng)用的公司之一, Stinger是用來  Horontoworks提出的為了提升Hive查詢性能的一系列在基于Hadoop的項(xiàng)目和改進(jìn)的總稱,其主要方法是優(yōu)化Hive的文件存儲格式以及針 對Hive的查詢請求進(jìn)行分析優(yōu)化。)

我們應(yīng)該認(rèn)識到, Hadoop是在批處理的模式下工作的。 這意味著當(dāng)有新的數(shù)據(jù)被添加進(jìn)來的時候, 數(shù)據(jù)處理的計算任務(wù)需要在整個數(shù)據(jù)集合上重新運(yùn)行一遍。所以,隨著數(shù)據(jù)的增長,數(shù)據(jù)分析的時間也會隨之增加。 在實(shí)際情況下,小塊新數(shù)據(jù)的增加、單一種類的數(shù)據(jù)更改或者微量數(shù)據(jù)的更新都會實(shí)時地發(fā)生。通常, 商業(yè)程序都需要根據(jù)這些事件進(jìn)行決策。 然而,不論這些數(shù)據(jù)多么迅速地被輸入到Hadoop系統(tǒng),在Hadoop處理這些數(shù)據(jù)的時候,仍然是通過批處理的方式。Hadoop 2.0的MapReduce框架YARN承諾將解決這個問題。 Twitter使用的Storm平臺是另一個可行的、流行的備選方案。將Storm和例如Kafka這樣的分布式消息系統(tǒng)結(jié)合在一起,可以支持流數(shù)據(jù)處理 和匯總的各種需求。痛苦的是,目前Storm并不支持負(fù)載平衡,但是Yahoo的S4版本中會提供。

#p#

所以你需要問自己:

  • 我的數(shù)據(jù)的生命周期是多長?
  • 我的業(yè)務(wù)需要多迅速地從輸入數(shù)據(jù)中獲得價值?
  • 對我的業(yè)務(wù)來說響應(yīng)實(shí)時的數(shù)據(jù)變化和更新有多重要?

實(shí)時性的廣告應(yīng)用和收集傳感器的監(jiān)控應(yīng)用都要求對流數(shù)據(jù)的實(shí)時處理。 Hadoop以及之上的工具并不是解決這類問題的唯一選擇。 在最近的Indy 500車賽中,邁凱輪車隊(duì)在他們的ATLAS系統(tǒng)中使用了SAP的HANA內(nèi)存數(shù)據(jù)庫產(chǎn)品來進(jìn)行數(shù)據(jù)分析,并結(jié)合Matlab來進(jìn)行各種模擬,對比賽中實(shí) 時得到的賽車遙測數(shù)據(jù)進(jìn)行分析和計算。很多數(shù)據(jù)分析人員認(rèn)為,Hadoop的未來在于能夠支持實(shí)時性和交互性的操作。

(譯者注:YARN是Hadoop2.0采用的新不同于MapReduce的資源管理和任務(wù)處理的框架,它號稱能夠支持比MapReduce更廣的編程模型, 同時實(shí)現(xiàn)對實(shí)時查詢和計算的任務(wù)的支持,詳見http://hortonworks.com/hadoop/yarn/ 。Storm是由Twitter主導(dǎo)的開源項(xiàng)目, 是一種分布式數(shù)據(jù)處理系統(tǒng),其主要特點(diǎn)是能夠很好地支持實(shí)時性要求高的流數(shù)據(jù)處理,詳見http://storm-project.net  。淘寶和阿里巴巴都在使用Storm。Simple Scalable Streaming System, S4 是由Yahoo創(chuàng)建的另外一個實(shí)時流數(shù)據(jù)處理的分布式系統(tǒng),詳見http://incubator.apache.org/s4/ 。這里有一篇網(wǎng)頁引用了很多比較Yahoo S4和Storm的文章,http://blog.softwareabstractions.com/the_software_abstractions/2013/06/links-comparing-yahoo-s4-and-storm-for-continuous-stream-processing-aka-real-time-big-data.html 。Kafka是Apache 的一個開源項(xiàng)目,http://kafka.apache.org/。HANA是 SAP推出的商業(yè)產(chǎn)品,是可一個支持橫向擴(kuò)展的內(nèi)存數(shù)據(jù)庫解決方案,可以支持實(shí)時的大數(shù)據(jù)分析和計算。詳見 http://www.sap.com/HANA。 Matlab是Mathworks公司開發(fā)的一個用于科學(xué)計算的開發(fā)類產(chǎn)品, www.mathworks.com/products/matlab. McLaren 車隊(duì)是著名的英國F1車隊(duì), 它是F1方程式比賽中一支非常成功的隊(duì)伍。同時他們也參加美國著名的Indy 500賽車比賽。他們使用大數(shù)據(jù)平臺處理賽車數(shù)據(jù)來提高賽車成績的故事可以看這篇文章,http://blogs.gartner.com/doug-laney/the-indy-500-big-race-bigger-data/ )

4.我才和我的社交網(wǎng)絡(luò)分手

當(dāng)數(shù)據(jù)能夠被分解為鍵值對,又不用擔(dān)心丟失上下文或者某些數(shù)據(jù)之間隱性關(guān)系的時候,Hadoop,特別是MapReduce框架,是最好的選擇。但 是圖這樣的數(shù)據(jù)結(jié)構(gòu)中包含著各種隱性的關(guān)系, 如圖的邊、子樹 、節(jié)點(diǎn)之間的父子關(guān)系、權(quán)重等,而且這些關(guān)系并非都能在圖中一個結(jié)點(diǎn)上表示。這樣的特性就要求處理圖的算法要在每一次的迭代計算中加入當(dāng)前圖的完整或部分 的信息。 這樣的算法基本上用MapReduce的框架是不可能實(shí)現(xiàn)的,即便能夠?qū)崿F(xiàn)也會是一種很迂回的解決方案。 另外一個問題是如何制定將數(shù)據(jù)切分到不同結(jié)點(diǎn)上的策略。如果你要處理的數(shù)據(jù)的主要數(shù)據(jù)結(jié)構(gòu)是圖或者是網(wǎng)絡(luò), 那么你最好選擇使用面向圖的數(shù)據(jù)庫,比如NeoJ或者Dex。或者你可以去研究一下最新的Google Pregel 或者Apache Giraph項(xiàng)目。

所以你需要問自己:

  • 我的數(shù)據(jù)的底層結(jié)構(gòu)是否和數(shù)據(jù)本身一樣重要?
  • 我希望從數(shù)據(jù)的結(jié)構(gòu)中得到的啟發(fā)和見解,是否和數(shù)據(jù)本身一樣重要, 甚至更重要?

(譯者注:NeoJ 擁有商業(yè)和GPL雙許可證模式,詳見http://www.neo4j.org/,Dex是商業(yè)產(chǎn)品,詳見http://www.sparsity-technologies.com/dex 。Apache Giraph 項(xiàng)目http://giraph.apache.org 是根據(jù)Google Pregel論文http://dl.acm.org/citation.cfm?id=1807184, http://kowshik.github.io/JPregel/pregel_paper.pdf 的開源實(shí)現(xiàn) ,是用來分析社交網(wǎng)絡(luò)這樣可以被抽象為圖或網(wǎng)絡(luò)數(shù)據(jù)結(jié)構(gòu)的大數(shù)據(jù)處理平臺。 )

5.MapReduce的模具

很多的計算任務(wù)、工作及算法從本質(zhì)上來說就是不適合使用MapReduce框架的。 上一章中已經(jīng)談到了其中一類的問題。另一類的問題是,某些計算任務(wù)需要上一步計算的結(jié)果來進(jìn)行當(dāng)前一步的計算。一個數(shù)學(xué)上的例子就是斐波那契數(shù)列的計算。 某些機(jī)器學(xué)習(xí)的算法,如梯度和最大期望等,也不是很適合使用MapReduce的模式。很多研究人員已經(jīng)對實(shí)現(xiàn)這些算法中需要的特定優(yōu)化和策略(全局狀 態(tài),計算時將數(shù)據(jù)結(jié)構(gòu)傳入進(jìn)行引用等)給出了建議,但是如果用Hadoop來實(shí)現(xiàn)具體算法的話,還是會變得很復(fù)雜而且不易被理解。

所以你需要問自己:

  • 我的業(yè)務(wù)是否對特定的算法或者領(lǐng)域相關(guān)的流程有非常高的要求?
  • 技術(shù)團(tuán)隊(duì)是否有足夠的能力和資源來分析算法是否可以使用MapReduce框架?

(譯者注:梯度方法, gradient method通常用于數(shù)學(xué)優(yōu)化計算中,詳見http://zh.wikipedia.org/wiki/%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D%E6%B3%95。最大期望算法maximization expectation algorithm ,通常用于概率模型及相應(yīng)的機(jī)器學(xué)習(xí)算法中, http://zh.wikipedia.org/zh-cn/%E6%9C%80%E5%A4%A7%E6%9C%9F%E6%9C%9B%E7%AE%97%E6%B3%95 )

除此之外,需要考慮另外一些情況, 比如,數(shù)據(jù)總量并不大,或者數(shù)據(jù)集雖然很大,但主要是由上億的小文件組成,而且不能拼接(如,許多圖形文件需要以不同的形狀被輸入進(jìn)來)。正如我們之前說 到的,對于那些不適合使用MapReduce分割、合并原則的計算任務(wù),如果用Hadoop來實(shí)現(xiàn)他們的話,會讓Hadoop的使用變得大費(fèi)周折。

現(xiàn)在我們已經(jīng)分析了在哪些情況下Hadoop不合適,讓我們看一下在哪些情況下使用Hadoop是正確的選擇。

你需要問自己,你的組織是否,

  1. 想要從一堆文本格式的日志文件中抽取信息?
  2. 想要將大多數(shù)是非結(jié)構(gòu)化或者半結(jié)構(gòu)化的數(shù)據(jù)轉(zhuǎn)換為有用的、結(jié)構(gòu)化的格式?
  3. 有沒有計算任務(wù)是每天晚上在整個數(shù)據(jù)集合上運(yùn)行的?(比如說信用卡公司在晚上處理所有白天的交易記錄)
  4. 從一次數(shù)據(jù)處理中獲取的結(jié)論和下一次計劃要處理的結(jié)論是一致的(不像股票市場的價格,每一天都在變化)?

如果以上答案都為“是”,那么你就應(yīng)該深入研究Hadoop。

以上所談到的幾類問題代表了相當(dāng)大部分能夠用Hadoop來解決的商業(yè)問題(盡管很多行業(yè)報告的結(jié)論是將這些類別的Hadoop系統(tǒng)部署到生產(chǎn)環(huán)境 中并不是一件容易的事情)。對于某些計算任務(wù),Hadoop的計算模型是非常合適的。 比如說, 你需要處理海量的非結(jié)構(gòu)化或半結(jié)構(gòu)化的數(shù)據(jù),然后將內(nèi)容進(jìn)行匯總或者將相關(guān)計算結(jié)果轉(zhuǎn)換成結(jié)構(gòu)化的數(shù)據(jù), 并且將結(jié)果提供給其他組件或系統(tǒng)使用。如果收集的數(shù)據(jù)可以很容易地被轉(zhuǎn)換位一個ID以及和它對應(yīng)的內(nèi)容(用Hadoop的術(shù)語來說就是鍵值對,key- value pair),那么你就可以使用這種簡單的關(guān)聯(lián)來進(jìn)行不同種類的匯總計算。

總的來說, 關(guān)鍵是要認(rèn)清你擁有的各種資源,并且理解想要解決的問題的本質(zhì)。 結(jié)合本文提到的一些觀點(diǎn)和你自己的理解和認(rèn)識, 你就能夠選擇最適合你的工具。 在某些情況下, 最終的解決方案很有可能是Hadoop。

你在使用Hadoop方面有哪些經(jīng)驗(yàn)和教訓(xùn)? 請在評論中分享吧。

原文鏈接:http://www.thoughtworks.com/pt/insights/blog/hadoop-or-not-hadoop

譯文鏈接:http://blog.jobbole.com/49470/

責(zé)任編輯:陳四芳 來源: 博樂在線
相關(guān)推薦

2013-10-15 10:18:17

2015-07-23 10:05:24

2019-04-24 13:07:16

HadoopSpark分布式架構(gòu)

2017-03-06 14:24:26

Hadoop炒作選擇

2012-06-21 09:56:50

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

2010-06-04 10:01:26

Hadoop安裝

2016-12-20 18:21:29

Hadoop大數(shù)據(jù)面試

2010-05-24 14:59:29

Hadoop集群

2011-08-30 16:26:34

Hadoop

2010-06-03 15:39:47

Hadoop配置

2017-10-19 15:34:52

Hadoop技術(shù)機(jī)制學(xué)習(xí)

2019-10-11 08:58:21

Hadoop開源

2014-02-14 15:30:18

HadoopYARN

2010-06-03 12:57:06

Hadoop

2010-06-04 09:43:47

hadoop應(yīng)用

2012-08-08 09:53:23

HadoopMapReduce

2017-03-22 20:21:16

Hadoop框架分布式

2010-06-04 17:03:17

實(shí)現(xiàn)Hadoop

2012-06-25 10:30:06

Hadoop集群

2011-12-07 16:11:50

Hadoop集群搭建
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號