[html view plain copy
<property>
<name>dfs.blocksize</name>
<value>2m</value>
</property>
<property>
<name>dfs.namenode.fs-limits.min-block-size</name>
<value>2m</value>
</property>
然后重启Hadoop集群
[ROW FORMAT row_format]
file_format:
: SEQUENCEFILE
| TEXTFILE-- (Default, depending on hive.default.fileformat configuration)
| RCFILE -- (Note: Available in Hive 0.6.0 and later)
| ORC -- (Note: Available in Hive 0.11.0 and later)
| PARQUET -- (Note: Available in Hive 0.13.0 and later)
| AVRO-- (Note: Available in Hive 0.14.0 and later)
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
默认是文本格式例如:
SEQUENCEFILE
TEXTFILE
RCFILE
ORC
PARQUET
说明:parquet目前已经是apache的顶级项目了,在hive,hbase,spark中都是经常使用的。
执行sql语句测试执行速度
当join时有一个或多个小表可以装载进内存时可以使用mapjoin完成。
第一种方法是可以加上mapjoin指示
第二种方法是设置 set hive.auto.convert.join=true来让hive自动优化。同时可以指定
set hive.auto.convert.join.noconditionaltask = true--默认开启
set hive.auto.convert.join.noconditionaltask.size = 10000000--默认10M,可以根据需求做调整。
hive.mapjoin.smalltable.filesize= 2500000;--早期hive版本小表文件大小设置默认25M。
当数据量比较大启动mapjoin后会造成问题请关闭
set hive.map.aggr = true//是否在 Map 端进行聚合,默认为 True ;
set hive.groupby.mapaggr.checkinterval = 100000000//在 Map 端进行聚合 *** 作的条目数目
1、在关联 *** 作前尽量减小数据集,能先聚合的先聚合、能过滤的先过滤(如设置查询条件、合理设置分区,有分区必须设置分区范围)。
2、关联时数据类型要做到一致,如果不一致请用cast先转换类型。
3、慎用count(distinct) ,容易产生数据倾斜,可以先group by 再count。
4、减少小文件,合理设置输入文件大小、合理设置map job 、reduce job数。
set hive.merge.mapredfiles=true;--设置合并map文件标识。
set mapred.max.split.size=100000000--设置最大输入文件大小,大于此数值都会进行拆分。
set mapred.min.split.size.per.node=100000000--设置每个节点可处理的最小值。
set mapred.min.split.size.per.rack=100000000--设置每个机架可处理的最小值。
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat– 执行前进行小文件合并。
set mapred.reduce.tasks=10-- 设置reduce的数量
set hive.exec.reducers.bytes.per.reducer=1073741824 --设置每个reduce所处理的数据大小
5、选取字段避免用select * ,只引用你要用的字段,如select a.uid,a.price。
6、关联值有null值的情况下,可以将null值过滤出来单独处理或者将null值随机赋值。当存在某key有热点问题,也可以同样处理。
7、合理设置数据模型、文件存储格式有利于查询效率优化。
8、善用union all 合并对于同一个表的查询,有利于整体提高效率。
9、合理使用中间临时表,数据量巨大时,如统计一年的数据,可先小规模聚合如按月聚合生成中间表,最后再合并统计出结果。
10、有order by 要限制输出条数。
11、合理设置并行查询
set hive.exec.parallel= true ; --以开启并发执行。
set hive.exec.parallel.thread.number= 10//同一个sql允许最大并行度,默认为8。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)