hive参数设置

一、内存设置

set mapreduce.map.memory.mb=4096;// 每个Map Task需要的内存量
set mapreduce.map.java.opts=-Xmx3276M; // 每个Map Task 的JVM最大使用内存
set mapreduce.reduce.memory.mb=4096; // 每个Reduce Task需要的内存量
set mapreduce.reduce.java.opts=-Xmx3276M; // 每个Reduce Task 的JVM最大使用内存
set mapred.child.java.opts=-Xms1024M -Xmx3584M;//此参数为全局参数,既对Map和Reduce统一设置,相当于mapreduce.map.java.opts和mapreduce.reduce.java.opts的结合

memory.mb和java.opts的关系:

wKioL1bX0RuBYVmbAACA5B4Z9_8969.png

​ mapreduce.map.java.opts 其实就是启动 JVM 虚拟机时,传递给虚拟机的启动参数,而默认值 -Xmx200m 表示这个 Java 程序可以使用的最大堆内存数,一旦超过这个大小,JVM 就会抛出 Out of Memory 异常,并终止进程。而 mapreduce.map.memory.mb 设置的是 Container 的内存上限,这个参数由 NodeManager 读取并进行控制,当 Container 的内存大小超过了这个参数值,NodeManager 会负责 kill 掉 Container

二、本地模式

​ 有时hive的输入数据量是非常小的。在这种情况下,为查询出发执行任务的时间消耗可能会比实际job的执行时间要多的多。对于大多数这种情况,hive可以通过本地模式在单台机器上处理所有的任务。

set hive.exec.mode.local.auto=true;

当一个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

三、strict模式

对分区表进行查询,在where子句中没有加分区过滤的话,将禁止提交任务(默认:nonstrict)

set hive.mapred.mode=strict; 

使用严格模式可以禁止3种类型的查询:

  1. 对于分区表,不加分区字段过滤条件,不能执行

  2. 对于order by语句,必须使用limit语句。

  3. 限制笛卡尔积的查询(join的时候不使用on,而使用where的)。

  4. 动态分区插入

四、reduce和map个数调整

SET mapreduce.job.reduces=5000; //hive on spark 和 mr都可以用
set mapreduce.input.fileinputformat.split.maxsize = 67108864; //调整 hive on mr的输入大小,以设置mr个数
set mapreduce.input.fileinputformat.split.minsize =  10485760;
set spark.hadoop.mapred.min.split.size = 268435456; //调整 spark 任务的输入大小
set spark.hadoop.mapred.max.split.size = 536870912;


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值