2015-09-16 34 views
0

我在文檔中遇到this page on CompressedStorage,它讓我有點困惑。將數據從壓縮文件加載到Hive的建議方式是什麼?

根據頁面,如果我的輸入文件(在AWS s3上)是壓縮的gzip文件,我應該首先加載數據,選項爲STORED AS TextFile,然後使用選項STORED AS SEQUENCEFILE創建另一個表並將數據插入到該文件中。這真的是推薦的方式嗎?

或者我可以直接將數據加載到選項STORED AS SEQUENCEFILE的表格中嗎?

如果前一種方法真的是推薦的方式,有沒有爲爲什麼它是任何進一步的解釋?

回答

0

您必須以您的格式載入您的數據。這意味着,如果您的文件是文本文件,那麼您應該將它們加載爲TextFile,如果您的文件是序列文件,則將它們加載爲SEQUENCEFILE。

對於Hive,壓縮格式並不重要,因爲它將使用文件的擴展名作爲參考(如果壓縮編解碼器在Hadoop中配置正確),將其解壓縮。

您在頁面中分享的建議是,它比順序文件更適合壓縮文本文件。這是因爲Gzip文件不可拆分,並且如果您有一個非常大的Gzip文件,則必須僅使用一個Mapper處理所有文件,而不允許在羣集節點中平行分配工作量。

然後Hive的建議是將壓縮文本文件轉換爲序列文件以避免這種限制。這只是關於表現。

如果你的文件很小,那就沒關係了(< 1 Hadoop塊大小 - 默認爲128MB)。

+0

順便說一句,這適用於所有在hadoop中工作的框架,不僅適用於HIVE。 – RojoSam

+0

感謝您的解釋。關於你的最後陳述'如果你的文件很小,那麼它沒關係,你在談論任何類型的文件嗎?因此,如果我有一個100MB的'gzip'文件,如果我將它作爲TextFile加載,它不會有什麼區別,對吧? – simplycoding

+0

至少不是很大的區別。文本文件和序列文件各有優缺點。但即使是一個GZip文件也是不可拆分的,你不想分割一個暗示創建更多映射器的小文件。每個塊的「最佳」大小在默認的hadoop塊大小中定義,並且在當前版本中爲128 MB(除非有特定的場景)。一個好的選擇可以合併在RECORD LEVEL壓縮的一個大序列文件中的所有文件(不是GZip的文件級別)。 – RojoSam

相關問題