为了账号安全,请及时绑定邮箱和手机立即绑定

关于mepereduce

为什么HIVE 查询某列会执行mepereduce的JOB?

正在回答

2 回答

Not exactly。 

其实查询某一些列也是可以不执行MR job的,尤其是在Hive 0.14以后, 是默认的。

之前的版本比如0.13的话,你需要在hive-site.xml里设置参数‘hive.fetch.task.conversion’为 ‘more’:

<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 incurrs 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.threshold这个参数,在0.14以后默认是1G(table size)。你可以设置成-1(infinite),当然-1的话对于petabyte级别的表可能有点小危险,慎用。  

0 回复 有任何疑惑可以回复我~

因为HIVE里的数据是直接存储在HDFS的文件中的,如果是select *的话是直接返回文件的全部内容,所以不需要执行Mapreduce的job,但如果是查询某列的话,不能直接从文件内容中摘取,需要跑job去摘取某列,所以需要执行job。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
走近大数据之Hive入门
  • 参与学习       54598    人
  • 解答问题       102    个

Hive是基于HDFS的数据仓库,教程将向大家介绍Hive的体系结构

进入课程

关于mepereduce

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信