Hive运行架构及配置部署

标签: hive 架构 | 发表时间:2014-08-13 01:28 | 作者:harryxujiao
出处:http://blog.csdn.net

Hive 运行架构

由Facebook开源,最初用于解决海量结构化的日志数据统计问题:ETL工具;

   构建于Hadoop的HDFS和MapReduce智商,用于管理和查询结构化/非结构化数据的数据仓库;

   设计目的是让SQL技能良好,但Java技能较弱的分析师可以查询海量数据:

           使用HQL作为查询接口;

           使用HDFS作为存储底层;

           使用MapReduce作为执行层;

   2008年facebook把Hive项目贡献给Apache;

1、Hive的缺点

       Hive的HQL表达能力有限:有些复杂运算用HQL不易表达;

       Hive效率低:Hive自动生成MR作业,通常不够智能;HQL调优困难,粒度较粗;可控性差;

2、Hive系统架构

      1) 元数据存储(Metastore):Hive的数据由两部分组成:数据文件和元数据;

               元数据存储,Derby只能用于一个Hive连接,一般存储在MySQL。

       2)驱动(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的执行。

       3)接口:CLI(Common LineInterface)、HWI(Hive WebInterface)、ThriftServer;

               CLI:为命令行工具,默认服务。bin/hive或bin/hive--service cli;

               HWI:为Web接口,可以用过浏览器访问Hive,默认端口9999,启动方式为bin/hive --service hwi;

               ThriftServer:通过Thrift对外提供服务,默认端口是10000,启动方式为bin/hive --service hiveserver;

 

       4)其他服务(bin/hive --service -help):metastore(bin/hive --service metastore)、hiveserver2(bin/hive --service hiveserver2),HiveServer2是HieServer改进版本,它提供给新的ThriftAPI来处理JDBC或者ODBC客户端,进行Kerberos身份验证,多个客户端并发,HS2还提供了新的CLI:BeeLine,是Hive 0.11引入的新的交互式CLI,基于SQLLine,可以作为Hive JDBC Client 端访问HievServer2,启动一个beeline就是维护了一个session.

       5)Hadoop:用HDFS进行存储,用MapReduce进行计算;

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

3、Hive的运行过程

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

4、Hive的数据模型

       Database

       Table

       Partition

       Bucket

       File(文件格式:TextFile,RCFile,),

       数据类型,Numeric(Tinyint,Smallint,Bigint,Float,Double,Decimal(Hive 0.13.0可以自定义精度进行扩展)),Date/Time(TIMESTAMP,DATE(0.12.0支持)),String(STRING,VARCHAR(0.12),CHAR(0.13)),Misc(BOLLEAN,BINARY),Complex(ARRAY、MAP、STRUCT、UNIONTYPE)

 

 



 Hive 0.13的配置与部署

使用版本:Hive 0.13.1

1、Metastore(MySQL作为元数据存储,安装于Master1节点,前提是MySQL的访问权限需要设置好。)

1)解压

       tar zxf apache-hive-0.13.1-bin.tar.gz

       mv apache-hive-0.13.1-bin /usr/hive013

       vim /etc/profile加入

         export HIVE_HOME=/usr/hive013

         PATH=$HIVE_HOME/bin:$PATH

         source /etc/profile

2)配置hive-env.sh文件(启动时用到的环境文件)

       HADOOP_HOME=/usr/hadoop-2.2.0   

3)复制hive-default.xml -> hive-site.xml文件(配置文件)

<property>

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

 <!--<value>jdbc:derby:;databaseName=metastore_db;create=true</value>-->

 <value>jdbc:mysql://master1:3306/metastore?=createDatabaseIfNotExist=true</value>

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

</property> 

 

<property>

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

 <!--<value>org.apache.derby.jdbc.EmbeddedDriver</value>-->

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

  <description>Driver class name 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>

4)拷贝jdbc文件到hive的lib中

     下载jdbc的jar文件http://pan.baidu.com/s/1zYi5o

      cp mysql-connector-java-5.1.26-bin.jar$HIVE_HOME/lib/

2、HiveClient,在Slave1上安装Hive客户端,同样设置好HIVE_HOME的环境变量

1)将Hive013从Master1拷贝到Slave1

     scp -r /usr/hive013  root@slave1:/usr/

