Hive 如何从配置单元cli将配置单元sql查询作为mr作业提交

Hive 如何从配置单元cli将配置单元sql查询作为mr作业提交,hive,mapreduce,hiveql,hadoop2,cloudera-cdh,Hive,Mapreduce,Hiveql,Hadoop2,Cloudera Cdh,我已经部署了一个CDH-5.9集群,使用MR作为配置单元执行引擎。我有一个名为“users”的配置单元表,有50行。每当我执行查询时,select*from users都可以正常工作,如下所示: hive> select * from users; OK Adam 1 38 ATK093 CHEF Benjamin 2 24 ATK032 SERVANT Charles 3 45 ATK107

我已经部署了一个CDH-5.9集群,使用MR作为配置单元执行引擎。我有一个名为“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)
失败。容器日志也没有任何信息来找出它失败的原因

      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>从用户中选择max(age);
查询ID=canballuser_201708020101_5ed7c6b7-097f-4f5f-af68-486b45d7d4e
职位总数=1
正在启动作业1/1
编译时确定的reduce任务数:1
要更改减速器的平均负载(以字节为单位):
设置hive.exec.reducers.bytes.per.reducer=
为了限制减速器的最大数量:
设置hive.exec.reducers.max=
为了设置恒定数量的减速器:
设置mapreduce.job.reduces=
开始作业=作业\u 1501851520242\u 0010,跟踪URL=http://hadoop-master:8088/proxy/application_1501851520242_0010/
Kill命令=/opt/cloudera/parcels/CDH-5.9.1-1.cdh5.9.1.p0.4/lib/hadoop/bin/hadoop作业-Kill作业
阶段1的Hadoop作业信息:映射程序数:0;减速器数量:0
2017-08-08 02:01:11472第一阶段地图=0%,减少=0%
结束作业=作业_1501851520242_0010有错误
作业期间出错,正在获取调试信息。。。
失败:执行错误,从org.apache.hadoop.hive.ql.exec.mr.MapRedTask返回代码2
推出MapReduce作业:
阶段1:HDFS读取:0 HDFS写入:0失败
花费的MapReduce CPU总时间:0毫秒

如果我从配置单元cli获取配置单元查询执行的工作流,则可能有助于我进一步调试该问题。

配置单元查询执行流中涉及许多组件。这里解释了高级体系结构:

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

典型查询执行流(高级)

  • UI调用驱动程序的执行接口
  • 驱动程序为查询创建会话句柄,并将查询发送给编译器以生成执行计划
  • 编译器从元存储中获取必要的元数据。此元数据用于将查询树中的表达式类型检查为 以及基于查询谓词修剪分区
  • 编译器生成的计划是一个阶段的DAG,每个阶段要么是映射/减少作业,要么是元数据操作,要么是 HDFS上的操作。对于map/reduce阶段,计划包含map 操作员树(在映射程序上执行的操作员树)和 reduce操作符树(用于需要reducer的操作)
  • 执行引擎将这些阶段提交给反序列化程序关联的每个任务(映射器/还原器)中的适当组件 使用表或中间输出从中读取行 HDFS文件,这些文件通过关联的运算符传递 树。一旦生成输出,它将被写入一个临时文件 HDFS文件通过序列化程序(这种情况发生在 该操作不需要reduce)。使用临时文件 为计划的后续映射/缩减阶段提供数据。对于DML 操作将最终临时文件移动到表的 地点。此方案用于确保不读取脏数据 (文件重命名是HDFS中的一个原子操作)
  • 对于查询,临时文件的内容由执行引擎直接从HDFS读取,作为从的fetch调用的一部分 司机
  • Hive documentatio根目录在这里:您可以找到有关不同组件的更多详细信息。 此外,您还可以研究源代码以了解有关某些类实现的更多详细信息


    Hadoop作业跟踪器文档:

    转到Tracking URL=并仔细检查AM日志以及失败(未终止)的容器尝试。应该有信息。@leftjoin谢谢你提供的信息,这是我的错误,我查的是旧的应用程序日志,而不是问题中提到的应用程序id。现在是一个jar依赖问题,我解决了它。但是,如果您知道工作流,请解释它共享知识。谢谢您的解释。我阅读了Hive architecture文档,需要阅读更多参考资料才能深入了解其内部工作原理。这可能是我开始学习蜂巢的一个起点。再次感谢。请阅读TEZ执行框架