命令列工具可以比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
- Hadoop叢集常用命令Hadoop
- 五行命令使用docker搭建hadoop叢集DockerHadoop
- hadoop叢集篇--從0到1搭建hadoop叢集Hadoop
- Hadoop叢集搭建Hadoop
- Hadoop搭建叢集Hadoop
- 一個比 webpack 快10倍的打包工具Web
- Hadoop 工具集的簡單羅列 [整理]Hadoop
- Hadoop叢集面試題Hadoop面試題
- 4.4 Hadoop叢集搭建Hadoop
- Hadoop叢集搭建(一)Hadoop
- 如何部署hadoop叢集Hadoop
- hadoop分散式叢集搭建Hadoop分散式
- 使用docker部署hadoop叢集DockerHadoop
- Hadoop-叢集執行Hadoop
- Hadoop叢集搭建文件Hadoop
- Hadoop - Ambari叢集管理剖析Hadoop
- hadoop叢集環境搭建Hadoop
- hadoop2.2.0叢集搭建Hadoop
- Hadoop叢集(第10期副刊)_常用MySQL資料庫命令HadoopMySql資料庫
- PostgreSQL叢集管理工具repmgr相關命令SQL
- Spark只比Hadoop快19% ?SparkHadoop
- EhCache 分散式快取/快取叢集分散式快取
- Hadoop完全分散式叢集配置Hadoop分散式
- Hadoop HA叢集簡單搭建Hadoop
- Hadoop2.7.2叢集的部署Hadoop
- HADOOP SPARK 叢集環境搭建HadoopSpark
- Hadoop-2.7.4 叢集快速搭建Hadoop
- Hadoop分散式叢集搭建_1Hadoop分散式
- hadoop叢集配置和啟動Hadoop
- 小丸子學Hadoop系列之——部署Hadoop叢集Hadoop
- Redis快取高可用叢集Redis快取
- Hadoop叢集初始化啟動Hadoop
- Hadoop叢集之淺析安全模式Hadoop模式
- hadoop-2.5.0-cdh5.3.6叢集搭建HadoopH5
- Hadoop的叢集環境部署說明Hadoop
- Hadoop叢集是配置時間同步!Hadoop
- Linux部署hadoop2.7.7叢集LinuxHadoop