放翁(文初)的一畝三分地

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            210 隨筆 :: 1 文章 :: 320 評論 :: 0 Trackbacks

              中午左右收到一個看我blog的朋友的郵件,最近他在研究mapreduce,然后想用hadoop來做一些工作,不過遇到了一些問題,我這邊也貼一下他的幾個問題,同時覺得自己把自己的一些看法分享一下,當(dāng)然只是自己的一些想法,也許對新學(xué)習(xí)的同學(xué)有幫助。

             問題:

          1. 從Map(K,V)的方式來看,難道m(xù)apreduce只能做統(tǒng)計?
          2. 目前我想除了日志分析之類的功能外,還想做一個全文檢索的功能,類似windows查詢一下,通過關(guān)鍵字查詢文件的位置即可(可能還要根據(jù)匹配度做排序),這個我很迷茫不知道怎么下手,痛苦ing
          3. 你的實踐是一個單機模式,如果用戶把一個1G的log已經(jīng)上傳到hdfs了,此時分割工作已經(jīng)完成,只需要從client那里得到文件基本信息和塊的location就可以了,那mapreduce怎么進行下去呢?

             我給回復(fù)的郵件內(nèi)容:

             首先,MapReduce的思想和Hadoop的MapReduce的架構(gòu)不是一個概念,說的具體一點也就是Hadoop的架構(gòu)設(shè)計只是MapReduce的一個子集思想的實現(xiàn)。每個人都可以根據(jù)自己對MapReduce的理解去實現(xiàn)業(yè)務(wù)處理,簡單來說多線程處理就是MapReduce的一種最簡單的實現(xiàn),復(fù)雜來說多機協(xié)調(diào)工作就是一種復(fù)雜的實現(xiàn)。

             MapReduce的思想里面最值得借鑒的:

             a.問題分而治之。(找到流程的關(guān)鍵路徑,優(yōu)化可以并行處理的工作)

             b.計算靠近數(shù)據(jù)。(這也是hdfs存在的最重要的特點,計算的轉(zhuǎn)移往往要比數(shù)據(jù)轉(zhuǎn)移廉價,特別是對海量數(shù)據(jù)的處理)

             c.數(shù)據(jù)規(guī)模化隨著并行處理成數(shù)量級遞減。

             剩下的內(nèi)容就是各個框架對于非業(yè)務(wù)性需求的處理,例如容災(zāi),如何盡量少穿數(shù)據(jù)協(xié)調(diào)處理等等。

             針對他提出的三個問題:

              1. Hadoop的mapreduce從架構(gòu)上來說最適合的就是統(tǒng)計分析計算。做其他方面的工作需要考慮是否適合,而不是為了技術(shù)而技術(shù),先有需求再有技術(shù)選型。
              2.  對于你這個需求直接用搜索技術(shù)實現(xiàn)就可以了,不一定要硬套在mapreduce上。
              3. 對于海量數(shù)據(jù)是否一定要到hdsf上,或者就簡單得數(shù)據(jù)物理或者邏輯切割來直接處理,根據(jù)自己業(yè)務(wù)場景選擇。hdfs的特點就是對文件切割,容災(zāi),數(shù)據(jù)邏輯存儲和物理存儲無關(guān)性(便于擴容管理,同時也是計算靠近數(shù)據(jù)的技術(shù)保證)。

              是否使用MapReduce框架,HDFS存儲關(guān)鍵還是看你是否真的需要,當(dāng)現(xiàn)有框架對自己來說并不合適的時候可以對小規(guī)模問題定制MapReduce的處理,最簡化就是你去多線程或者多進程處理問題,需求決定技術(shù)選型。

            

          posted on 2009-12-09 13:09 岑文初 閱讀(2592) 評論(1)  編輯  收藏

          評論

          # re: 寫在MapReduce問題的回復(fù)后[未登錄] 2009-12-09 13:55 wz
          以下是我自己的一點見解,

          MapReduce的思想是最重要的,基于這個思想會有很多的實現(xiàn),大問題有大問題的實現(xiàn),小問題有小問題的實現(xiàn)。前段時間碰到一個很小的問題,非常復(fù)雜的轉(zhuǎn)化(兩類object之間的轉(zhuǎn)化),如果用普通的方法N多循環(huán),但是如果用MapReduce思想的話就會變的更容易 (不會用到多線程,也不會有大task的split,就是一個純粹的小實現(xiàn)而已)。

          對于一般的應(yīng)用log肯定是不變的道理,可以非常好的應(yīng)用(一般的系統(tǒng)多線程實現(xiàn)就應(yīng)該夠了);除此之外,利用MapReduce的思想,如果一件事情可以分為4步來做,step by step是一種方案(COR),但是我們?nèi)绻鸐apReduce,就可以在第一步做一個split,后面分為多個線程(大的應(yīng)用可以多臺server)去做,最后Master節(jié)點(或者server)再去做一個規(guī)約(Reduce)就好了。

          基于以上思想,如果多臺server能共享內(nèi)存,這樣的話,我們能夠在沒有過多copy(IO)的情況下去做一些business的事情。 JVM level cluster(terracotta是其中一種解決方案)的master/worker其實在某種意義上也算是一個MapReduce了。

          寫的比較亂,不好意思。  回復(fù)  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 富蕴县| 革吉县| 磴口县| 新安县| 阿巴嘎旗| 衡南县| 灌阳县| 洛川县| 德清县| 克东县| 珲春市| 太保市| 福贡县| 汕头市| 葫芦岛市| 肥乡县| 水富县| 兴国县| 保定市| 乌苏市| 红安县| 抚顺县| 香格里拉县| 灵台县| 莱西市| 剑川县| 赣州市| 荆门市| 乐都县| 宁晋县| 漠河县| 武陟县| 遵义市| 元朗区| 化德县| 宁陕县| 台东市| 雅江县| 琼结县| 呈贡县| 正阳县|