2017-01-26 51 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