Hive任務執行很慢,但是導入數據非常的快?

讀時模式和寫時模式

Hive使用Hadoop來執行查詢,其查詢執行速度是很慢的,但是使用load data向Hive中導入數據卻非常快,這是因為Hive採取的是讀時模式(Schema On Read)。

讀時模式:讀取數據的時候,對數據的類型、格式做檢查;

寫時模式:寫入數據的時候,對數據的類型、格式等規範做檢查;


將數據存到Hive的數據表時,Hive採用的是“讀時模式”,意思是針對寫操作不會做任何校驗,只是簡單的將文件複製到Hive的表對應的HDFS目錄。跟“讀時模式”相對應的是“寫時模式”,RDBMS一般採用“寫時模式”,在將數據寫入到數據表的時候會檢查每一條記錄是否合法,如果檢查不通過會直接返回失敗信息。

Hive任務執行很慢,但是導入數據非常的快?

由於向Hive中存入數據的只是簡單的文件複製和粘貼,所以導入數據速度非常的快。當讀取、查詢的時候,才會根據表模式來解釋數據,這個時候如果遇到了不符合模式的數據,Hive會直接將數據解析成NULL。


讀時模式的好處

Hive採用讀時模式帶來了以下幾個好處:

  • 向Hive表中新增數據非常的快,通常情況下對於外來數據,採用的方法是直接用Hadoop命令將文件上傳到一個HDFS目錄,Hive直接讀這個目錄;
  • 一份數據可以被解析成多種模式,存儲在Hive表中的數據跟Hive本身沒有關係,數據也可以被其他工具比如Pig來處理;

導入數據

hive> load data local inpath '/root/usr.data' into table usr;

Hive任務執行很慢,但是導入數據非常的快?



分享到:


相關文章: