@tsing1226
2015-12-13T00:26:02.000000Z
字数 1516
阅读 984
在配置文件hive-site.xml文件中
<property>
<name>hive.fetch.task.conversion</name>
<value>minimal</value>
<description> Some select queries can be converted to single FETCH task minimizing latency.
Currently the query should be single sourced not having any subquery and should not have
any aggregations or distincts (which incurs RS), lateral views and joins.
1. minimal : SELECT STAR, FILTER on partition columns, LIMIT only
2. more: SELECT, FILTER, LIMIT only (TABLESAMPLE, virtual columns)
</description>
</property>
hive.fetch.task.conversion的值为more值,SELECT, FILTER, LIMIT only (TABLESAMPLE, virtual columns)查询不经过MapReduce。开发时候一般设置成more,查询结果如下所示:
EXPLAIN [EXTENDED|DEPENDENCY] query
一个日志文件中,每一行记录,会有很多很多字段,实际分析中,常常使用少数几个字段。
解决方案:将原始的表中数据,依据业务需求提取出要分析的字段,数据放入到对于的业务表(子表)中,实际的业务针对业务表进行分析。
问题:在实际中,有些业务处理,会有共同数据集,比如:用户表、订单表、商品表,三个表需要进行join的操作,产生一个结果集, 会有很多的业务是针对此jion结果集进行分析。
解决方案:将众多的业务中相同的中间结果集,抽取到一个Hive中的表中,各个业务对业务进行分析。
结合使用;分级分区
union:多个表的结果合并
存储格式(textfile、orcfile、parquet)
数据压缩(snappy)
优化语句;
Join filter
mapreduce.job.jvm.numtasks
mapreduce.job.reduces
mapreduce.map.speculative true
hive.mapred.reduce.tasks.speculative.execution true
mapreduce.reduce.speculative true
一般在开发的时候,设置为false。
hive.merge.size.per.task 256000000
<property>
<name>hive.exec.parallel.thread.number</name>
<value>8</value>
<description>How many jobs at most can be executed in parallel</description>
</property>
<property>
<name>hive.exec.parallel</name>
<value>true</value>
<description>Whether to execute jobs in parallel</description>
</property>