MPP 與 Hadoop是什麼關係?

massive parallel process 與 Hadoop有什麼關係,還有之前課上學到過NUMA架構。請大牛解釋一下概念和聯繫!謝謝!


先從NUMA說起吧,NUMA全稱為Non-Uniform Memory Access,是主流服務伺服器為了提高SMP的可擴展性而採用的一種體系結構。主流伺服器一般由多個NUMA節點組成,每個NUMA節點是一個SMP結構,一般由多個CPU組成,並且具有本地內存和IO設備。NUMA節點可以直接訪問本地內存,也可以通過NUMA互聯模塊訪問其他NUMA節點的內存,但是訪問本地內存的速度遠遠高於遠程訪問速度,因此,開發程序要盡量減少不同NUMA節點之間的信息交互。

MPP是一種海量數據實時分析架構。MPP作為一種不共享架構,每個節點運行自己的操作系統和資料庫等,節點之間信息交互只能通過網路連接實現。MPP架構目前被並行資料庫廣泛採用,一般通過scan、sort和merge等操作符實時返回查詢結果。目前採用MPP架構的實時查詢系統有EMC Greenplum、HP Vertica和Google Dremel,這些都是實時數據處理領域非常有特點的系統,尤其是Dremel可以輕鬆擴展到上千台伺服器,並在數秒內完成TB級數據的分析。

Hadoop作為一個開源項目群本身和MPP並沒有什麼直接關係,Hadoop中的子項目MapReduce雖然也是做數據分析處理的,但是一般只適用於離線數據分析,區別與MPP較為明顯。因為Map和Reduce兩個過程涉及到輸出文件的存取和大量網路傳輸,因此往往達不到實時處理的要求。與MapReduce相似的系統還有Microsoft Dryad和Google pregel。

綜上所述,NUMA是一種體系結構,MPP是一種實時海量數據分析架構,而Hadoop是一個關於數據存儲處理的項目群,其中的MapReduce是一種離線海量數據分析架構。


作者:桂能

鏈接:為什麼說HADOOP擴展性優於MPP架構的關係型資料庫? - 桂能的回答

來源:知乎

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

1. hadoop(hive)跟mpp的本質區別是什麼,這個有的時候界限很模糊,比如說存儲,如果我把mpp的存儲架在hdfs上,那存儲模型就沒有區別了,所以地下我打算還是用比較傳統的認知來作區別。

2. hive跟mpp的存儲模型不一樣,hive用的hdfs,而mpp需要自己做切分,自己做切分就帶來動態調整的問題,hdfs的擴展是通過元數據來做的,他有中心節點用來存元數據,在加入新的節點的時候,只需要修改元數據就可以了,所以hdfs的擴展能力是受到管理元數據那台機器的性能限制的,一般來說可以到10k這個規模,再向上就不行了。但是mpp通常採用的是沒有中心節點的存儲模型,比如hash,你每次增加節點的時候,都需要rehash,這樣當規模到了幾百台的時候,擴展能力就下來了。當然,現在可以把存儲架在hdfs上,這樣在存儲上就沒有太大區別了。

3. hive跟mpp的內存管理方式不大一樣,mpp內存管理比較精細,他主要的想法是在每個機器上放個資料庫,傳統資料庫的內存管理比較複雜,主要是內外存交互的東西,這樣的架構決定了mpp在小數據量的時候,latency可以做的比較小,但是在大數據量的時候,throughput做不上去。而hive的內存管理非常粗放,他後來就是mapreduce的job,mr的job是沒有太多精細的內存管理的,他就是拼了命地scan,完了頂多就是個spill,這樣的架構導致throughput很大,但是latency很高,當你集群規模很大的時候,你一般會追求很大的throughput,當數據量很大的時候,如果你用mpp那種傳統的內存管理的話,大批量的計算反而會慢,而且更加佔資源,所以vertica這種一開始就考慮了列式存儲就是這個道理。

4.事務,你可以認為hive不支持傳統意義上的那種高並發的事務,而mpp試圖想要支持,一旦你要上分散式事務,基本上你的可擴展性就上不去了,至於為啥,陳皓有一篇文章寫的不錯,建議看下。hive的ddl是可以多個並發的,但是dml不行,而ddl他是通過傳統的資料庫去做的,所以這個也是個中心節點,dml不行的話,就決定了他可以在底層跑mr這麼重粒度的東西,他跑的時候,會在整個表上面加一把大鎖。

5.failover機制,hive的failover就是mr的failover,job掛掉了重新換機器跑就完了,但是mpp如果採用傳統架構的話,他的計算是要attach到數據節點上去的,如果你規模上去,那麼fail的可能性就上去了,這樣如果你每次計算都有台機器掛了,你一掛,別人就要等你,而不是換台機器繼續跑,那麼這個也限制了可擴展性,當然,如果mpp在底層用了統一的存儲,完了計算也可以到處轉移,再想個辦法把中間狀態記錄下來,也可以擴展(這個實際上就是sparksql)


呵呵,樓上關於MPP描述:實時海量數據分析,個人愚見,有些理想化。

