2017-01-26 87 views
3

我在學習Hadoop /大數據技術。我想將數據大量攝入蜂巢。我開始使用一個簡單的CSV文件,當我嘗試使用INSERT命令通過記錄加載每個記錄時,一個記錄插入本身需要大約1分鐘。當我將文件放入HDFS並使用LOAD命令時,它是即時的,因爲它只是將文件複製到配置單元的倉庫中。我只是想知道當他們選擇LOAD而不是INSERT時必須面對什麼樣的折衷。Hive insert vs Hive Load:什麼是折衷?

回答

5

加載 - Hive在向表中加載數據時不執行任何轉換。加載操作目前是純粹的複製/移動操作,將數據文件移動到與Hive表對應的位置。

插入 -Query結果可以通過使用insert子句插入到表中,然後依次運行map reduce作業,因此需要一段時間才能執行。

在情況下,如果你想優化/調整插入statements.Below一些技巧:

1.設置執行引擎在蜂巢-site.xml中以TEZ(如果已安裝)

set hive.execution.engine=tez; 

2.使用ORCFILE

CREATE TABLE A_ORC (

customerID int, name string, age int, address string 

) STORED AS ORC tblproperties (「orc.compress" = 「SNAPPY」); 

INSERT INTO TABLE A_ORC SELECT * FROM A; 

3.兼職在蜂巢可以節省整體工作運行時間。爲了實現這一目標蜂房default.xml中,下面的配置需要運行改變:

set hive.exec.parallel=true; 
set hive.exec.parallel.thread.number=<your value>; 

欲瞭解更多信息,可以訪問http://hortonworks.com/blog/5-ways-make-hive-queries-run-faster/ 希望這有助於。

+0

同意。使用INSERT vs LOAD可能會「卡住」的一個折衷方案是如果用戶沒有權限將文件放在HDFS上但具有Hive用戶/密碼。如果HiveQL是你唯一的選擇,那麼你需要使用INSERT。 – mattyb