10
我正在使用Python編寫的映射器和簡化器在Hadoop(在Amazon的EMR上)中運行流式作業。如果我在Java中實現相同的映射器和簡化器(或使用Pig),我想知道速度增益。Hadoop中的流式傳輸或自定義Jar
特別是,我正在尋找人們從流式傳輸到定製jar部署和/或Pig以及包含這些選項基準比較的文檔的體驗。我發現這個question,但答案不夠具體。我不想在Java和Python之間進行比較,而是在Hadoop中的自定義jar部署和基於Python的流之間進行比較。
我的工作是閱讀NGram從Google圖書NGgram數據集計算和計算聚合度量。看起來計算節點上的CPU利用率接近100%。 (我希望聽到您對CPU限制或IO限制作業的差異的意見)。
謝謝!
Amaç
謝謝!由於我已經有純文本輸入/輸出要求,所以自定義輸入格式與我的情況無關。 豬的評價告訴我,我寧願遠離它。我已經有了Python實現。 我的腳本是CPU密集型的。他們只是從標準輸入中讀取數據,進行一些數字運算,然後輸出結果。但我不確定這是否意味着我的Hadoop作業整體可以被視爲CPU限制。無論如何,我真正想問的是作業是CPU限制還是IO限制,以及它是作爲自定義jar還是流式作業實現的。 –
考慮到您的Maps和Reduce任務將在其自己的JVM上運行,以及通常map和reduce函數受CPU限制的事實,這些單獨的Hadoop任務將受CPU限制。 Hadoop作業的協調JVM很可能是IO密集型的,因爲它忙於等待來自將任務發送到map和reduce層的單個任務的響應。 –
實際上,我剛剛意識到,map和reduce任務運行的JVM也處理一些IO(從HDFS輸入流並將輸出寫入HDFS)。由於hadoop確保map函數接近數據的位置,所以通常非常快(對於reduce函數,這是不正確的)。 –