Hive是由Facebook贡献给Apache的开源项目,这个工具可以说是完全为DBA而生,它的的目标,是希望能让精通SQL但不熟悉JAVA编程的工程师,在HADOOP的大潮中不至于下岗待业,即使完全不懂JAVA,也能在HDFS数据分析中继续发挥光和热。Hive是做什么呢,个人理解可以将其视为一个SQL语言的解释器,它能将DBA提交的SQL语句,转换成能够在HADOOP上执行的M-R作业,对于DBA或前端用户来说,不必再将精力花在编写M-R应用上,直接借助SQL的易用性来实现大规模数据的查询和分析。

与Hadoop类似,Hive也有三种运行模式:

  • 内嵌模式:将元数据保存在本地内嵌的Derby数据库中,这得使用Hive最简单的方式,不过使用内嵌模式的话,缺点也比较明显,因为一个内嵌的Derby数据库每次只能访问一个数据文件,这也就意味着不支持多会话连接。这种情况应对本地测试可能都有所不足,仅供初学者熟悉应用Hive;
  • 本地模式:这种模式是将元数据库保存在本地的独立数据库中(比如说MySQL),这样就能够支持多会话和多用户连接。
  • 远程模式:如果我们的Hive客户端比较多,在每个客户端都安装MySQL服务还是会造成一定的冗余和浪费,这种情况下,就可以更进一步,将MySQL也独立出来,将元数据保存在远端独立的MySQL服务中。

本例中,我们使用远程模式。

Hive的安装是极简单的,下载安装包,解压缩并修改目录属主为grid,执行命令如下:

基本上来说,纯粹的安装这就算完成了。最重要的工作是配置,尤其当我们希望使用远程模式时,配置的步骤就相当多了。

首先安装MySQL数据库,具体步骤略(如果mysql不是安装在hive本地,那么则需要在本地安装mysql client,以及Connectior/J的连接驱动),详细可参考:http://www.5ienet.com/note/html/stmysql55/index.shtml 。

登录到mysql命令行界面,创建hive专用帐户并授权:

    mysql> grant all on *.* to hive identified by "hive";

    Query OK, 0 rows affected (0.00 sec)

    mysql> create database hivedb charset latin1;

    Query OK, 1 row affected (0.00 sec)

    mysql> create database hivestat charset latin1;

    Query OK, 1 row affected (0.00 sec)

下载mysql-connector-java-5.1.25-bin.jar,解压缩到/usr/loca/hive-0.8.1/lib目录下。

而后切换至grid用户,配置hive运行环境:

    # su - grid

    $ vi /usr/local/hive-0.8.1/bin/hive-config.sh

增加三项HOME路径的设定:

    export JAVA_HOME=/usr/local/jdk1.7.0_09

    export HADOOP_HOME=/usr/local/hadoop-0.20.2

    export HIVE_HOME=/usr/local/hive-0.8.1

通过模板创建一个hive配置文件:

    $ cp /usr/local/hive-0.8.1/conf/hive-default.xml.template /usr/local/hive-0.8.1/conf/hive-site.xml

这个xml文件可以根据实际需要进行配置,在本例中,重点关注下列选项:

  • hive.metastore.warehouse.dir:指定数据目录,默认值是/user/hive/warehouse;
  • hive.exec.scratchdir:指定临时文件目录,默认值是/tmp/hive-${user.name};
  • hive.metastore.local:指定是否使用本地元数据,此处改为false,使用远端的MySQL数据库存储元数据;
  • javax.jdo.option.ConnectionURL:指定数据库的连接串,此处修改为:jdbc:mysql://192.168.10.203:3306/hivedb?characterEncoding=utf8;
  • javax.jdo.option.ConnectionDriverName:指定数据库连接驱动,此处修改为com.mysql.jdbc.Driver;
  • javax.jdo.option.ConnectionUserName:指定连接MySQL的用户名,根据实际情况设定;
  • javax.jdo.option.ConnectionPassword:指定连接MySQL的密码,根据实际情况设定;
  • hive.stats.dbclass:指定数据库类型,此处修改为jdbc:mysql;
  • hive.stats.jdbcdriver:指定数据库连接驱动,此处指定为com.mysql.jdbc.Driver;
  • hive.stats.dbconnectionstring:指定hive临时统计信息的数据库连接方式,此处指定为jdbc:mysql://192.168.10.203:3306/hivestat?useUnicode=true&characterEncoding=utf8$amp;user=hive&password=hive$amp;createDatabaseIfNotExist=true;
  • hive.metastore.uris:指定hive元数据访问路径,此处指定为thrift://127.0.0.1:9083;

而后通过模板创建hive的日志输出配置文件:

    $ cp /usr/local/hive-0.8.1/conf/hive-log4j.properties.template /usr/local/hive-0.8.1/conf/hive-log4j.properties

将Hive软件路径加入到用户的环境变量:

    $ vi ~/.bash_profile

    export HIVE_HOME=/usr/local/hive-0.8.1

    export PATH=${HIVE_HOME}/bin:$PATH

启动两项后台服务:

    $ hive --service metastore & 

    $ hive --service hiveserver &

这样就配置好了。Hive提供了多种接口访问,接下来我们可以执行hive命令,进入到其命令行界面。

    [grid@hdnode3 ~]$ hive

    Logging initialized using configuration in file:/usr/local/hive-0.8.1/conf/hive-log4j.properties

    Hive history file=/tmp/grid/hive_job_log_grid_201305021152_1796409405.txt

    hive> show tables;

    OK

    Time taken: 1.338 seconds

若要通过HWI方式访问,则先启动hwi服务:

    $ hive --service hwi &

而后就可以通过浏览器访问,默认访问端口9999:http://[hive_host]:9999/hwi/