簡體   English   中英

Hadoop上的Java與Python

[英]Java vs Python on Hadoop

我正在使用Hadoop開發一個項目,它似乎本身就包含了Java並為Python提供了流媒體支持。 選擇一個而不是另一個會對性能產生重大影響嗎? 在這個過程中,如果某種方式存在顯着的性能差異,我可以采用任何一種方式。

使用Python,您可能會更快地開發,並且Java肯定會運行得更快。

谷歌“基准游戲”,如果你想看到所有流行語言之間的一些非常准確的速度比較,但如果我沒記錯的話,你說的速度要快3-5倍。

也就是說,現在處理器很少有東西,所以如果你覺得你用Python開發得更好,那就去吧!


回復評論(java如何比Python更快):

所有語言的處理方式都不同 Java是C&C ++之后最快的(它可以比java快,或者比java快5倍,但似乎平均快2倍左右)。 其余的是2-5 +慢。 Python是繼Java之后的速度之一。 我猜測C#的速度和Java一樣快,或者更快,但基准游戲只有Mono(這有點慢),因為它們不會在Windows上運行它。

這些聲明中的大多數是基於計算機語言基准測試游戲 ,這種游戲往往非常公平,因為每種語言的專家都會調整用他們特定語言編寫的測試,以確保代碼具有良好的針對性。

例如, 顯示了使用Java vs c ++的所有測試,您可以看到速度范圍大約等於java慢3倍(第一列介於1和3之間),而java使用更多內存!

現在這個頁面顯示了java vs python(從Python的角度來看)。 因此速度范圍從python比Java慢2倍到慢174倍,python通常比代碼大小和內存使用情況更好。

另一個有趣的地方 - 分配了大量內存的測試,Java實際上在內存大小上的表現也明顯優於Python。 我很確定java通常會因為VM的開銷而丟失內存,但是一旦出現這種情況,java可能比大多數更有效(除了C之外)。

順便說一句,這是Python 3,另一個經過測試的python平台(簡稱Python)更糟糕。

如果你真的想知道它是如何更快,那么VM非常聰明。 它在運行代碼后編譯為機器語言,因此它知道最可能的代碼路徑是什么並為它們進行優化。 內存分配是一門藝術 - 在OO語言中非常有用。 它可以執行一些令人驚訝的運行時優化,而非VM語言無法做到這一點。 它在被迫時可以在相當小的內存空間中運行,並且是嵌入式設備和C / C ++的首選語言。

我在安捷倫的一個信號分析儀(想想昂貴的o-scope)上工作,幾乎整個事情(除了采樣)都是用Java完成的。 這包括繪制包括軌跡(AWT)和與控件交互的屏幕。

目前我正在為所有未來的有線電視盒子開展一個項目。 該指南以及大多數其他應用程序將使用Java編寫。

為什么它不比Python快?

Java沒有Python那么動態,並且已經為其VM添加了更多的努力,使其成為一種更快的語言。 Python也被其Global Interpreter Lock阻止,這意味着它不能將單個進程的線程推送到不同的核心。

這是否會產生重大影響取決於您打算做什么。 我懷疑這兩種語言都適合你。

您可以將Hadoop mapreduce轉換編寫為“流式”或“自定義jar”。 如果使用流式傳輸,則可以使用任何您喜歡的語言編寫代碼,包括Python或C ++。 您的代碼將從STDIN讀取並輸出到STDOUT。 但是,在0.21之前的hadoop版本中,hadoop流只用於將文本 - 而不是二進制 - 流式傳輸到您的進程。 因此,您的文件必須是文本文件,除非您自己進行一些時髦的編碼轉換。 但現在看來已經添加了補丁 ,現在允許使用帶有hadoop流的二進制格式。

如果您使用“自定義jar”(即您使用hadoop庫在Java或Scala中編寫mapreduce代碼),那么您將可以訪問允許您從流處理輸入和輸出二進制(二進制序列化)的函數(並將結果保存到磁盤)。 因此,未來的運行速度會快得多(取決於二進制格式小於文本格式的程度)。

因此,如果您的hadoop作業將受I / O限制,那么“自定義jar”方法將更快(因為Java之前的海報顯示速度更快,並且從磁盤讀取也更快)。

但你必須問自己,你的時間有多寶貴。 我發現自己在使用python時效率更高,並且編寫map-reduce來讀取STDIN並寫入STDOUT非常簡單。 所以我個人會建議你去python路線 - 即使你必須自己想出二進制編碼的東西。 因為hadoop 0.21處理非utf8字節數組,並且因為有一個二進制(字節數組)替代用於python( http://dumbotics.com/2009/02/24/hadoop-1722-and-typed-bytes/ ),這顯示python代碼僅比“自定義jar”java代碼慢約25%,我肯定會去python路由。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM