Hive解释计划理解

2023-11-23

是否有任何适当的资源可以让我们完全理解 hive 生成​​的解释计划?我尝试在 wiki 中搜索它,但找不到完整的指南来理解它。 这是 wiki,它简要解释了解释计划的工作原理。但我需要有关如何推断解释计划的更多信息。https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain


我会尝试解释一下我所知道的。

执行计划是对查询所需任务、执行顺序以及每个任务的一些详细信息的描述。 要查看查询的执行计划,您可以执行此操作,在查询前添加关键字EXPLAIN,然后运行它。 执行计划可能又长又复杂。 充分理解它们需要深入了解MapReduce.

Example

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

这个查询是一个CTAS statement创建一个名为 Flights_by_Carrier 的新表,并用以下结果填充它:SELECT query. The SELECT query按承运商对航班表的行进行分组,并返回每个承运商以及该承运商的航班数。

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行动,一个metastore动作,或执行的一些其他动作Hive server.

编号并不意味着执行顺序或依赖关系。

阶段之间的依赖关系决定了它们必须执行的顺序,并且Hive在开头明确指定这些依赖关系EXPLAIN结果。

根阶段(如本示例中的 Stage-1)没有依赖项,可以先自由运行。

非根阶段在其所依赖的阶段完成之前无法运行。

舞台计划

输出的阶段计划部分显示阶段的描述。 为了Hive,从顶部开始然后向下阅读。

Stage-1 被确定为MapReduce job.

查询计划显示该作业包括map phase(由映射运算符树描述)和reduce phase(由Reduce算子树描述)。 在里面map phase,地图任务读取航班表并选择承运商和航班列。

该数据被传递到reduce phase,其中reduce任务按承运商对数据进行分组,并通过计算航班来聚合数据。

Stage-1 之后是 Stage-0,这是一个HDFS行动(移动)。

在这个阶段,Hive将前一阶段的输出移动到 HDFS 仓库目录中的新子目录。 这是新表的存储目录,该表将命名为 Flights_by_Carrier。

Stage-0 之后是 Stage-3,这是一个metastore action:

创建表.

在这个阶段,Hive在fly 数据库中创建一个名为flights_by_rier 的新表。 该表有两列:STRING列名为载体和BIGINT名为 num 的列。

最后阶段,第二阶段,收集统计数据.

最后阶段的细节并不重要,但它会收集诸如表中的行数、存储表数据的文件数等信息。HDFS,以及表中每列中唯一值的数量。 这些统计数据可用于优化Hive查询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive解释计划理解 的相关文章

