[关闭]
@BrandonLin 2016-07-30T02:38:33.000000Z 字数 2634 阅读 3934

Hive环境搭建与实例

Hive Hadoop


Hive是由Facebook最初开发的基于Hadoop的数据仓库工具,提供了类SQL的查询语言Hive SQL(HQL)。

在内部,Hive将用户的SQL语句转化为一系列的MapReduce作业,并提交到集群中运行。

在Hive中,数据通过表来组织,提供了一种将表结构附加(attaching)到HDFS中的数据的一种方式。诸如表的Schema等元数据存放在一个称为metastore的数据库中。默认情况下,metastor存放在本地,但是可以配置在远程共享,这通常在生成环境中使用。

Hive总体架构如下:

image_1aorqv69b184sbetjp6sni19e11g.png-494.8kB

下载安装

下载稳定版本,留意与Hadoop版本的兼容:

  1. wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.0.0/apache-hive-2.0.0-bin.tar.gz
  2. tar -zxvf apache-hive-2.0.0-bin.tar.gz
  3. mv apache-hive-2.0.0-bin /home/hive-2.0.0
  4. vim /etc/profile
  5. export HIVE_HOME=/home/hive-2.0.0
  6. export PATH=$PATH:$HIVE_HOME/bin
  7. source /etc/profile

配置metastore

metastore的3种模式:

image_1aorp4qq86fn1pnl126o72q1s2h9.png-143.1kB

image_1aorp5rkd1g9ffkuk8a17s5hevm.png-259.1kB

image_1aorp6k6t4slgsa1hlfiu61qds13.png-361.4kB

Local模式配置

创建数据库用作metastore:

  1. create database hive;

hive-site.xml

  1. <configuration>
  2. <property>
  3. <name>hive.metastore.local</name>
  4. <value>true</value>
  5. </property>
  6. <property>
  7. <name>javax.jdo.option.ConnectionURL</name>
  8. <value>jdbc:mysql://192.168.1.132:3306/hive?characterEncoding=UTF-8</value>
  9. </property>
  10. <property>
  11. <name>javax.jdo.option.ConnectionDriverName</name>
  12. <value>com.mysql.jdbc.Driver</value>
  13. </property>
  14. <property>
  15. <name>javax.jdo.option.ConnectionUserName</name>
  16. <value>root</value>
  17. </property>
  18. <property>
  19. <name>javax.jdo.option.ConnectionPassword</name>
  20. <value>yourpasssword</value>
  21. </property>
  22. </configuration>

把MySQL JDBC驱动上传到hive的lib目录下。

初始化:

  1. schematool -initSchema -dbType mysql

image_1aors6tf3u0r1eo1curatltq020.png-54.5kB

启动Hive:

  1. % hive

image_1aors80h79pooqo1ikphc055t2d.png-49kB

image_1aors9oj4vdb1q1q3fc1gqb1djr2q.png-14.5kB

Hive更多配置

Hive的配置文件采用类似于Hadoop的XML格式,为$HIVE_HOME/conf/hive-site.xml。配置文件目录可以通过运行时参数--config或者HIVE_CONF_DIR环境变量来修改。

会话(session)级别的参数可以在运行hive命令时使用-hiveconf指定。在Hive交互式窗口使用SET也可以设置参数。因此Hive参数有如下4级:

执行引擎

Hive默认使用MapReduce作为执行引擎,对Apache Tez和Spark的支持也正在进行中。后两者都是通用的DAG引擎,在性能上比MapReduce有较大的改善。执行引擎通过hive.execution.engine属性来配置,默认为mr,代表MapReduce。可以在每次会话时设置引擎,例如:

  1. hive> SET hive.execution.engine=tez;

(注意Tez首先要安装在Hadoop集群上)。

在Hive2中,已经不推荐使用MapReduce作为执行引擎,因此经常会收到一些警告信息。推荐Spark或者Tez作为执行引擎。

日志设置

默认情况下,hive的错误日志保存在```{user.name}/hive.log目录下,java.io.tmpdir通常是/tmp。也可以在启动hive的时候设置:

  1. hive -hiveconf hive.log.dir='/tmp/${user.name}'

日志配置在HIVE_HOME/comg/hive-log4j.properties.修改该文件可以配置日志相关参数,也可以在启动的时候设置气质参数:

  1. hive -hiveconf hive.root.logger=DEBUG,console

简单实例

创建表

  1. create table records(year string , temperature int ,quality int) row format delimited fields terminated by '\t'

成功之后,我们可以在mysql的元数据中看到这个表的信息,在hive.TBLS表中:

image_1aorsikihfj11oe1n4dtttnf337.png-52.7kB

导入数据

将HDFS的文件导入Hive:

  1. load data inpath "/input/ncdc/micro-tab/sample.txt"
  2. overwrite into table records;

image_1aorsuf2q183ddh4hsrdbv1ii441.png-11.7kB

在/user/hive/warehouse目录下可以看到下面的文件:

image_1aorssii21s7r13k12h8t35191h3k.png-17.7kB

查询数据

Hive跟语法跟MySQL非常像,如下查询表中所有数据:

  1. select * from records;

image_1aort2sd41cipag61ot41ujk1mn64e.png-17.7kB

来一个分组查询:

  1. select year , max(temperature)
  2. from records
  3. where temperature != 9999 and quality in ( 0,1,4,5,9)
  4. group by year;

image_1aorta6771r3o1mgk1d0j54nl3c4r.png-70.4kB

可以看到Hive启动了一个MapReduce作业,计算得到最终结果。YARN管理界面可以看到该作业:

image_1aortcu3gc6tskf19qhaii1ia358.png-64.3kB

Hive Server

启动HiveServer2

  1. hiveserver2

image_1aorts7vhqpr14u0o3e1av91t8i5l.png-37kB

此时在默认的10020端口可以访问的hive界面:

image_1aorttlkgb9v1c7lmh6k821egn62.png-114.8kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注