Hive学习笔记2@Hive架构

来源:互联网 发布:网络协议栈有什么用 编辑:程序博客网 时间:2024/06/03 14:21

Hive架构分为四部分


接口

Hive 对外提供了三种服务模式,即 Hive 命令行模式(CLI),Hive 的 Web模式(WUI),Hive的远程服务(Client)。、

命令行模式

Hive 命令行模式启动有两种方式。执行这条命令的前提是要配置 Hive 的环境变量。 

1、cd $HIVE_HOME/bin,执行如下命令:

         ./hive

2、直接执行命令。

 hive - -service cli

Hive Web模式

Hive Web的启动命令如下:

         hive–service hwi

通过浏览器访问Hive,默认端口为9999,配置如下:

<property> 

         <name>hive.hwi.war.file</name> 

         <value>lib/hive-hwi-0.12.0-SNAPSHOT.war</value> 

         <description>Thissets the path to the HWI war file, relative to ${HIVE_HOME}.</description> 

</property> 

<property> 

         <name>hive.hwi.listen.host</name> 

         <value>0.0.0.0</value> 

         <description>Thisis the host address the Hive Web Interface will listen on</description> 

</property> 

<property> 

         <name>hive.hwi.listen.port</name> 

         <value>9999</value> 

         <description>Thisis the port the Hive Web Interface will listen on</description> 

</property>

Hive远程服务

远程服务(默认端口号 10000)启动方式命令如下:

nohup hive - -servicehiveserver2 &

配置文件默认配置如下:

<property>

       <name>hive.server2.thrift.port</name>

       <value>10000</value>

    <description>Port number ofHiveServer2 Thrift interface when hive.server2.transport.mode is'binary'.</description>

</property>

元数据存储

         Hive将元数据存储在RDBMS中,一般常用Derby和Mysql。默认情况下,Hive元数据保存在Derby数据库中,但只能允许一个会话连接,只用于简单的测试。实际生产中则需要一个独立的元数据库,使用Mysql作为元数据库。

         Metastore存储表的名字、表的列、分区、属性(是否为外部表)、表的数据所在目录等。

hive-site.xml配置如下:

<property>

   <name>javax.jdo.option.ConnectionDriverName</name>

   <value>com.mysql.jdbc.Driver</value>

   <description>Driver class name for a JDBCmetastore</description>

</property>

 

<property>

   <name>javax.jdo.option.ConnectionURL</name>

   <value>jdbc:mysql://localhost:3306/hive?characterEncoding=UTF-8</value>

   <description>JDBC connect string for a JDBCmetastore</description>

</property>

 

<property>

   <name>javax.jdo.option.ConnectionUserName</name>

   <value>hive</value>

   <description>Username to use against metastoredatabase</description>

</property>

 

<property>

   <name>javax.jdo.option.ConnectionPassword</name>

   <value>hive</value>

   <description>password to use against metastoredatabase</description>

</property>

 

<property>

   <name>hive.querylog.location</name>

   <value>/home/hadoop/app/hive/iotmp</value>

   <description>Location of Hive run time structured logfile</description>

</property>

 

<property>

   <name>hive.exec.local.scratchdir</name>

   <value>/home/hadoop/app/hive/iotmp</value>

   <description>Local scratch space for Hive jobs</description>

</property>

 

<property>

   <name>hive.downloaded.resources.dir</name>

   <value>/home/hadoop/app/hive/iotmp</value>

   <description>Temporary local directory for added resources in theremote file system.</description>

</property>

驱动Driver

用户通过接口提交Hive给Driver,由Driver进行HQL语句解析,此时从Metastore中获取表的信息,先生成逻辑计划,再生成物理计划,再由Executor生成Job交给Hadoop运行,然后由Driver将结果返回给用户。

编译器(Hive的核心):1,语义解析器(ParseDriver),将查询字符串转换成解析树表达式;2,语法解析器(SemanticAnalyzer),将解析树转换成基于语句块的内部查询表达式;3,逻辑计划生成器(Logical Plan Generator),将内部查询表达式转换为逻辑计划,这些计划由逻辑操作树组成,操作符是Hive的最小处理单元,每个操作符处理代表一道HDFS操作或者是MR作业;4,查询计划生成器(QueryPlan Generator),将逻辑计划转化成物理计划(MR Job)。

优化器:优化器是一个演化组件,当前它的规则是:列修剪,谓词下压。

执行器:编译器将操作树切分成一个Job链(DAG),执行器会顺序执行其中所有的Job;如果Task链不存在依赖关系,可以采用并发执行的方式进行Job的执行。

数据存储

用HDFS进行存储,用MapReduce进行计算。

表中的一个Partition对应表下的一个子目录,每一个Bucket对应一个文件;Hive的默认数据仓库目录是/user/hive/warehouse,在hive-site.xml中由hive.metastore.warehouse.dir项定义;

运行过程

由客户端提供查询语句,提交给Hive,Hive再交给Driver处理(1,Compiler先编译,编译时要从Metastore中获取元数据信息,生成逻辑计划;2,生成物理计划;3,由Driver进行优化;4,Executor执行时对物理计划再进行分解成Job,并将这些Job提交给MR的JobTracker运行,提交Job的同时,还需要提取元数据信息关联具体的数据,这些元数据信息送到NN),JT拆分成各个Task进行计算,并将结果返回或写入HDFS。

0 0