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

lokaqttq  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(342)

我已经部署了一个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)

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

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

如果我从hivecli获取配置单元查询执行的工作流,那么进一步调试问题可能会有所帮助。

kmpatx3s

kmpatx3s1#

在配置单元查询执行流中涉及许多组件。高级体系结构如下:https://cwiki.apache.org/confluence/display/hive/design
本文档中有指向更详细组件文档的链接。
典型查询执行流程(高级)
ui调用驱动程序的execute接口。
驱动程序为查询创建会话句柄,并将查询发送给编译器以生成执行计划。
编译器从元存储中获取必要的元数据。此元数据用于对查询树中的表达式进行类型检查,以及根据查询 predicate 修剪分区。
编译器生成的计划是一个阶段的dag,每个阶段要么是map/reduce作业,要么是元数据操作,要么是hdfs上的操作。对于map/reduce阶段,计划包含map操作符树(在Map器上执行的操作符树)和reduce操作符树(对于需要reducer的操作)。
执行引擎将这些阶段提交给每个任务中的相应组件(Map器/缩减器)。与表或中间输出关联的反序列化器用于从hdfs文件中读取行,并通过关联的运算符树传递这些行。一旦生成了输出,就通过序列化程序将其写入一个临时hdfs文件(如果操作不需要reduce,则在Map器中发生这种情况)。临时文件用于为计划的后续Map/缩减阶段提供数据。对于dml操作,最终的临时文件被移动到表的位置。此方案用于确保不读取脏数据(文件重命名是hdfs中的原子操作)。
对于查询,执行引擎直接从hdfs读取临时文件的内容,作为驱动程序的fetch调用的一部分。
配置单元文档根在这里:https://cwiki.apache.org/confluence/display/hive/home 您可以找到有关不同组件的更多详细信息。您还可以研究源代码以获得有关某些类实现的更多详细信息。
hadoop job tracker文档:https://wiki.apache.org/hadoop/jobtracker

相关问题