专业3合1网站建设价格,广告策划书封面,襄樊和襄阳是一个地方吗,注册网站引流问题背景#xff1a; 在对Hive求count(*)时#xff0c;发现有些表会启mapreduce计算、返回 结果#xff0c;比较耗时#xff0c;有的表1秒之内返回结果 刚开始以为刚刚执行过一次count()后会对结果进行缓存#xff0c;不用再去跑mapreduce#xff0c;但经进一步实验发现…问题背景 在对Hive求count(*)时发现有些表会启mapreduce计算、返回 结果比较耗时有的表1秒之内返回结果 刚开始以为刚刚执行过一次count()后会对结果进行缓存不用再去跑mapreduce但经进一步实验发现大多数表每次执行count()操作都会跑mapreduce于是猜测的结论不成立。 后在必应查找原因大部分的结果都指向了‘hive从1.0开始采用Fetch Task 对于简单查询的自动优化’ 具体内容可以参考http://blog.javachen.com/2014/06/09/fetchtask-in-hive.html
查找思路 经过了解Fetch Task发现它对简单查询会直接读取文件但是不适用于聚合操作继续查找原因发现有人提到分区表是有把分区的信息写入元数据于是查看hive的mysql元数据表。
问题解决 在hive的元数据库‘hive’库中有8张跟分区表有关的表其中partitions保存有分区表的源表、分区id等信息而在另一张表‘partition_params’表中存有 part_id 和对应的参数值其中包括行数行数据大小总大小等 答案就很明了了分区表的count(*)是从元数据表中所取而并非从所有节点上 map 然后reduce。