如下图所示,从逻辑上来看,Hive包含了3大部分。
用户操作Hive的接口主要有三个:CLI,Client 和 WUI。
其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。
Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。而客户端则又可以分为三种Thrift Client,JDBC Client,ODBC Client。
Web Interface是通过浏览器访问Hive。
实现了session handler,在JDBC/ODBC接口上实现了执行和获取信息的API。
该组件用于对不同的查询表达式做解析查询,语义分析,最终会根据从metastore中查询到的表和分区元数据生成一个execution plain。
该组件会执行由compiler创建的execution。其中plan从数据结构上来看,是一个DAG,该组件会管理plan的不同stage与组件中执行这些plan之间的依赖。
Hive的metastore组件是hive元数据集中存放地。该组件存储了包括变量表中列和列类型等结构化的信息以及数据仓库中的分区信息(包括列和列类型信息,读写数据时必要的序列化和反序列化信息,数据被存储在HDFS文件中的位置)。
Metastore组件包括两个部分:metastore services和Meta storage database。
使用远程的metastore services,可以让metastore services和hive services运行在不同的进程里,这样也保证了hive的稳定性,提升了hive services的效率。
流程大致步骤为:
解析用户提交的Hive语句->对其进行解析->分解为表、字段、分区等Hive对象
根据解析到的信息构建对应的表、字段、分区等对象,从SEQUENCE_TABLE中获取构建对象的最新的ID,与构建对象信息(名称、类型等等)一同通过DAO方法写入元数据库的表中,成功后将SEQUENCE_TABLE中对应的最新ID+5。
实际上常见的RDBMS都是通过这种方法进行组织的,其系统表中和Hive元数据一样显示了这些ID信息。通过这些元数据可以很容易的读取到数据。
优化器是一个不断更新的组件,大部分plan的转移都是通过优化器完成的。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。