【问题标题】:How do the hive sql queries are submitted as mr job from hive cli如何从 hive cli 将 hive sql 查询作为 mr 作业提交
【发布时间】:2018-01-16 01:33:20
【问题描述】:

我已经部署了一个带有 MR 的 CDH-5.9 集群作为 Hive 执行引擎。我有一个名为“users”的配置单元表,有 50 行。每当我执行查询select * from users 时都可以正常工作,如下所示:

hive> select * from users;
OK

Adam       1       38     ATK093   CHEF
Benjamin   2       24     ATK032   SERVANT
Charles    3       45     ATK107   CASHIER
Ivy        4       30     ATK384   SERVANT
Linda      5       23     ATK132   ASSISTANT 
. 
.
.

Time taken: 0.059 seconds, Fetched: 50 row(s)

但在提交为 mr 作业后发出 select max(age) from users 失败。容器日志也没有任何信息来找出它失败的原因。

      hive> select max(age) from users;
        Query ID = canballuser_20170808020101_5ed7c6b7-097f-4f5f-af68-486b45d7d4e
        Total jobs = 1
        Launching Job 1 out of 1
        Number of reduce tasks determined at compile time: 1
        In order to change the average load for a reducer (in bytes):
        set hive.exec.reducers.bytes.per.reducer=<number>
        In order to limit the maximum number of reducers:
        set hive.exec.reducers.max=<number>
        In order to set a constant number of reducers:
        set mapreduce.job.reduces=<number>
        Starting Job = job_1501851520242_0010, Tracking URL = http://hadoop-master:8088/proxy/application_1501851520242_0010/
        Kill Command = /opt/cloudera/parcels/CDH-5.9.1-1.cdh5.9.1.p0.4/lib/hadoop/bin/hadoop job  -kill job_1501851520242_0010
        Hadoop job information for Stage-1: number of mappers: 0; number of reducers: 0
        2017-08-08 02:01:11,472 Stage-1 map = 0%,  reduce = 0%
        Ended Job = job_1501851520242_0010 with errors
        Error during job, obtaining debugging information...
        FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
        MapReduce Jobs Launched:
        Stage-Stage-1:  HDFS Read: 0 HDFS Write: 0 FAIL
        Total MapReduce CPU Time Spent: 0 msec

如果我从 hive cli 获得 hive 查询执行的工作流程,这可能对我进一步调试问题有所帮助。

【问题讨论】:

  • 转到 Tracking URL = hadoop-master:8088/proxy/application_1501851520242_0010 并仔细检查 AM 的日志以及失败(未终止)的容器尝试。应该有信息。
  • @leftjoin 感谢您的信息,这是我的错误,我查看了旧的应用程序日志而不是问题中提到的应用程序 ID。现在它是一个jar依赖问题,我解决了它。但是,如果您知道工作流程,请解释一下,分享知识。

标签: hive mapreduce hiveql hadoop2 cloudera-cdh


【解决方案1】:

Hive 查询执行流程涉及很多组件。这里解释了高级架构:https://cwiki.apache.org/confluence/display/Hive/Design

本文档中有指向更详细组件文档的链接。

典型的查询执行流程(高级)

  1. UI 调用驱动程序的执行接口。
  2. 驱动程序为查询创建会话句柄并将查询发送到编译器以生成执行计划。
  3. 编译器从元存储中获取必要的元数据。此元数据用于对查询树中的表达式进行类型检查 以及基于查询谓词修剪分区。
  4. 编译器生成的计划是阶段的 DAG,每个阶段可以是映射/归约作业、元数据操作或 HDFS 上的操作。对于 map/reduce 阶段,计划包含 map 运算符树(在映射器上执行的运算符树)和 一个 reduce 运算符树(用于需要 reducer 的操作)。
  5. 执行引擎将这些阶段提交给适当的组件 与表或中间输出一起用于从 HDFS 文件,这些文件通过关联的运算符传递 树。生成输出后,将其写入临时 HDFS 文件通过序列化程序(这发生在映射器中,以防万一 该操作不需要减少)。使用临时文件 为计划的后续 map/reduce 阶段提供数据。对于 DML 操作最终的临时文件被移动到表的 地点。该方案用于保证不读取脏数据 (文件重命名是 HDFS 中的原子操作)。
  6. 对于查询,执行引擎直接从 HDFS 读取临时文件的内容,作为 fetch 调用的一部分 司机。

Hive 文档根在这里 :https://cwiki.apache.org/confluence/display/Hive/Home 您可以找到有关不同组件的更多详细信息。 您还可以研究资源以获取有关某些类实现的更多详细信息。

Hadoop 作业跟踪器文档:https://wiki.apache.org/hadoop/JobTracker

【讨论】:

  • 感谢您的解释。我阅读了 Hive 架构文档,需要阅读更多参考资料以深入了解其内部工作原理。这可能是我开始学习 Hive 的起点。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 2020-01-05
  • 1970-01-01
相关资源
最近更新 更多