2013-07-02 63 views
3

我發現了Pig和Hive之間的一些(顯着的)性能差異(在實時運行時以及CPU時間方面),並且正在尋找各種方法來解決這些差異。我已經使用了兩種語言的解釋功能(即Hive:EXPLAIN關鍵字,Pig:pig -e'explain -script explain.pig')來對比和比較生成的語法樹,邏輯,物理和映射減少計劃。然而,兩者似乎都做同樣的事情。然而,作業跟蹤器顯示了地圖數量和減少的任務發佈的差異(因此我確保兩者使用相同數量的地圖和減少任務,並且性能差異仍然存在)。因此,我的問題是:我可以用什麼其他方式分析正在發生的事情(可能處於較低級別/字節碼級別)?性能:Pig vs Hive

編輯:我正在運行由TPC TPC-H基準測試(可用https://issues.apache.org/jira/browse/PIG-2397https://issues.apache.org/jira/browse/HIVE-600)。然而,即使更簡單的腳本也表現出相當大的性能差異。例如:

SELECT (dataset.age * dataset.gpa + 3) AS F1, 
    (dataset.age/dataset.gpa - 1.5) AS F2 
    FROM dataset 
    WHERE dataset.gpa > 0; 

我仍然需要全面評估TPC-H基準測試(稍後會更新),但是對於比較簡單的腳本結果詳細此文檔中:https://www.dropbox.com/s/16u3kx852nu6waw/output.pdf

(JPG:http://i.imgur.com/1j1rCWS.jpg

+0

你可以顯示你用來測試的腳本和SQL嗎? – zsxwing

+0

Hive中表格數據集的分區設置如何? – zsxwing

+0

對不起,你的意思是?我不太明白(我對Hadoop相當陌生)/ Hive – JB2

回答

3

我已經閱讀過一些Pig和Hive的源代碼。我可以分享一些意見。

當我關注Join實現時,在這裏我可以提供Pig和Hive的Join實現的一些細節。 Hive的Join實現效率比Pig低。我不知道爲什麼Hive需要在Join實現中創建如此多的對象(這種操作非常緩慢,應該避免)。我認爲這就是爲什麼Hive加入比豬更慢的原因。如果你對它感興趣,你可以自己檢查CommonJoinOperator的代碼。所以我猜想豬通常更高效,因爲它的高質量代碼。

+0

謝謝!我對此很好奇 - 這似乎很奇怪。我本來期望兩者都能產生類似的表現。代碼庫的其他部分,你會推薦我看看? – JB2

+0

那麼你想要了解更多的細節?豬和蜂巢? – zsxwing

+0

是的。具體關於性能差異。我看過文檔(這是我猜測的出發點)。但是,也許你有任何有用的資源/鏈接/文章,你推薦? – JB2