命令列工具可以比Hadoop叢集快235倍 - Adam Drake
當我在瀏覽網頁和趕上一些我定期訪問的網站時,我發現了一篇來自Tom Hayden的很酷的文章,關於使用亞馬遜彈性Map Reduce(EMR)和mrjob來計算他從millionbase檔案館下載的國際象棋遊戲的一些輸贏比率的統計資料,並且總體上對EMR感到有趣。由於資料量只有大約1.75GB,包含大約200萬個棋譜,我對使用Hadoop來完成這個任務持懷疑態度,但我可以理解他使用mrjob和EMR來學習和娛樂的目的。因為這個問題基本上只是看每個檔案的結果行,並彙總不同的結果,所以似乎非常適合用shell命令進行流處理。我試了一下,對於同樣的資料量,我能夠用我的膝上型電腦在大約12秒內得到結果(處理速度大約為270MB/秒),而Hadoop的處理則需要大約26分鐘(處理速度大約為1.14MB/秒)。
在報告了用叢集中的7臺c1.medium機器處理資料所需的時間為26分鐘後,湯姆說:
這可能比在我的機器上序列執行要好,但可能還不如我在本地做一些巧妙的多執行緒應用好。
這絕對是正確的,儘管即使是序列處理也可能勝過26分鐘。雖然湯姆做這個專案是為了好玩,但人們經常使用Hadoop和其他所謂的大資料(tm)工具來進行現實世界的處理和分析工作,而這些工作可以用更簡單的工具和不同的技術來更快地完成。
一種特別未被使用的資料處理方法是使用標準的外殼工具和命令。這種方法的好處是巨大的,因為用shell命令建立一個資料管道意味著所有的處理步驟都可以並行完成。這基本上就像在你的本地機器上擁有你自己的風暴叢集。甚至連Spouts、Bolts和Sinks的概念也轉移到shell管道和它們之間的命令。你可以很容易地用基本命令構建一個流處理管道,與許多現代大資料(TM)工具相比,它將具有非常好的效能。
另外一點是批處理與流分析方法。湯姆在文章的開頭提到,在載入10000個遊戲並在本地進行分析後,他的記憶體有點不足了。這是因為所有的遊戲資料都被載入到RAM中進行分析。然而,考慮一下這個問題,可以用流式分析輕鬆解決,基本上不需要任何記憶體。我們將建立的流處理管道將比Hadoop的實現快235倍以上,並且幾乎不使用任何記憶體。
....
這條命令語句是:
find . -type f -name '*.pgn' -print0 | xargs -0 -n4 -P4 mawk '/Result/ { split($0, a, "-"); res = substr(a[1], length(a[1]), 1); if (res == 1) white++; if (res == 0) black++; if (res == 2) draw++ } END { print white+black+draw, white, black, draw }' | mawk '{games += $1; white += $2; black += $3; draw += $4; } END { print games, white, black, draw }' |
這條find | xargs mawk | mawk管道讓我們的執行時間縮短到大約 12 秒,或大約 270MB/秒,這比 Hadoop 實現快了大約 235 倍。
結論
希望這說明了一些關於使用和濫用 Hadoop 等工具進行資料處理任務的要點,這些任務可以透過簡單的 shell 命令和工具在單臺機器上更好地完成。如果您有大量資料或確實需要分散式處理,那麼可能需要像 Hadoop 這樣的工具,但這些天我經常看到使用 Hadoop 的地方傳統的關聯式資料庫或其他解決方案在效能方面要好得多,實施成本和持續維護。
點選標頭見原文
相關文章
- Hadoop叢集常用命令Hadoop
- 五行命令使用docker搭建hadoop叢集DockerHadoop
- Hadoop搭建叢集Hadoop
- Hadoop叢集搭建Hadoop
- 4.4 Hadoop叢集搭建Hadoop
- Hadoop叢集搭建(一)Hadoop
- 使用docker部署hadoop叢集DockerHadoop
- Hadoop叢集面試題Hadoop面試題
- Hadoop-叢集執行Hadoop
- hadoop分散式叢集搭建Hadoop分散式
- Hadoop分散式叢集搭建_1Hadoop分散式
- hadoop叢集配置和啟動Hadoop
- Linux部署hadoop2.7.7叢集LinuxHadoop
- Hadoop完全分散式叢集配置Hadoop分散式
- Hadoop HA叢集簡單搭建Hadoop
- 安裝 Hadoop:設定單節點 Hadoop 叢集Hadoop
- PostgreSQL叢集管理工具repmgr相關命令SQL
- 大資料7.1 - hadoop叢集搭建大資料Hadoop
- hadoop-2.5.0-cdh5.3.6叢集搭建HadoopH5
- Hadoop叢集之淺析安全模式Hadoop模式
- Hadoop叢集是配置時間同步!Hadoop
- Hadoop叢集初始化啟動Hadoop
- 虛擬機器Hadoop叢集搭建5安裝Hadoop虛擬機Hadoop
- Hadoop的叢集環境部署說明Hadoop
- 在Ubuntu 18.04.1上安裝Hadoop叢集UbuntuHadoop
- Hadoop叢集環境啟動順序Hadoop
- BigData~03:Hadoop05 ~ HA叢集搭建Hadoop
- 大資料平臺Hadoop叢集搭建大資料Hadoop
- 基於 ZooKeeper 搭建 Hadoop 高可用叢集Hadoop
- 基於kerberos的hadoop安全叢集搭建ROSHadoop
- kubernetes叢集管理命令(三)
- Redis快取高可用叢集Redis快取
- hadoop之旅3-centerOS7: 搭建hadoop免密叢集啟動HadoopROS
- Hadoop叢集之 ZooKeeper和Hbase環境搭建Hadoop
- hadoop叢集搭建及程式設計實踐Hadoop程式設計
- Hadoop叢集搭建之關閉防火牆(一)Hadoop防火牆
- hadoop叢集搭建,CentOS7克隆HadoopCentOS
- hadoop叢集搭建——單節點(偽分散式)Hadoop分散式