實測對比GreenPlum和Hive,GP比Hive性能高出至少一個數量級,但是大部分場景下,依然是秒級甚至分鐘級的延遲,距離具體通常意義的實時毫秒級,差距巨大。

另外說一句,廣義的Hadoop包括 Impala, Presto | Distributed SQL Query Engine for Big Data 這些MPP架構的SQL引擎。Hadoop社區還在持續發展,Spark(插播廣告,請關注新浪微博 Spark_China)還在持續給人們帶來驚喜,開源軟體的迷人之處也在於此。


MPP架構之間的關係資料庫與Hadoop的理論基礎是極其相似的,都是將運算分布到節點中獨立運算後進行結果合併。個人感覺MPP運行的是Sql,Hadoop底層則處理MapReduce程序,但是我們會經常聽到對於MPP而言,雖然說是也可以橫行擴展Scale OUT,但是這種擴展一般是到100左右,而Hadoop一般可以擴展1000+,這也是經常被大家拿來區分這兩種技術的一個說詞。

  這是為什麼呢?其實可以從CAP理論上來找到一些理由。因為MPP始終還是DB,一定要考慮C(Consistency),其次考慮 A(Availability),最後才在可能的情況下盡量做好P(Partition-tolerance)。而Hadoop就是為了並行處理和存儲設計的,所有數據都是以文件存儲,所以優先考慮的是P,然後是A,最後再考慮C。所以後者的可擴展性當然好於前者。

  以下幾個方面制約了MPP資料庫的擴展

  1、高可用:MPP DB是通過Hash計算來確定數據行所在的物理機器(而Hadoop無需此操作),對存儲位置的不透明導致MPP的高可用很難辦。

  2、並行任務:數據是按照Hash來切分了,但是任務沒有。每個任務,無論大小都要到每個節點去走一圈。

  3、文件系統:數據切分了,但是文件數沒有變少,每個表在每個節點上一定有一到多個文件。同樣節點數越多,存儲的表就越多,導致每個文件系統上有上萬甚至十萬多個文件。

  4、網路瓶頸:MPP強調對等的網路,點對點的連接也消耗了大量的網路帶寬,限制了網路上的線性擴展(想像一台機器可能要給1000台機器發送信息)。更多的節點並沒有提供更高的網路帶寬,反而導致每個組節點間平均帶寬降低。

  5、其他關係資料庫的枷鎖:比如鎖、日誌、許可權、管理節點瓶頸等均限制了MPP規模的擴大。

  但是MPP資料庫有對SQL的完整兼容和一些事務處理功能,對於用戶來說,在實際的使用場景中,如果數據擴展需求不是特別大,需要的處理節點不多,數據都是結構化數據,習慣使用傳統RDBMS的很多特性的場景,可以考慮MPP如Greenplum/Gbase等。

  但是如果有很多非結構化數據,或者數據量巨大,有需要擴展到成百上千個數據節點需求的,這個時候Hadoop是更好的選擇,所以更要了解一下,Hadoop是什麼,主要有哪幾部分組成和Hadoop的影響力? - 大數據 多智時代


題主的問題中涉及幾個不同層次的概念,我來試著捋清楚一下:

1. 先從體系架構上說一下NUMA和 MPP的區別和聯繫:和NUMA對應的SMP,它是為了更好地scale SMP而設計,內部有多個CPU模塊(每個模塊有多個CPU),每個模塊有本地的內存,但是各個CPU也可以訪問其它模塊的內存,當然,訪問本模塊的內存要比其它更快,這就是為什麼稱作非一致性訪問。由於這個特點,NUMA也只能在一些特定workload情況下才能scale得更好,例如當多CPU處理不同data,不會像SMP因為share memory而導致過多的cache miss。相對來說,MPP是「更高」一級的概念,它是多個SMP組合在一起來進行scale的,是一個伺服器集群。總體說來,NUMA更適合OLTP場景,而MPP適合OLAP。

2. 至於MPP與Hadoop的關係,一般對二者進行比較的時候,說的都是MPP based查詢引擎(例如GreenPlum)和Hadoop based (typically batch based,如Hive)查詢引擎之間的比較。關於這兩種方案的具體區別,可以參考這個回答 中提到的參考資料以及這篇文章。現在也有例如cloudera Impala這樣基於Hadoop上的MPP 查詢引擎

總得來說,Hadoop ecosystem對於海量數據處理的是夠用了,但是目前所有主流的"SQL on Hadoop"的solution (不管是batch based Hive, Tez, Spark SQL, 還是MPP based Impala, Presto, Pinot等),都還沒有達到傳統的MPP 引擎例如Teradata的成熟度和性能,這個和HDFS的存儲架構也是有點關係的,是個比較難解決的問題。


ClickHouse 也是MPP架構


Massively parallel

WIKI請參考


推薦閱讀:

如何讓我的matlab內存使用率達百分之百?
寫大規模三維並行計算流體力學(CFD)求解器時,有什麼經驗和心得?
哪種函數式語言更適合多核的並行和並發編程?
coursera上有沒有關於分散式系統,並行計算,linux內核,多線程編程的課程?
人腦的並行計算能力有多強?

TAG:Hadoop | 海量數據處理 | 並行計算 |