如何挑選合適的大資料或Hadoop平臺?

infoq發表於2013-10-10

  今年,大資料在很多公司都成為相關話題。雖然沒有一個標準的定義來解釋何為 “大資料”,但在處理大資料上,Hadoop已經成為事實上的標準。IBM、Oracle、SAP、甚至Microsoft等幾乎所有的大型軟體提供商都採用了Hadoop。然而,當你已經決定要使用Hadoop來處理大資料時,首先碰到的問題就是如何開始以及選擇哪一種產品。你有多種選擇來安裝Hadoop的一個版本並實現大資料處理。本文討論了不同的選擇,並推薦了每種選擇的適用場合。

 Hadoop平臺的多種選擇

  下圖展示了Hadoop平臺的多種選擇。你可以只安裝Apache 釋出版本,或從不同提供商所提供的幾個發行版本中選擇一個,或決定使用某個大資料套件。每個發行版本都包含有Apache Hadoop,而幾乎每個大資料套件都包含或使用了一個發行版本,理解這一點是很重要的。

  下面我們首先從Apache Hadoop開始來好好看看每種選擇。

 Apache Hadoop

  Apache Hadoop專案的目前版本(2.0版)含有以下模組:

  • Hadoop通用模組:支援其他Hadoop模組的通用工具集。
  • Hadoop分散式檔案系統(HDFS):支援對應用資料高吞吐量訪問的分散式檔案系統。
  • Hadoop YARN:用於作業排程和叢集資源管理的框架。
  • Hadoop MapReduce:基於YARN的大資料並行處理系統。

  在本地系統上獨立安裝Apache Hadoop是非常容易的(只需解壓縮並設定某些環境變數,然後就可以開始使用了)。但是這隻合適於入門和做一些基本的教程學習。

  如果你想在一個或多個“真正的節點”上安裝Apache Hadoop,那就複雜多了。

 問題1:複雜的叢集設定

  你可以使用偽分散式模式在單個節點上模擬多節點的安裝。你可以在單臺伺服器上模擬在多臺不同伺服器上的安裝。就算是在該模式下,你也要做大量的配置工作。如果你想設定一個由幾個節點組成的叢集,毫無疑問,該過程就變得更為複雜了。要是你是一個新手管理員,那麼你就不得不在使用者許可權、訪問許可權等諸如此類的問題中痛苦掙扎。

 問題2: Hadoop生態系統的使用

  在Apache中,所有專案之間都是相互獨立的。這是很好的一點!不過Hadoop生態系統除了包含Hadoop外,還包含了很多其他Apache專案:

  • Pig:分析大資料集的一個平臺,該平臺由一種表達資料分析程式的高階語言和對這些程式進行評估的基礎設施一起組成。
  • Hive:用於Hadoop的一個資料倉儲系統,它提供了類似於SQL的查詢語言,通過使用該語言,可以方便地進行資料彙總,特定查詢以及分析存放在Hadoop相容檔案系統中的大資料。
  • Hbase:一種分佈的、可伸縮的、大資料儲存庫,支援隨機、實時讀/寫訪問。
  • Sqoop:為高效傳輸批量資料而設計的一種工具,其用於Apache Hadoop和結構化資料儲存庫如關聯式資料庫之間的資料傳輸。
  • Flume:一種分散式的、可靠的、可用的服務,其用於高效地蒐集、彙總、移動大量日誌資料。
  • ZooKeeper:一種集中服務,其用於維護配置資訊,命名,提供分散式同步,以及提供分組服務。
  • 還有其他一些專案。

  你需要安裝這些專案,並手動地將它們整合到Hadoop中。

  你需要自己留意不同的版本和釋出版本。不幸的是,不是所有的版本都能在一起完美地執行起來。你要自己比較釋出說明並找出解決之道。Hadoop提供了眾多的不同版本、分支、特性等等。跟你從其他專案瞭解的1.0、1.1、2.0這些版本號不同,Hadoop的版本可遠沒這麼簡單。如果你想更進一步瞭解關於“Hadoop版本地獄”的細節,請閱讀“大象的家譜(Genealogy of elephants)”一文。

 問題3:商業支援

  Apache Hadoop只是一個開源專案。這當然有很多益處。你可以訪問和更改原始碼。實際上有些公司使用並擴充套件了基礎程式碼,還新增了新的特性。很多討論、文章、部落格和郵件列表中都提供了大量資訊。

  然而,真正的問題是如何獲取像Apache Hadoop這樣的開源專案的商業支援。公司通常只是為自己的產品提供支援,而不會為開源專案提供支援(不光是Hadoop專案,所有開源專案都面臨這樣的問題)。

 何時使用Apache Hadoop

  由於在本地系統上,只需10分鐘左右就可完成其獨立安裝,所以Apache Hadoop很適合於第一次嘗試。你可以試試WordCount示例(這是Hadoop的“hello world”示例),並瀏覽部分MapReduce的Java程式碼 。

  如果你並不想使用一個“真正的”Hadoop發行版本(請看下一節)的話,那麼選擇Apache Hadoop也是正確的。然而,我沒有理由不去使用Hadoop的一個發行版本——因為它們也有免費的、非商業版。

  所以,對於真正的Hadoop專案來說,我強烈推薦使用一個Hadoop的發行版本來代替Apache Hadoop。下一節將會說明這種選擇的優點。

 Hadoop發行版本

  Hadoop發行版本解決了在上一節中所提到的問題。發行版本提供商的商業模型百分之百地依賴於自己的發行版本。他們提供打包、工具和商業支援。而這些不僅極大地簡化了開發,而且也極大地簡化了操作。

  Hadoop發行版本將Hadoop生態系統所包含的不同專案打包在一起。這就確保了所有使用到的版本都可以順當地在一起工作。發行版本會定期釋出,它包含了不同專案的版本更新。

  發行版本的提供商在打包之上還提供了用於部署、管理和監控Hadoop叢集的圖形化工具。採用這種方式,可以更容易地設定、管理和監控複雜叢集。節省了大量工作。

  正如上節所提到的,獲取普通Apache Hadoop專案的商業支援是很艱難的,而提供商卻為自己的Hadoop發行版本提供了商業支援。

 Hadoop發行版本提供商

  目前,除了Apache Hadoop外, HortonWorks、Cloudera和MapR三駕馬車在釋出版本上差不多齊頭並進。雖然,在此期間也出現了其他的Hadoop發行版本。比如EMC公司的Pivotal HD、IBM的InfoSphere BigInsights。通過Amazon Elastic MapReduce(EMR),Amazon甚至在其雲上提供了一個託管的、預配置的解決方案。

  雖然很多別的軟體提供商沒有開發自己的Hadoop發行版本,但它們和某一個發行版本提供商相互合作。舉例來說,Microsoft和Hortonworks相互合作,特別是合作將Apache Hadoop引入到Windows Server作業系統和Windows Azure雲服務中。另外一個例子是,Oracle通過將自己的軟硬體與Cloudera的Hadoop發行版本結合到一起,提供一個大資料應用產品。而像SAP、Talend這樣的軟體提供商則同時支援幾個不同的發行版本。

 如何選擇合適的Hadoop發行版本?

  本文不會評估各個Hadoop的發行版本。然而,下面會簡短地介紹下主要的發行版本提供商。在不同的發行版本之間一般只有一些細微的差別,而提供商則將這些差別視為祕訣和自己產品的與眾不同之處。下面的列表解釋了這些差別:

  • Cloudera:最成型的發行版本,擁有最多的部署案例。提供強大的部署、管理和監控工具。Cloudera開發並貢獻了可實時處理大資料的Impala專案。
  • Hortonworks:不擁有任何私有(非開源)修改地使用了100%開源Apache Hadoop的唯一提供商。Hortonworks是第一家使用了Apache HCatalog的後設資料服務特性的提供商。並且,它們的Stinger開創性地極大地優化了Hive專案。Hortonworks為入門提供了一個非常好的,易於使用的沙盒。Hortonworks開發了很多增強特性並提交至核心主幹,這使得Apache Hadoop能夠在包括Windows Server和Windows Azure在內的Microsft Windows平臺上本地執行。
  • MapR:與競爭者相比,它使用了一些不同的概念,特別是為了獲取更好的效能和易用性而支援本地Unix檔案系統而不是HDFS(使用非開源的元件)。可以使用本地Unix命令來代替Hadoop命令。除此之外,MapR還憑藉諸如快照、映象或有狀態的故障恢復之類的高可用性特性來與其他競爭者相區別。該公司也領導著Apache Drill專案,本專案是Google的Dremel的開源專案的重新實現,目的是在Hadoop資料上執行類似SQL的查詢以提供實時處理。
  • Amazon Elastic Map Reduce(EMR:區別於其他提供商的是,這是一個託管的解決方案,其執行在由Amazon Elastic Compute Cloud(Amazon EC2)和Amzon Simple Strorage Service(Amzon S3)組成的網路規模的基礎設施之上。除了Amazon的發行版本之外,你也可以在EMR上使用MapR。臨時叢集是主要的使用情形。如果你需要一次性的或不常見的大資料處理,EMR可能會為你節省大筆開支。然而,這也存在不利之處。其只包含了Hadoop生態系統中Pig和Hive專案,在預設情況下不包含其他很多專案。並且,EMR是高度優化成與S3中的資料一起工作的,這種方式會有較高的延時並且不會定位位於你的計算節點上的資料。所以處於EMR上的檔案IO相比於你自己的Hadoop叢集或你的私有EC2叢集來說會慢很多,並有更大的延時。

  上面的發行版本都能靈活地單獨使用或是與不同的大資料套件組合使用。而這期間出現的一些其它的發行版本則不夠靈活,會將你繫結至特定的軟體棧和(或)硬體棧。比如EMC的Pivotal HD原生地融合了Greenplum的分析資料庫,目的是為了在Hadoop,或Intel的Apache Hadoop發行版本之上提供實時SQL查詢和卓越的效能,Intel的Apache Hadoop發行版本為固態驅動器進行了優化,這是其他Hadoop公司目前還沒有的做法。

  所以,如果你的企業已經有了特定的供應方案棧,則一定要核查它支援哪個Hadoop發行版本。比如,如果你使用了Greeplum資料庫,那麼Pivotal就可能是一個完美的選擇,而在其他情況下,可能更適合採取更加靈活的解決方案。例如,如果你已經使用了Talend ESB,並且你想使用TalenD Big Data來啟動你的大資料專案,那麼你可以選擇你心儀的Hadoop發行版本,因為Talend並不依賴於Hadoop發行版本的某個特定提供商。

  為了做出正確的選擇,請了解各個發行版本的概念並進行試用。請查證所提供的工具並分析企業版加上商業支援的總費用。在這之後,你就可以決定哪個發行版本是適合自己的。

 何時使用Hadoop發行版本?

  由於發行版本具有打包、工具和商業支援這些優點,所以在絕大多數使用情形下都應使用Hadoop的發行版本。使用普通的(原文為plan,應為plain)Apache Hadoop釋出版本並在此基礎之上構建自己的發行版本的情況是極少見的。你會要自己測試打包,構建自己的工具,並自己動手寫補丁。其他一些人已經遇到了你將會遇到的同樣問題。所以,請確信你有很好的理由不使用Hadoop發行版本。

  然而,就算是Hadoop發行版本也需要付出很大的努力。你還是需要為自己的MapReduce作業編寫大量程式碼,並將你所有的不同資料來源整合到Hadoop中。而這就是大資料套件的切入點。

 大資料套件

  你可以在Apache Hadoop或Hadoop發行版本之上使用一個大資料套件。大資料套件通常支援多個不同的Hadoop發行版本。然而,某些提供商實現了自己的Hadoop解決方案。無論哪種方式,大資料套件為了處理大資料而在發行版本上增加了幾個更進一步的特性:

  • 工具:通常,大資料套件是建立像Eclipse之類的IDE之上。附加外掛方便了大資料應用的開發。你可以在自己熟悉的開發環境之內建立、構建並部署大資料服務。
  • 建模:Apache Hadoop或Hadoop發行版本為Hadoop叢集提供了基礎設施。然而,你仍然要寫一大堆很複雜的程式碼來構建自己的MapReduce程式。你可以使用普通的Java來編寫這些程式碼,或者你也可以那些已經優化好的語言,比如PigLatin或Hive查詢語言(HQL),它們生成MapReduce程式碼。大資料套件提供了圖形化的工具來為你的大資料服務進行建模。所有需要的程式碼都是自動生成的。你只用配置你的作業(即定義某些引數)。這樣實現大資料作業變得更容易和更有效率。
  • 程式碼生成:生成所有的程式碼。你不用編寫、除錯、分析和優化你的MapReduce程式碼。
  • 排程:需要排程和監控大資料作業的執行。你無需為了排程而編寫cron作業或是其他程式碼。你可以很容易地使用大資料套件來定義和管理執行計劃。
  • 整合:Hadoop需要整合所有不同類技術和產品的資料。除了檔案和SQL資料庫之外,你還要整合NoSQL資料庫、諸如Twitter或Facebook這樣的社交媒體、來自訊息中介軟體的訊息、或者來自類似於Salesforce或SAP的B2B產品的資料。通過提供從不同介面到Hadoop和後端的眾多聯結器,大資料套件為整合提供了很多幫助。你不用手工編寫連線程式碼,你只需使用圖形化的工具來整合並對映所有這些資料。整合能力通常也具有資料質量特性,比如資料清洗以提高匯入資料的質量。

 大資料套件提供商

  大資料套件的數目在持續增長。你可以在幾個開源和專有提供商之間選擇。像IBM、Oracle、Microsoft等這樣的大部分大軟體提供商將某一類的大資料套件整合到自己的軟體產品組合中。而絕大多數的這些廠商僅只支援某一個Hadoop發行版本,要麼是自己的,要麼和某個Hadoop發行版本提供商合作。

  從另外一方面來看,還有專注於資料處理的提供商可供選擇。它們提供的產品可用於資料整合、資料質量、企業服務匯流排、業務流程管理和更進一步的整合元件。既有像Informatica這樣的專有提供商,也有Talend或Pentaho這樣的開源提供商。某些提供商不只支援某一個Hadoop發行版本,而是同時支援很多的。比如,就在撰寫本文的時刻,Talend就可以和Apache Hadoop、Cloudera、Hortonworks、MapR、Amazon Elastic MapReduce或某個定製的自創發行版本(如使用EMC的Pivotal HD)一起使用。

 如何選擇合適的大資料套件?

  本文不會評估各個大資料套件。當你選擇大資料套件時,應考慮幾個方面。下面這些應該可以幫助你為自己的大資料問題作出合適的抉擇:

  • 簡單性:親自試用大資料套件。這也就意味著:安裝它,將它連線到你的Hadoop安裝,整合你的不同介面(檔案、資料庫、B2B等等),並最終建模、部署、執行一些大資料作業。自己來了解使用大資料套件的容易程度——僅讓某個提供商的顧問來為你展示它是如何工作是遠遠不夠的。親自做一個概念驗證。
  • 廣泛性:是否該大資料套件支援廣泛使用的開源標準——不只是Hadoop和它的生態系統,還有通過SOAP和REST web服務的資料整合等等。它是否開源,並能根據你的特定問題易於改變或擴充套件?是否存在一個含有文件、論壇、部落格和交流會的大社群?
  • 特性:是否支援所有需要的特性?Hadoop的發行版本(如果你已經使用了某一個)?你想要使用的Hadoop生態系統的所有部分?你想要整合的所有介面、技術、產品?請注意過多的特性可能會大大增加複雜性和費用。所以請查證你是否真正需要一個非常重量級的解決方案。是否你真的需要它的所有特性?
  • 陷阱:請注意某些陷阱。某些大資料套件採用資料驅動的付費方式(“資料稅”),也就是說,你得為自己處理的每個資料行付費。因為我們是在談論大資料,所以這會變得非常昂貴。並不是所有的大資料套件都會生成本地Apache Hadoop程式碼,通常要在每個Hadoop叢集的伺服器上安裝一個私有引擎,而這樣就會解除對於軟體提供商的獨立性。還要考慮你使用大資料套件真正想做的事情。某些解決方案僅支援將Hadoop用於ETL來填充資料至資料倉儲,而其他一些解決方案還提供了諸如後處理、轉換或Hadoop叢集上的大資料分析。ETL僅是Apache Hadoop和其生態系統的一種使用情形。

 決策樹:框架vs.發行版本vs.套件

  現在,你瞭解了Hadoop不同選擇之間的差異。最後, 讓我們總結並討論選擇Apache Hadoop框架、Hadoop發行版本或大資料套件的場合。

  下面的“決策樹”將幫助你選擇合適的一種:

  Apache:

  • 學習並理解底層細節?
  • 專家?自己選擇和配置?

  發行版本:

  • 容易的設定?
  • 初學(新手)?
  • 部署工具?
  • 需要商業支援?

  大資料套件:

  • 不同資料來源整合?
  • 需要商業支援?
  • 程式碼生成?
  • 大資料作業的圖形化排程?
  • 實現大資料處理(整合、操作、分析)?

 結論

  Hadoop安裝有好幾種選擇。你可以只使用Apache Hadoop專案並從Hadoop生態系統中建立自己的發行版本。像Cloudera、Hortonworks或MapR這樣的Hadoop發行版本提供商為了減少使用者需要付出的工作,在Apache Hadoop之上新增了如工具、商業支援等特性。在Hadoop發行版本之上,為了使用如建模、程式碼生成、大資料作業排程、所有不同種類的資料來源整合等附加特性,你可以使用一個大資料套件。一定要評估不同的選擇來為自己的大資料專案做出正確的決策。

 作者簡介

   Kai Wähner 是Talend公司的首席顧問。他擅長的主要領域是Java EE、SOA、雲端計算、業務流程管理(BPM)、大資料以及企業架構管理。他還在像JavaOne、ApacheCon或OOP這樣的國際IT會議上做演講,為專業期刊撰文,並在部落格上分享自己的經驗。你可以在他的網站上找到更多詳細資訊和參考資料(簡報、文章、部落格文章),可以點選這裡或是通過Twitter:@KaiWaehner來聯絡他。

  英文原文:Spoilt for Choice – How to choose the right Big Data / Hadoop Platform?

相關文章