Hive 如何在运行简单配置单元查询时强制执行MR?

Hive 如何在运行简单配置单元查询时强制执行MR?,hive,mapreduce,Hive,Mapreduce,MR上有Hive 2.1.1,表test\u table存储为sequencefile和以下特别查询: 选择t* 从测试表t 其中t.test_列=100 虽然可以在不启动MR(获取任务)的情况下执行此查询,但有时扫描HDFS文件比触发单个映射作业需要更长的时间 当我想要强制执行MR执行时,我会使查询更加复杂:例如,使用distinct。这种方法的主要缺点是: 查询结果可能与原始查询的结果不同 给集群带来无意义的计算负载 在MR上使用配置单元时,是否有建议的强制MR执行方法?配置单元执行器根据

MR上有Hive 2.1.1,表
test\u table
存储为sequencefile和以下特别查询:

选择t*
从测试表t
其中t.test_列=100
虽然可以在不启动MR(获取任务)的情况下执行此查询,但有时扫描HDFS文件比触发单个映射作业需要更长的时间

当我想要强制执行MR执行时,我会使查询更加复杂:例如,使用
distinct
。这种方法的主要缺点是:

  • 查询结果可能与原始查询的结果不同
  • 给集群带来无意义的计算负载

  • 在MR上使用配置单元时,是否有建议的强制MR执行方法?

    配置单元执行器根据以下设置(默认设置)决定执行映射任务或获取任务:

    • hive.fetch.task.conversion(“更多”)-将MR任务转换为fetch任务的策略
    • hive.fetch.task.conversion.threshold(1 GB)-可馈送到提取任务的输入数据的最大大小
    • hive.fetch.task.aggr(false)-当设置为true时,也可以在fetch任务中执行来自src的
      select count(*)等查询
    它会提示我以下两个选项:

  • 将配置单元.fetch.task.conversion.threshold设置为较低的值,例如512 Mb
  • 将配置单元.fetch.task.conversion设置为“无”
  • 出于某种原因,在我的情况下,降低阈值并没有改变任何事情,所以我支持第二种选择:似乎适合于临时查询


    有关这些设置的更多详细信息,请参见和。

    只需添加
    set-hive.execution.engine=mr在查询之前,它将强制配置单元使用MR。

    不清楚“强制MR”是什么意思。配置单元查询始终转换为MR作业。另一点是,如果该工作需要减速器。在简单的“选择”情况下,MR作业仅由映射器组成(即没有还原器)@mangusta在简单的
    select*
    query配置单元执行器可能会退回到“获取任务”而不是“仅映射任务”,因此MR根本不会触发“配置单元2.1.1超过MR”建议使用MR引擎,问题的根源不在所选引擎中