Hive Fetch Task
为什么80%的码农都做不了架构师?>>>
show tables; metastore->>mysql; select * from bi.dpods_dp_unsubscribe where hp_statdate = '2015-03-22' limit 10; -》不起job select dpid from bi.dpods_dp_unsubscribe where hp_statdate = '2015-03-22' limit 10; ->起job,需要resource manager如果你想查询某个表的某一列,Hive默认是会启用MapReduce Job来完成这个任务,如下: 我们都知道,启用MapReduce Job是会消耗系统开销的。对于这个问题,从Hive0.10.0版本开始,对于简单的不需要聚合的类似(SELECT columns from table_name)不需要起MapReduce job,直接通过Fetch task获取数据,可以通过设置如下属性实现:
set hive.fetch.task.conversion=more; // 简单查询就不走map/reduce了,直接读取hdfs文件进行filter过滤。但是有数据量大时要等很长时间,且没有任何返回。 set hive.fetch.task.conversion=minimal; // 任何简单select都会走map/reduce;开启了Fetch任务,所以对于上述简单的列查询不在启用MapReduce job。上面的两种方法都可以开启了Fetch任务,但是都是临时起作用的;如果你想一直启用这个功能,可以在${HIVE_HOME}/conf/hive-site.xml里面加入以下配置:
<property><name>hive.fetch.task.conversion</name><value>more</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 haveany aggregations or distincts (which incurrs RS), lateral views and joins.1. minimal : SELECT STAR, FILTER on partition columns, LIMIT only2. more : SELECT, FILTER, LIMIT only (+TABLESAMPLE, virtual columns)</description> </property>meta store查询:
show tables; desc database finance;PS:
发现hive就可以启动起来了,其实我们只需要把hive理解为几个部分即可:metastore、thrift server和剩下的hive,这几个部分都是可以分开部署的,放在不同的服务器上,这样的设计增加了hive的ha和可扩展性 但是分开部署会牺牲很大的可维护性,也增加了运维的复杂性,所以一般还是把元数据留着mysql中其他的部分放在一个jvm中。 hive也是个cs结构的东西 thrift是负责client和server通信的。
转载于:https://my.oschina.net/rathan/blog/603415
总结
以上是生活随笔为你收集整理的Hive Fetch Task的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: MDEV Primer
- 下一篇: 2008R2文件服务器迁移到2012R2