配置单元查询的控制流程是什么?
我们说,我想加入Emp_Table和Dept_Table,
流程如何进行?
从元商店中的哪个表中,它会获取所有相关信息?
如, 1)与Emp_Table对应的文件在哪里? (HDFS位置) 2)表Emp_Table的字段名称是什么? 3)文件中包含Emp_Table数据的分隔符是什么? 4)如何对数据进行分区或分区,在这种情况下,从哪里(元存储表名称)和如何(查询)给出HDFS文件夹位置?
答案 0 :(得分:3)
流程如下:
第1步: Hive客户端触发查询(使用JDBC,ODBC或Thrift或webUI的CLI或某些外部客户端)。
第2步: 编译器接收查询并连接到Metastore。
第3步: 开始编译阶段。
Parser
将查询转换为parse tree
表示。 ANTLR用于生成abstract syntax tree(AST)
。
Semantic analyzer
编译器根据输入和输出表上的Metastore提供的信息构建逻辑计划。编译器还会检查type compatibilities
并在此阶段通知compile-time semantic errors
。
QBT creation
在此步骤中,将AST转换为中间表示,称为query block(QB) tree
。
Logical plan generator
在此步骤中,编译器将逻辑计划从语义分析器写入逻辑操作树。
Optimization
这是编译阶段中最重要的部分,因为整个DAG optimizations
系列在此阶段发生。它涉及以下任务:
Logical optimization
Column pruning
Predicate pushdown
Partition pruning
Join optimization
Grouping(and regrouping)
Repartitioning
Conversion of logical plan into physical plan by physical plan generator
Creation of final DAG workflow of MapReduce by physical plan generator
第4步: 执行引擎获取编译器输出以在Hadoop平台上执行它们。它涉及以下任务:
MapReduce任务首先将其部分计划序列化为plan.xml 文件。
然后将plan.xml文件添加到任务的作业缓存中 使用Hadoop生成ExecMapper和ExecReducer的实例。
这些类中的每一个都反序列化plan.xml文件并执行 任务的相关部分。
最终结果存储在临时位置和 如果完成整个查询,结果将移动到表中 它是插入或分区。否则返回调用 程序在临时位置。
注意:所有任务都按其依赖项的顺序执行。 每个只有在执行了所有先决条件后才会执行。
要了解Metastore表及其字段,您可以查看Metastore的MR图:
HTH
答案 1 :(得分:0)
要查看底层HDFS目录路径,分隔符,分区和其他详细信息..
describe extended Emp_Table;
describe extended Dept_Table;
了解Hive控制流如何将EXPLAIN
或EXPLAIN EXTENDED
放在查询前面。