Hive 您能解释一下在配置单元中调用mapreduce的时间和原因吗

Hive 您能解释一下在配置单元中调用mapreduce的时间和原因吗,hive,hiveql,Hive,Hiveql,从表_name limit 5中选择* 从表\u name limit 5中选择col1\u name、col2\u name 当我运行第一个查询时,将不会调用MapReduce,而对于其他查询,将调用MapReduce。请您解释一下原因。要理解原因,首先我们需要知道map和reduce阶段的含义:- 映射:基本上是一个过滤器,它按排序顺序过滤和组织数据。例如,它将从第二个查询中的行中筛选col1\u name、col2\u name。然而,在第一次查询中,您读取的是每一列,不需要过滤。因此没有

从表_name limit 5中选择*

  • 从表\u name limit 5中选择col1\u name、col2\u name


  • 当我运行第一个查询时,将不会调用MapReduce,而对于其他查询,将调用MapReduce。请您解释一下原因。

    要理解原因,首先我们需要知道map和reduce阶段的含义:-

  • 映射:基本上是一个过滤器,它按排序顺序过滤和组织数据。例如,它将从第二个查询中的行中筛选col1\u name、col2\u name。然而,在第一次查询中,您读取的是每一列,不需要过滤。因此没有映射阶段

  • Reduce:Reduce只是跨行汇总操作数据。例如,一列的和!在这两个查询中,您不需要任何摘要数据。因此没有减速器

  • 因此,第一个查询没有映射reduce,第二个查询只有映射器,但没有reduce。

    其逻辑

    在第一个查询中,唯一要做的事情是——转储限制为5的数据(这意味着要转储任意5个行),对于特定类型的查询,不做任何处理。(不知道行是如何分开的)


    但在第二个查询中,将有一个map-reduce任务。为什么?因为首先它必须处理数据来知道有多少不同的列,而不是知道col1和col1是否真的存在或者其中只有一个列。如果存在,则必须首先删除其他列,而不是在其余列中,它只需在其中取五行

    执行下面的简单配置单元查询:

    Describe table;
    
    这将从配置单元元存储中读取数据,是配置单元中最简单、最快的查询

    select * from table;
    
    此查询只需要从HDFS读取数据。到目前为止,这两个阶段都不需要任何map或reduce阶段

    select * from table where color in ('RED','WHITE','BLUE')
    
    此查询只需要一个映射,没有缩减阶段。没有任何类型的聚合函数。这里我们过滤以收集红色、白色或蓝色的记录

    select count(1) from table;
    
    此查询只需要一个reduce阶段。不需要映射,因为我们正在计算表中的所有记录。如果我们想跨元素计数,那么我们将在reduce阶段之前添加一个map阶段。见下文:

    Select color
    , count(1) as color_count 
      from table  
      group by color;
    
    此查询具有聚合函数和GROUPBY语句。我们正在计算表中红色、白色或蓝色元素的数量。此计数需要一个映射和一个reduce作业

    基本上,我们在上述作业中创建一个键值对。我们将记录映射到一个键。在这种情况下,它将是红色、白色和蓝色。然后得到一个值。所以键:value是color:1。然后我们可以对整个关键颜色的值求和。这是一个地图和缩小作业

    现在使用相同的查询和ORDERBY子句

    Select color
    , count(1) as color_count 
      from table  
      group by color
      order by colour_count desc;
    
    这将添加另一个reduce阶段,并强制通过数据集的单个reducer。这是必要的,因为我们希望确保保持全局排序。计数(不同颜色)还强制使用单个减缩器,并且需要贴图和减缩阶段

    当您向配置单元查询添加复杂性时,您可以以类似的方式添加映射并减少获得请求结果所需的作业

    如果您想了解配置单元将如何管理查询,可以在查询前使用explain caluse

     Explain select * from table;
    

    这可以让您了解查询是如何在后台执行的。它将向您显示阶段的依赖关系,以及如果任何聚合导致reduce作业和操作符导致map作业,该怎么办。

    感谢您的解释这一点已经得到解决。以上两个查询都没有为我调用MapReduce。为什么呢?(
    select count(*)from myTable
    在我的情况下会调用MapReduce)。select count(1)from table将同时运行map和reduce,而不仅仅是reduce。这是错误的,没有要映射的键。我在这个链接上添加了几个截图来解释我之前所说的[链接]()你的解释似乎并不完全正确。E.x.
    select*表中的颜色('RED'、'WHITE'、'BLUE')
    没有为我运行任何map reduce作业(explain
    命令确认了这一点)。另一个例子是从表中选择计数(1)正在执行5个映射器作业和1个还原器作业。虽然你的解释很有道理,但这并不是蜂巢看起来是如何工作的。