随机推荐

  • 用传单绘制特定国家的地图

    我想使用该包leaflet用R绘制特定国家的地图 如意大利 西班牙等 我用函数检查了基本示例setView 我尝试为纬度和经度的 arg 给出两个值的向量 m lt leaflet gt addTiles gt Add default Op
  • NUMA 获取当前节点/核心

    我在 Linux 上使用 libnuma 我的线程应该知道它们正在运行的节点 核心 是否有可能以某种方式获取当前线程的节点 核心 我已经浏览了文档 但没有找到这样的功能 我找到了这个解决方案 include
  • 限制完成时的 IntelliJ IDEA 导入建议

    当我输入需要导入的类的名称时 IntelliJ 会亲切地弹出一个建议列表 然而 大多数时候 这些建议是我永远不想导入的东西 尤其是偶然的 比如java awt 有没有办法防止我永远不会导入的包出现在完成列表中 我已经搜索了这些选项 但没有找
  • 使用 MPI_Bcast 进行 MPI 通信

    我正在尝试使用 MPI Bcast 将消息从根节点广播到所有其他节点 然而 每当我运行这个程序时 它总是在开始时挂起 有人知道这是怎么回事吗 include
  • Cassandra 中的高基数和低基数

    我不断遇到这些术语 high cardinality and low cardinality in Cassandra 我不明白它们到底是什么意思 它们对查询有什么影响以及首选是什么 请举例说明 因为这样很容易理解 X 的基数只不过是组成
  • 使用 powershell 将路径永久添加到 Windows 似乎不起作用

    我跟着这个程序为了使用 powershell 永久添加 SumatraPDF 的路径 链接中的最后几个命令旨在检查路径是否确实已添加 当我使用以下命令访问路径时 get itemproperty path Registry HKEY LOC
  • ggplot2:将不连续的持续时间绘制为条形图

    我使用 ggplot 将各种事件绘制为事件开始的日期 x 轴 和开始时间 y 轴 的函数 数据 代码如下 date lt c 2013 06 05 2013 06 05 2013 06 04 2013 06 04 2013 06 04 20
  • 互补误差函数 erfcf() 的可向量化实现

    互补误差函数 erfc 是与标准正态分布密切相关的特殊函数 它经常用于统计学和自然科学 例如扩散问题 其中需要考虑该分布的 尾部 并使用误差函数 erf 因此不适合 ISO C99 标准数学库中提供了互补误差函数 如下所示 erfcf er
  • 并发集合在没有 Thread.Sleep 的情况下消耗了太多 cpu

    两者的正确用法是什么 BlockingCollection or ConcurrentQueue这样您就可以自由地将项目出列 而不会使用线程消耗一半或更多的 CPU 资源 我使用 2 个线程运行一些测试 除非我的 Thread Sleep
  • Angular2 异常:TypeError el.createShadowRoot 不是函数(Safari/Edge)

    我有一个 angular2 应用程序 在 Chrome 和 Firefox 中运行良好 但在 Safari 中我收到此错误 TypeError el createShadowRoot 不是函数 Edge 中也类似 对象不支持属性或方法 cr
  • jQuery 模式对话框未提交我的表单

    我正在使用 jQuery 模态对话框询问用户是否希望提交表单 但是 在用户单击对话框的 提交 按钮后 表单并未提交 如果我再次单击表单提交按钮 它就会提交 我猜这是一个范围问题 我看过其他一些关于它的帖子 但到目前为止已经花了很多时间但没有
  • 如何使用 Cloud Functions for Firebase 预渲染页面以进行 SEO?

    Firebase 文档的 Cloud Functionshere指出这可以使用云函数来完成 预渲染单页应用程序以改善 SEO 这允许您创建动态元标签以在各种社交网络上共享 我有两个问题 有人可以举例说明如何实现预渲染吗 它如何与 Fireb
  • JQuery中点击容器内元素时如何取消容器div触发的点击事件?

    E g div class container div class inside I am not fire when click me div div container click function container do somet
  • @@IDENTITY、SCOPE_IDENTITY()、OUTPUT 和其他检索最后身份的方法

    我见过在插入后检索主键标识字段的值时使用的各种方法 declare t table id int identity primary key somecol datetime default getdate insert into t def
  • 在 Visual Studio 2010 中查找类后代

    我正在 Visual Studio 2010 的对象浏览器中查看一个抽象类 我想找到从这个抽象类派生的所有类 这样我就可以选择最好的一个来在我的应用程序中实现 我没有该程序集的源代码 因此无法使用在文件中查找功能 不幸的是 我似乎根本不知道
  • 基于另一个列表的 1 个列表的流过滤器

    我在这个论坛和谷歌搜索后发布我的查询 但无法解决相同的问题 例如 Link1 Link2 Link3 我正在尝试根据列表 1 中的值过滤列表 2 多列 List1 Datsun Volvo BMW Mercedes List2 1 Jun
  • 将通用过程作为实际参数传递给函数

    我试图将通用过程作为实际参数传递给函数 module mymod implicit none interface func module procedure func1 module procedure func2 endinterface
  • Ionic 2:使用 Cordova 插件

    我做了很多谷歌搜索 但似乎无法找到太多答案 在 Ionic 2 中调用 Cordova 插件的语法是如何工作的 例如 在 Ionic 1 中 我正在使用 Facebook 插件 我会这样称呼它 cordovaFacebook login p
  • 按字母顺序对选择菜单进行排序?

    我有以下选择菜单 jsFiddle
  • Hive解释计划理解

    是否有任何适当的资源可以让我们完全理解 hive 生成 的解释计划 我尝试在 wiki 中搜索它 但找不到完整的指南来理解它 这是 wiki 它简要解释了解释计划的工作原理 但我需要有关如何推断解释计划的更多信息 https cwiki a