hive解释计划理解

xpszyzbs  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(530)

有没有合适的资源可以让我们完全理解和解释Hive产生的计划?我试着在维基上搜索它,但是找不到一个完整的指南来理解它。下面是一个wiki,它简要地解释了explain计划是如何工作的。但我需要更多关于如何推断解释计划的信息。https://cwiki.apache.org/confluence/display/hive/languagemanual+explain

798qvoo8

798qvoo81#

我会尽量解释一下我所知道的。
执行计划是对查询所需任务的描述、执行它们的顺序以及每个任务的一些细节。要查看查询的执行计划,可以使用关键字作为查询的前缀 EXPLAIN ,然后运行它。执行计划可能是漫长而复杂的。充分理解它们需要深刻的知识 MapReduce .
例子

EXPLAIN CREATE TABLE flights_by_carrier AS 
SELECT carrier, COUNT(flight) AS num 
FROM flights 
GROUP BY carrier;

此查询是 CTAS statement 这将创建一个名为flights\u by\u carrier的新表,并用 SELECT query . 这个 SELECT query 按承运商对flights表的行进行分组,并返回每个承运商以及该承运商的航班数。
Hive的输出 EXPLAIN 示例的语句如下所示

+----------------------------------------------------+--+
|                      Explain                       |
+----------------------------------------------------+--+
| STAGE DEPENDENCIES:                                |
|   Stage-1 is a root stage                          |
|   Stage-0 depends on stages: Stage-1               |
|   Stage-3 depends on stages: Stage-0               |
|   Stage-2 depends on stages: Stage-3               |
|                                                    |
| STAGE PLANS:                                       |
|   Stage: Stage-1                                   |
|     Map Reduce                                     |
|       Map Operator Tree:                           |
|           TableScan                                |
|             alias: flights                         |
|             Statistics: Num rows: 61392822 Data size: 962183360 Basic stats: COMPLETE Column stats: NONE |
|             Select Operator                        |
|               expressions: carrier (type: string), flight (type: smallint) |
|               outputColumnNames: carrier, flight   |
|               Statistics: Num rows: 61392822 Data size: 962183360 Basic stats: COMPLETE Column stats: NONE |
|               Group By Operator                    |
|                 aggregations: count(flight)        |
|                 keys: carrier (type: string)       |
|                 mode: hash                         |
|                 outputColumnNames: _col0, _col1    |
|                 Statistics: Num rows: 61392822 Data size: 962183360 Basic stats: COMPLETE Column stats: NONE |
|                 Reduce Output Operator             |
|                   key expressions: _col0 (type: string) |
|                   sort order: +                    |
|                   Map-reduce partition columns: _col0 (type: string) |
|                   Statistics: Num rows: 61392822 Data size: 962183360 Basic stats: COMPLETE Column stats: NONE |
|                   value expressions: _col1 (type: bigint) |
|       Reduce Operator Tree:                        |
|         Group By Operator                          |
|           aggregations: count(VALUE._col0)         |
|           keys: KEY._col0 (type: string)           |
|           mode: mergepartial                       |
|           outputColumnNames: _col0, _col1          |
|           Statistics: Num rows: 30696411 Data size: 481091680 Basic stats: COMPLETE Column stats: NONE |
|           File Output Operator                     |
|             compressed: false                      |
|             Statistics: Num rows: 30696411 Data size: 481091680 Basic stats: COMPLETE Column stats: NONE |
|             table:                                 |
|                 input format: org.apache.hadoop.mapred.TextInputFormat |
|                 output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|                 serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|                 name: fly.flights_by_carrier       |
|                                                    |
|   Stage: Stage-0                                   |
|     Move Operator                                  |
|       files:                                       |
|           hdfs directory: true                     |
|           destination: hdfs://localhost:8020/user/hive/warehouse/fly.db/flights_by_carrier |
|                                                    |
|   Stage: Stage-3                                   |
|       Create Table Operator:                       |
|         Create Table                               |
|           columns: carrier string, num bigint      |
|           input format: org.apache.hadoop.mapred.TextInputFormat |
|           output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat |
|           serde name: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|           name: fly.flights_by_carrier             |
|                                                    |
|   Stage: Stage-2                                   |
|     Stats-Aggr Operator                            |
|                                                    |
+----------------------------------------------------+--+

阶段相关性
示例查询将在四个时间段内执行 stages ,第0阶段至第3阶段。每个 stage 可能是一个 MapReduce 工作,工作 HDFS 行动,a metastore 动作,或由 Hive server .
编号并不意味着执行顺序或依赖关系。
阶段之间的依赖关系决定了它们必须执行的顺序,以及 Hive 在开始时显式指定这些依赖项 EXPLAIN 结果。
根阶段(如本例中的阶段1)没有依赖关系,可以先自由运行。
非根阶段在其依赖的阶段完成之前不能运行。
舞台平面图
阶段计划部分的输出显示阶段的描述。为了 Hive ,从顶部开始往下读。
第1阶段被确定为 MapReduce 工作。
查询计划显示此作业包括 map phase (由map操作符树描述)和 reduce phase (由reduce操作符树描述)。在 map phase ,Map任务读取航班表并选择承运商和航班列。
此数据将传递给 reduce phase ,其中reduce任务按承运商对数据进行分组,并通过计算航班数对数据进行聚合。
第1阶段之后是第0阶段,这是一个 HDFS 动作(移动)。
在这个阶段, Hive 将前一阶段的输出移动到hdfs中仓库目录中的新子目录。这是新表的存储目录,该表将由\u carrier命名为\u。
第0阶段之后是第3阶段,这是一个 metastore 行动:
创建表。
在这个阶段, Hive 在fly数据库中创建一个名为flights\ u by\ u carrier的新表。该表有两列:a STRING 名为carrier和a的列 BIGINT 名为num的列。
最后阶段,第二阶段,收集统计数据。
最后阶段的细节并不重要,但它收集了诸如表中的行数、存储表数据的文件数等信息 HDFS ,以及表中每列中唯一值的数目。这些统计数据可用于优化 Hive 查询。

相关问题