作业配置
mapred.job.name | 作业名 |
---|---|
mapred.job.priority | 作业优先级 |
mapred.job.map.capacity | 最多同时运行map任务数 |
mapred.job.reduce.capacity | 最多同时运行reduce任务数 |
hadoop.job.ugi | 作业执行权限 |
mapred.map.tasks | map任务个数 |
mapred.reduce.tasks | reduce任务个数 |
mapred.job.groups | 作业可运行的计算节点分组 |
mapred.task.timeout | 任务没有响应(输入输出)的最大时间 |
mapred.compress.map.output | map的输出是否压缩 |
mapred.map.output.compression.codec | map的输出压缩方式 |
stream.map.output.field.separator | map输出分隔符 |
工作中配置文件解析
语法: set hive.auto.convert.join=false;
在map端产生join: 这样设置,hive就会自动的识别比较小的表,继而用mapJoin来实现两个表的联合。
语法:hive.mapred.mode=nonstrict
Hive配置中有个参数hive.mapred.mode,分为nonstrict,strict,默认是nonstrict;
如果设置为strict,会对三种情况的语句在compile环节做过滤:
-
笛卡尔积Join。这种情况由于没有指定reduce join key,所以只会启用一个reducer,数据量大时会造成性能瓶颈
-
order by后面不跟limit。order by会强制将reduce number设置成1,不加limit,会将所有数据sink到reduce端来做全排序。
-
读取的表是partitioned table,但没有指定partition predicate。
注:如果是多级分区表的话,只要出现任何一个就放行
这三种情况在数据量比较大的情况下都会造成生成低效的MR Job,影响执行时间和效率
语法:set hive.execution.engine=mr
设置计算计算引擎为mapreduce(默认)
语法:set hive.execution.engine=spark
设置计算引擎为spark