Hive执行的本地模式

本文介绍了Hive中本地模式(local mode)的配置方法及其对执行效率的影响。通过调整参数hive.exec.mode.local.auto,可以在数据量较小的情况下启用本地模式,显著提高执行速度。

Hive本地运行job总是报错,因为虽然输入文件很小,但是需要加载的文件很大,本地跑根本吃不消。所以想设置hive不在本地执行。同样的问题遇到两次了,还是总结一下,具体的步骤如下:

 

(1)Hive支持任务执行选择本地模式(local mode),对数据量比较小的操作,就可以在本地执行,这样要比提交任务到集群执行效率要快很多。

配置如下参数,可以开启Hive的本地模式:

hive> set hive.exec.mode.local.auto=true;(默认为false)

当一个job满足如下条件才能真正使用本地模式:

1.job的输入数据大小必须小于参数:hive.exec.mode.local.auto.inputbytes.max(默认128MB)

2.job的map数必须小于参数:hive.exec.mode.local.auto.tasks.max(默认4)

3.job的reduce数必须为0或者1

可用参数hive.mapred.local.mem(默认0)控制child jvm使用的最大内存数。

 

具体操作:将hive配置中的hive.exec.mode.local.auto设置为false,就可以解决上面问题。

 

(2)在hive中运行的sql有很多是比较小的sql,数据量小,计算量小.这些比较小的sql如果也采用分布式的方式来执行,那么是得不偿失的.因为sql真正执行的时间可能只有10秒,但是分布式任务的生成得其他过程的执行可能要1分钟.这样的小任务更适合采用lcoal mr的方式来执行.就是在本地来执行,通过把输入数据拉回客户端来执行.

拿select 1 from dual来看下,两种执行方式的效率差距.

分布式mr:

hive> select 1 from dual;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there’s no reduce operator
Selecting distributed mode: Input Size (= 10) is larger than hive.exec.mode.local.auto.inputbytes.max (= -1)
Starting Job = job_201208241319_7711163, Tracking URL = http://hdpjt:50030/jobdetails.jsp?jobid=job_201208241319_7711163
Kill Command = /dhwdata/hadoop/bin/../bin/hadoop job  -Dmapred.job.tracker=hdpjt:9001 -kill job_201208241319_7711163
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
2012-10-15 13:16:29,825 Stage-1 map = 0%,  reduce = 0%
2012-10-15 13:16:38,044 Stage-1 map = 100%,  reduce = 0%
Ended Job = job_201208241319_7711163
OK
1
Time taken: 15.278 seconds

本地mr:

hive> select 1 from dual;
Automatically selecting local only mode for query
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there’s no reduce operator
Execution log at: /tmp/dwapp/dwapp_20121015131717_eb78662f-2ccd-497c-a7eb-ba9a2234e153.log
Job running in-process (local Hadoop)
Hadoop job information for null: number of mappers: 0; number of reducers: 0
2012-10-15 13:17:28,644 null map = 0%,  reduce = 0%
2012-10-15 13:17:29,646 null map = 100%,  reduce = 0%
Ended Job = job_local_0001
2012-10-15 01:17:29     End of local task; Time Taken: 6.411 sec.
OK
1
Time taken: 7.859 seconds

因为仅仅是换了执行方式,效率提高了一倍.这还不算是差距大的,还遇到过效率差4倍以上的情况,如果jobtracker过忙,或者slots资源比较紧张的时候,这个差距会更大.

所以,合理的使用local mr对性能的提高有非常的提升.

 

具体操作:将hive配置中的hive.exec.mode.local.auto设置为true,即可。

同时hive.exec.mode.local.auto.inputbytes.max和hive.exec.mode.local.auto.tasks.max

这个两个条件是与的条件,一定要都满足才可以。

转载于:https://my.oschina.net/u/3204727/blog/1555001

Hive支持本地模式(Local Mode)的执行,这种模式适合在单机环境下进行测试或处理小规模数据。本地模式通过将MapReduce任务直接在本地运行,而非提交到Hadoop集群,从而减少资源开销和提升执行效率。以下是Hive本地模式配置方法和使用指南。 ### 配置Hive本地模式 1. **修改Hive配置文件** 在`hive-site.xml`文件中添加或修改以下配置项以启用本地模式: ```xml <property> <name>hive.exec.mode.local.auto</name> <value>true</value> <description>启用自动本地模式执行</description> </property> ``` 通过设置`hive.exec.mode.local.auto`为`true`,Hive将根据数据量和任务复杂度自动决定是否使用本地模式执行任务[^1]。 2. **设置本地模式的最大输入数据量** Hive本地模式适用于小规模数据集,因此可以通过以下参数限制输入数据的大小: ```xml <property> <name>hive.exec.mode.local.auto.inputbytes.max</name> <value>134217728</value> <description>自动本地模式下输入数据的最大字节数,默认为128MB</description> </property> ``` 上述配置限制了Hive在自动本地模式下处理的最大输入数据量,默认值为128MB。如果输入数据量超过此限制,Hive将回退到集群模式执行。 3. **设置本地模式的最大任务数** 为了控制本地模式的任务复杂度,可以设置任务的最大数量: ```xml <property> <name>hive.exec.mode.local.auto.tasks.max</name> <value>4</value> <description>自动本地模式下任务的最大数量,默认为4</description> </property> ``` 上述配置限制了本地模式下并行执行的任务数量,默认值为4。如果任务数量超过此限制,Hive将不再使用本地模式[^1]。 ### 使用Hive本地模式Hive查询执行时,可以通过HiveQL语句动态启用本地模式,而无需更改配置文件。例如,在Hive命令行界面中执行以下命令: ```sql SET hive.exec.mode.local.auto=true; SET hive.exec.mode.local.auto.inputbytes.max=134217728; SET hive.exec.mode.local.auto.tasks.max=4; ``` 上述命令在当前会话中启用了本地模式,并设置了输入数据量和任务数的限制。这种方式适用于临时测试或调试场景[^2]。 ### 验证本地模式是否生效 执行查询后,可以通过查看Hive执行日志或任务信息验证本地模式是否生效。如果任务未提交到Hadoop集群,并且执行时间明显缩短,则说明本地模式已成功启用。 例如,执行以下查询: ```sql SELECT * FROM x; ``` 如果查询结果返回迅速且未出现Hadoop任务日志,则表示任务已通过本地模式执行。 ### 注意事项 - **数据规模限制**:本地模式适用于小规模数据处理,大规模数据仍需使用Hadoop集群模式。 - **性能优化**:适当调整`hive.exec.mode.local.auto.inputbytes.max`和`hive.exec.mode.local.auto.tasks.max`参数,以匹配实际数据量和任务需求。 - **兼容性**:确保Hive版本支持本地模式特性,部分旧版本可能需要手动编译或更新。 通过上述配置和使用方法,可以在Hive中启用本地模式,从而在单机环境下高效处理小规模数据集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值