2017-08-11 67 views
0

嗨,我最近加入了一個使用Hive和PostgreSQL的新工作。現有的ETL腳本收集Hive中按日期分區的數據,並在PostgreSQL中爲這些數據創建表,然後PostgreSQL腳本/查詢執行左連接並創建最終表以用於報告目的。過去我聽說Hive加入並不是一個好主意。但是,我注意到Hive確實允許連接,所以我不確定它爲什麼不好。在Hive中加入是不好的?

我想使用類似Talend或Mulesoft的東西來創建連接並在配置單元中進行聚合,並創建臨時表並將該臨時表作爲最終表傳輸到PostgreSQL進行報告。

任何建議,特別是如果這不是HIVE的良好做法。我是新來的蜂房。

謝謝。

+3

在Hive中進行連接是完全合理的。誰告訴你他們不是個好主意?你能引用一些東西嗎? –

+0

大批初級數據分析師不停地抱怨說,這是一個糟糕的主意,並且他們效率不高。我認爲如果在Hive中完成而不是將所有內容都傳輸到PostgreSQL for ETL – codeBarer

+0

當我完成了連接時,我根本沒有發現任何與ETL有關的問題。 – codeBarer

回答

1

加入配置單元的主要問題與數據局部性有關。

蜂巢查詢爲MapReduce作業執行和幾個映射器將推出,儘可能的,在數據​​所在的節點。

然而,在連接表時從LHS和RHS表中的數據的兩行一般不會在同一個節點,這可能導致節點之間的網絡流量顯著量。

蜂房中加入不壞本身,但是如果要連接的兩個表是大可能會導致緩慢的就業機會。

如果表中的一個比你可能希望將其存儲在HDFS緩存,使得每一個節點,它允許連接算法在本地檢索所有數據提供其數據的其他顯著較小。

所以,沒有什麼不妥運行大型聯接在蜂巢,你只需要知道他們需要時間來完成。

+0

HDFS緩存是否可以通過HiveQL完成?我嘗試創建臨時配置表,但查詢速度很慢。 – codeBarer

0

它在HIVE中完成很好的連接,我是ETL測試人員,並且在Hive的大表中執行了左連接,大部分時間查詢運行順暢,但有時候作業會因網絡而停滯不前或緩慢交通。

還取決於羣集所具有的節點數量。

感謝

1

蜂巢中成熟成長

這可能是反對使用連接參數,不再適用於最新版本的蜂巢。

最明顯的例子,我在manual section on join optimization發現:

的MAPJOIN實施蜂巢0.11之前有以下限制:

的mapjoin操作者只能在一個時間

處理一個關鍵

因此,我會建議問他們不願意的基礎是什麼,然後仔細檢查它是否仍然適用。他們的論點可能仍然有效,或者可能已經解決。


旁註: 個人而言,我覺得豬的代碼更易於重複使用和維護比蜂巢,可以考慮使用豬,而不是蜂巢做地圖,減少對你(蜂巢表)數據操作。