蜂巢基本架构

  

如下图所示,从逻辑上来看,蜂巢包含了3大部分。

  
      <李>蜂巢客户李   <李>蜂巢服务李   <李>蜂巢存储和计算
    蜂巢基本架构”> </李>
  </ul>
  <p>用户操作蜂巢的接口主要有三个:CLI、客户和WUI。</p>
  <p>其中最常用的是CLI, CLI启动的时候,会同时启动一个蜂巢副本。</p>
  <p>客户端是蜂巢的客户端,用户连接至蜂巢服务器。在启动端模式的时候,需要指出蜂巢服务器所在节点,并且在该节点启动蜂巢服务器。而客户端则又可以分为三种储蓄客户,JDBC客户机,ODBC客户端。</p>
  <p> Web界面是通过浏览器访问蜂巢。</p>
  <ul>
  <李>蜂巢将元数据存储在数据库中,如mysql, derby.Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。</李>
  <李>解释器,编译器,优化器完成HQL查询语句从词法分析,语法分析,编译,优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行。</李>
  <李>蜂巢的数据存储在HDFS中,大部分的查询,计算由MapReduce完成(注意,包含<em>的查询,比如从资源选择</em>不会生成MapRedcue任务)。<br/>上图中的司机会处理从应用到metastore到归档系统的所有请求,以进行后续操作。</李>
  </ul>
  <h2>蜂巢组件</h2>
  <h3>司机</h3>
  <p>实现了会话处理程序,在JDBC/ODBC接口上实现了执行和获取信息的API。</p>
  编译器<h3> </h3>
  <p>该组件用于对不同的查询表达式做解析查询,语义分析,最终会根据从metastore中查询到的表和分区元数据生成一个执行平原。</p>
  有关发动机</h3> <h3>执行
  <p>该组件会执行由编译器创建的执行。其中计划从数据结构上来看,是一个十克,该组件会管理计划的不同阶段与组件中执行这些计划之间的依赖。</p>
  <h3> Metastore </h3>
  <p>蜂巢的metastore组件是蜂巢元数据集中存放地。该组件存储了包括变量表中列和列类型等结构化的信息以及数据仓库中的分区信息(包括列和列类型信息,读写数据时必要的序列化和反序列化信息,数据被存储在HDFS文件中的位置)。</p>
  <p> Metastore组件包括两个部分:Metastore服务和元存储数据库。</p>
  <ul>
  <李> Metastore数据库的介质就是关系数据库,例如蜂巢默认的嵌入式磁盘数据库德比,还有mysql数据库。</李>
  <李> Metastore服务是建立在后台数据存储介质(HDFS)之上,并且可以和蜂巢服务进行交互的服务组件。<br/>默认情况下,Metastore服务和蜂巢是安装在一起的,运行在同一个进程当中。也可以把Metastore服务从蜂巢里剥离出来,将Metastore独立安装在一个集群里,蜂巢远程调用Metastore服务。这样我们可以把元数据这一层放到防火墙之后,客户端访问蜂巢服务,就可以连接到元数据这一层,从而提供了更好的管理性和安全保障。</李>
  </ul>
  <p>使用远程的metastore服务,可以让metastore服务和蜂巢运行在不同的进程里,这样也保证了蜂巢的稳定性,提升了蜂巢服务的效率。</p>
  <h2>蜂巢执行过程</h2>
  <p> <img src=

      

    流程大致步骤为:

      
        <李>用户提交查询等任务给司机。   <李>司机为查询操作创建一个会话处理程序,接着司机会发送查询操作到编译器去生成一个执行计划   <李>编译器根据用户任务去MetaStore中获取需要的蜂巢的元数据信息。这些元数据在后续阶段中用作抽象语法树的类型检测和修剪。   <李>编译器得到元数据信息,对任务进行编译,先将HiveQL转换为抽象语法树,然后将抽象语法树转换成查询块,将查询块转化为逻辑的查询计划,重写逻辑查询计划,将逻辑计划转化为物理的计划(MapReduce),最后选择最佳策略。   <李>将最终的计划提交给司机。   <李>司机将计划转交给ExecutionEngine去执行,将获取到的元数据信息,提交到JobTracker或者RsourceManager执行该任务,任务会直接读取到HDFS中进行相应的操作。   <李>获取执行的结果。   <李>取得并返回执行结果。   
      

    创建表

      

    解析用户提交的蜂巢语句→对其进行解析→分解为表,字段,分区等蜂群对象

      

    根据解析到的信息构建对应的表,字段,分区等对象,从SEQUENCE_TABLE中获取构建对象的最新的ID,与构建对象信息(名称,类型等等)一同通过刀方法写入元数据库的表中,成功后将SEQUENCE_TABLE中对应的最新ID + 5。

    蜂巢基本架构