2013-03-12 51 views
1

目前,我正在從EDW(企業數據倉庫)的10個表中引入Hadoop,這些表格與Star Schema模型密切相關。我喜歡Sqoop將所有這些表放在一起,導致包含csv文件的10個目錄。在Hadoop中建模數據

我正在看什麼是一些更好的方法來存儲這些文件,然後再關閉MR作業。在開展MR工作之前,我應該遵循某種模式還是建立一個聚合體?我基本上在考慮如何將相關數據存儲在一起。

我通過搜索發現的大部分內容都是存儲簡單的csv文件並使用opencsv讀取它們。我正在尋找一些更多的參與,而不僅僅是爲了CSV文件。如果轉向另一種格式比csv更好,那麼這沒有問題。

歸結爲:如何最好地將一堆相關數據存儲在HDFS中,以便與MR有良好的體驗。

回答

1

以csv存儲這些文件很好。由於您將能夠使用文本輸出格式處理這些文件,並且還可以使用特定的分隔符通過配置單元讀取它。你可以改變分隔符,如果你不喜歡逗號(「|」),這就是我大部分時間做的事情。另外,您通常需要在hadoop中有大文件,但如果足夠大以至於您可以對這些文件進行分區,並且每個文件分區的大小隻有幾百個gig,那麼根據您的分區將這些文件分區到單獨的目錄中將會很好柱。

此外,將單個表中的大多數列設置爲具有許多標準化小表格會更好。但是,這取決於您的數據大小。此外,請確保在複製,移動或創建數據時,對應用程序執行所有約束檢查,因爲稍後很難對錶格進行小的更改,您將需要修改完整文件以進行小改動。

1

Hive分區和Bucketing概念可用於有效地用於基於特定列將相似數據放在一起(不在節點中,但在文件和文件夾中)。這裏有一些不錯的教程PartitioningBucketing

2

我建議花一些時間與Apache Avro。

使用Sqoop v1.3及更高版本,您可以使用自己設計的模式將數據從關係數據源導入爲Avro文件。 Avro的不錯之處在於除了是一個序列化格式之外,它還提供了很多功能......

它爲您提供了data + schema在同一個文件中,但是對於快速序列化來說它既緊湊又高效。它爲您提供版本控制功能,在使用不同模式引入更新數據時非常有用。 Hive支持閱讀和寫作,Map Reduce可以無縫地使用它。

它可以用作應用程序之間的通用交換格式(不僅適用於Hadoop),使其成爲在更廣泛的體系結構中用於數據交換的標準跨平臺格式的有趣選項。