2)配置Metastore的连接信息

 <property>

  <name>hive.metastore.uris</name>

  <value>thrift://master1:9083</value>

  <description>Thrift URI for the remote metastore.Used by metastore client to connect to remote metastore.</description>

</property>

3)启动metastore服务

     前台服务:hive--service metastore  CTRL+C关闭

     后台服务:nohup hive--service metastore > metastore.log 2>&1 &    jobs查看后台任务    kill %id关闭后台任务

4)测试链接Metastore

      由于设置好HIVE_HOME环境变量,直接在Shell中输入hive即可打开HiveCLI

5)拷贝至OPC节点,可以达到多个客户端访问metastore

作者:harryxujiao 发表于2014-8-12 17:28:27 原文链接
阅读:58 评论:0 查看评论

相关 [hive 架构] 推荐:

Hive运行架构及配置部署

- - CSDN博客数据库推荐文章
由Facebook开源,最初用于解决海量结构化的日志数据统计问题:ETL工具;.    构建于Hadoop的HDFS和MapReduce智商,用于管理和查询结构化/非结构化数据的数据仓库;.    设计目的是让SQL技能良好,但Java技能较弱的分析师可以查询海量数据:.            使用HQL作为查询接口;.

hive调优

- - 互联网 - ITeye博客
一、    控制hive任务中的map数: . 1.    通常情况下,作业会通过input的目录产生一个或者多个map任务. 主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改);.

hive 优化 tips

- - CSDN博客推荐文章
一、     Hive join优化. 也可以显示声明进行map join:特别适用于小表join大表的时候,SELECT /*+ MAPJOIN(b) */ a.key, a.value FROM a join b on a.key = b.key. 2.     注意带表分区的join, 如:.

Hive中的join

- - CSDN博客云计算推荐文章
select a.* from a join b on a.id = b.id select a.* from a join b on (a.id = b.id and a.department = b.department). 在使用join写查询的时候有一个原则:应该将条目少的表或者子查询放在join操作符的左边.

hive优化(2)

- - 开源软件 - ITeye博客
Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapReduce的工具. 使用Hive尽量按照分布式计算的一些特点来设计sql,和传统关系型数据库有区别,. 所以需要去掉原有关系型数据库下开发的一些固有思维. 1:尽量尽早地过滤数据,减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段.

hive优化

- - 开源软件 - ITeye博客
hive.optimize.cp=true:列裁剪. hive.optimize.prunner:分区裁剪. hive.limit.optimize.enable=true:优化LIMIT n语句. hive.limit.optimize.limit.file=10:最大文件数.   1.job的输入数据大小必须小于参数:hive.exec.mode.local.auto.inputbytes.max(默认128MB).

Hive优化

- - 互联网 - ITeye博客
     使用Hive有一段时间了,目前发现需要进行优化的较多出现在出现join、distinct的情况下,而且一般都是reduce过程较慢.      Reduce过程比较慢的现象又可以分为两类:. 情形一:map已经达到100%,而reduce阶段一直是99%,属于数据倾斜. 情形二:使用了count(distinct)或者group by的操作,现象是reduce有进度但是进度缓慢,31%-32%-34%...一个附带的提示是使用reduce个数很可能是1.

hive bucket 桶

- - CSDN博客推荐文章
对于每一个表(table)或者分区,Hive可以进一步组织成桶. Hive也是针对某一列进行桶的组织. Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中. 采用桶能够带来一些好处,比如JOIN操作. 对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作. 那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量.

hive mapjoin使用

- - 淘剑笑的博客
今天遇到一个hive的问题,如下hive sql:. 该语句中B表有30亿行记录,A表只有100行记录,而且B表中数据倾斜特别严重,有一个key上有15亿行记录,在运行过程中特别的慢,而且在reduece的过程中遇有内存不够而报错. 为了解决用户的这个问题,考虑使用mapjoin,mapjoin的原理:.

hive优化

- - 互联网 - ITeye博客
1:尽量尽早地过滤数据,减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段. 2:尽量原子化操作,尽量避免一个SQL包含复杂逻辑. 可以使用中间表来完成复杂的逻辑. 3:单个SQL所起的JOB个数尽量控制在5个以下. 4:慎重使用mapjoin,一般行数小于2000行,大小小于1M(扩容后可以适当放大)的表才能使用,小表要注意放在join的左边(目前TCL里面很多都小表放在join的右边).