如下图所示,从逻辑上来看,蜂巢包含了3大部分。
-
<李>蜂巢客户李>
<李>蜂巢服务李>
<李>蜂巢存储和计算
流程大致步骤为:
-
<李>用户提交查询等任务给司机。李>
<李>司机为查询操作创建一个会话处理程序,接着司机会发送查询操作到编译器去生成一个执行计划李>
<李>编译器根据用户任务去MetaStore中获取需要的蜂巢的元数据信息。这些元数据在后续阶段中用作抽象语法树的类型检测和修剪。李>
<李>编译器得到元数据信息,对任务进行编译,先将HiveQL转换为抽象语法树,然后将抽象语法树转换成查询块,将查询块转化为逻辑的查询计划,重写逻辑查询计划,将逻辑计划转化为物理的计划(MapReduce),最后选择最佳策略。李>
<李>将最终的计划提交给司机。李>
<李>司机将计划转交给ExecutionEngine去执行,将获取到的元数据信息,提交到JobTracker或者RsourceManager执行该任务,任务会直接读取到HDFS中进行相应的操作。李>
<李>获取执行的结果。李>
<李>取得并返回执行结果。李>
创建表
解析用户提交的蜂巢语句→对其进行解析→分解为表,字段,分区等蜂群对象
根据解析到的信息构建对应的表,字段,分区等对象,从SEQUENCE_TABLE中获取构建对象的最新的ID,与构建对象信息(名称,类型等等)一同通过刀方法写入元数据库的表中,成功后将SEQUENCE_TABLE中对应的最新ID + 5。