Hive
是将
SQL
语句转换成
hadoop
的
MapReduce
程序,通常在客户端执行
hive
命令,然后输入
SQL
语句后,
hive
将
SQL
语句生成多个
MR
的
job
,然后将这些
job
提交给
hadoop
进行执行,完成后,再把结果放入到
hdfs
或者本地的临时文件中。
Hive
中的表结构信息都是保存在关系型数据库中,如
mysql,derby
等,可以通过
hive-site.xml
中配置数据库的
URL,
用户名,密码等。而表的实际数据内容保存在
hadoop
的
hdfs
文件中,行和列数据分别用特殊字符串分格开,以便能够读取数据,默认是用
ctrl+a
和
\n
来分隔。
客户
/
服务器通信:由
org.apache.hadoop.hive.ql
包中的
Driver
类来完成,该类主要有一个
run(command)
方法,而该方法主要有二个方法组成:
int ret = compile(command);
此方法主要完成语法,语义,计划生成。
ret = execute();
执行物理计划,即提交相应的
job
给
hadoop
进行执行。
执行完成后,会将执行结果通过
CommandProcessorResponse
类包装返回给客户端。
另外,在hive
中,提供本地直接运行hive
命令,也提交了jdbc
访问。具体实现分别在对应的包里。
语法分析器:将
sql
语句转换成一颗语法树,像编译原理书上讲的,其实就是一个普通树,只不过这颗保存了
sql
语句的结构,而
hive
是用
anltr
自动生成的语法树。分别由
org.apache.hadoop.hive.ql.parse
包中的HiveLexer
和HiveParser
完成词法和语法分析工作。
语义分析:根据不同的类型的语句生成不同的语法,所以有个抽象语义分析类
BaseSemanticAnalyzer
,分别有以下子类,对应于不同类型的语句:
ExplainSemanticAnalyzer
ExplainSemanticAnalyzer
LoadSemanticAnalyzer
DDLSemanticAnalyzer
FunctionSemanticAnalyzer
SemanticAnalyzer
语义分析完成后,会将语句中的相应信息放入到
org.apache.hadoop.hive
.ql.plan
包中
*Desc
类中,这些类记录了相应语句的基本信息。
然后会对语义完了的信息进行验证,比如表是否存在,字段是否存在,这时需要查询元数据,同时将表的相关信息放到
desc
对象中。
逻辑计划生成器:根据语义分析后的相关信息,将生成出逻辑操作树,抽象类为
Operator
。子类有:
ExtractOperator
FilterOperator
ForwardOperator
GroupbyOperator
LateralViewJoinOperator
LimitOperator
MapOperator
ScriptOperator
SelectOperator
TableScanOperator
TerminalOperator-Base Class
FileSinkOperator
ReduceSinkOperator
UDTFOperator
UnionOperator
计划优化器:将操作树进行一些优化,主要是基于规则的优化。这部分,这次我略过了,下次再讲解。
物理计划生成器:根据逻辑操作树生成出物理计划树,这个物理计划是由
Task
对象来包装的,而
Task
类会有一个
Work
对象,
Work
类是物理计划的描述,当
task
对象执行时,通常需要用到
work
对象上的相关信息。
Work
子类有:
FetchWork
MoveWork
MapredWork
CopyWork
DDLWork
FunctionWork
ExplainWork
ConditionalWork
物理计划执行器:就是将一颗含有
Task
类对象的树,进行从上到下执行。分别调用该对象的
execute()
方法,而该方法会完成相应的物理计划执行工作。主要有:
FetchTask
ConditionalTask
CopyTask
DDLTask
ExplainTask
MapRedTask
MoveTask
每个类都表示一种物理计划。如
FetchTask
就是从
hdfs
或者本地文件中取出表或视图的记录。
总结,
Hive
跟大多数的关系数据库类似的,有相同的步骤来完成从语句到最后物理执行。不同的是
Hive
的执行是在
hadoop
的
MR
程序来执行。同时在这个过程中的,操作类,计划类都是由
Java
对象来包装起来,且可以序列化的,相信其他数据库的计划也是某种语言的对象来保存的。
分享到:
相关推荐
### Hive源码分析 #### 背景与概述 Hive是Facebook开发的一款数据仓库工具,用于处理存储在Hadoop文件系统中的大量数据集。它通过提供SQL-like语言HiveQL来简化对这些数据的查询过程。本文将深入剖析Hive 0.7.1...
学习Hive源码有助于理解其内部运作机制,从而更好地优化查询、开发自定义功能或修复问题。通过分析`metastore/src`, `ql/src`, `serde/src`, `exec/src`等目录下的代码,我们可以逐步揭示Hive如何处理元数据、解析...
四、Hive源码分析 深入理解Hive 1.2.2源代码有助于我们了解其内部工作机制,例如,解析器如何将SQL语句转化为执行计划,优化器如何优化查询,以及执行器如何将计划转化为实际的分布式计算任务。源代码中包含了各种...
3. **获取 Hive 源码或可执行代码**:可以通过下载最新的发布包或从 Git 仓库克隆源代码。 4. **配置 Hive**:设置 Hive 如何连接到 Hadoop 和数据库。 5. **启动 Hive**:成功配置后,可以通过命令行界面启动 Hive...
总的来说,Apache Hive 2.0.0 是一个强大的大数据分析工具,它的源码提供了丰富的学习资源,不仅能够帮助你掌握大数据处理的基本原理,还可以深入了解分布式计算和数据仓库的设计思想。无论是为了职业发展还是个人...
(1)**下载Hive**:从Apache官方网站获取最新稳定版的Hive源码或二进制包。 (2)**解压并配置Hive**: - 解压缩到指定目录,例如 `/usr/local/hive`。 - 编辑 `conf/hive-env.sh`,设置Hive的环境变量,如...
3. 获取Hive的源码或者可执行文件,并进行解压。 4. 根据需要配置Hive,以便它能够访问数据库和Hadoop。 5. 运行Hive,并在看到提示符“Hive>”后,即可开始使用Hive执行数据仓库的相关任务。 Hive的体系结构主要...
7. **处理返回数据**:Ttrift会将Hive查询结果转换为PHP可读的数据结构,如数组或对象,你可以进一步处理这些数据,例如进行数据解析、展示或分析。 在实际应用中,Ttrift不仅提供了基本的查询功能,还支持更复杂的...
Apache Hive 是一个基于 Hadoop 的数据仓库工具,用于查询、管理和分析大数据集。Hive 提供了一种结构化的数据模型,使得非编程背景的用户也能通过 SQL-like 的语言(称为 HiveQL)对海量数据进行操作。`apache-hive...
解压 `apache-hive-3.1.2-src` 后,你可以看到 Hive 的源代码结构,包括解析器、编译器、优化器和执行器等模块。通过阅读和修改源代码,开发者可以定制 Hive 行为,比如实现新的 UDF(用户定义函数)、UDAF(用户...
3. **编译器**:接收到HiveQL后,编译器会将其转化为一系列的MapReduce任务,这个过程包括词法分析、语法分析和逻辑优化。 4. **执行器**:生成的MapReduce任务由Hadoop集群执行,处理实际的数据。 5. **HDFS**:...
开发者可以深入研究Hive源码,学习如何与Hadoop生态中的其他组件如HDFS、YARN和Zookeeper进行交互,以及如何实现自定义函数(UDF)、自定义聚合函数(UDAF)和自定义分区函数(UDTF)。 总之,HiveQL的源码分析是...
2. **元数据存储**: Hive 使用关系型数据库(如 MySQL 或 Derby)来存储表结构、列定义、分区信息等元数据信息。 3. **解析器、编译器、优化器和执行器**: - **解析器**: 负责将 HiveQL 查询语句解析成抽象语法树 ...
5. **Hive 源码分析**: - **解析器(Parser)**:将 SQL 语句转化为抽象语法树(AST)。 - **编译器(Compiler)**:生成执行计划,包括逻辑计划和物理计划。 - **优化器(Optimizer)**:根据成本模型选择最佳...
Hadoop不仅仅是HDFS和MapReduce,还包括其他组件,如HBase(分布式数据库)、Hive(数据仓库工具)、Pig(数据分析工具)等。了解整个生态系统可以帮助更好地理解和利用Hadoop。 8. **版本差异**: Hadoop 2.4.1...
源码分析可能涉及Spark SQL的解析器、编译器和执行器的实现,以及如何与Hive、Parquet等数据源进行交互。 Spark Streaming是Spark对实时流处理的支持,它通过微批处理来处理连续的数据流。2.2版本可能优化了流处理...
本资源提供的是一款血缘关系解析工具的源码,它专注于对HQL(Hive Query Language)集合进行静态分析,以获取HQL查询对应的血缘图。HQL是Apache Hive的查询语言,用于处理大数据集,常用于ETL(提取、转换、加载)...
Hive提供了一个SQL-like接口,使得用户可以对存储在Hadoop文件系统(HDFS)上的大量结构化数据进行复杂的查询和分析,从而实现数据可视化。由于提到“孵化”,这可能意味着Hive项目在发布时可能仍处于活跃开发阶段,...
7. **源码分析**:通过对Spark SQL源码的剖析,理解其内部工作原理,如数据处理流程、查询优化、执行计划生成等。 8. **案例实践**:通过实际项目案例,演示如何在生产环境中应用Spark SQL解决大数据问题。 通过...
此外,Spark SQL还支持Hive的兼容性,使得Hive用户能够无缝地迁移到Spark。 3. **Spark Streaming**:Spark Streaming处理来自各种数据源的实时流数据。它使用Discretized Streams (DStreams)来表示连续的数据流,...