背景:

NoSQL运动, Not Only SQL

New SQL, SQL的逆袭

放弃SQL是最大的错误

Hive还不算是完整的数据库系统

Hive很缓慢

应用于即席查询场景

 

Hive:

数据仓库工具, 可以把Hadoop下的原始结构化数据变为Hive中的表

支持一种与SQL几乎完全相同的语言HiveQL.  除了不支持更新, 索引和事务, 几乎SQL的其他特征都能支持

可以看成是从SQL到Map-Reduce的映射器

提供shell, JDBC/ODBC, Thrift, Web等接口

 

Hive简介

起源自facebook由Jeff Hammerbacher领导的团队

构建在Hadoop上的数据仓库框架

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

2008年facebook把hive项目贡献给Apache

 

Hive的组件与体系架构

用户接口 : shell, thrift, web等

Thrift服务器

元数据库 "Derby, Mysql等

解析器

Hadoop

 

 Hive安装

内嵌模式: 元数据保持在内嵌的Derby模式, 只允许一个会话连接

本地独立模式: 在本地安装MySQL, 把元数据放到MySQL内

远程模式: 元数据放置在远程的MySQL数据库

 

 

内嵌模式安装

下载并解压Hive

wget http://apache.dataguru.cn/hive/stable/apache-hive-0.13.1-bin.tar.gz
tar xf apache-hive-3.13.1-bin.tar.gz
cd apache-hive-0.13.1-bin


 设置环境变量

[hadoop@hadoop1 apache-hive-0.13.1-bin]$ cd conf/
[hadoop@hadoop1 conf]$ cp hive-env.sh.template hive-env.sh
[hadoop@hadoop1 conf]$ cp hive-default.xml.template hive-site.xml

vi hive-env.sh
HADOOP_HOME=/home/hadoop/hadoop-2.5.0
export HIVE_CONF_DIR=/home/hadoop/apache-hive-0.13.1-bin/conf

hive-site的主要配置

hive.metastore.warehouse.dir     HDFS上的数据目录
hive.exec.scratchdit             HDFS上的临时目录
hive.metastore.warehouse.dir     默认值是/usr/hive/warehouse
hive.exec.scratchdig             默认值是/tmp/hive-${user.name}

 

运行Hive

[hadoop@hadoop1 conf]$ hive
hive>

 

 简单建删表测试

hive1> show tables;
OK
Time taken: 0.042 seconds
hive1> create table abc(c1 string);
OK
Time taken: 0.84 seconds
hive1> show tables;
OK
abc
Time taken: 0.073 seconds, Fetched: 1 row(s)
hive1> select * from abc;
OK
Time taken: 0.459 seconds
hive1> drop table abc;
OK
Time taken: 2.805 seconds

 

 Hive数据存放在

[hadoop@hadoop1 hadoop-2.5.0]$ hadoop fs -ls /user/hive/warehouse

 

 

 独立模式安装

1. hive安装在hadoop.client

2. 解压缩安装在/home/hadoop

 

配置

[hadoop@hadoop1 ~]$ tar xf apache-hive-0.13.1-bin.tar.gz 
[hadoop@hadoop1 ~]$ mv apache-hive-0.13.1-bin hive-0.13.1
[hadoop@hadoop1 ~]$ cd hive-0.13.1/

编辑hive-env.sh

[hadoop@hadoop1 hive-0.13.1]$ cp conf/hive-env.sh.template conf/hive-env.sh
[hadoop@hadoop1 hive-0.13.1]$ vi  conf/hive-env.sh
HADOOP_HOME=/home/hadoop/hadoop-2.5.0

编辑hive-site.xml

[hadoop@hadoop1 hive-0.13.1]$ cp conf/hive-default.xml.template conf/hive-site.xml
[hadoop@hadoop1 hive-0.13.1]$ vim conf/hive-site.xml

 hive.metastore.local
 true



 javax.jdo.option.ConnectionURL
 jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true



 javax.jdo.option.ConnectionDriverName
 com.mysql.jdbc.Driver




 javax.jdo.option.ConnectionUserName
 hadoop



 javax.jdo.option.ConnectionPassword
 hadoop

lib文件夹缺少mysql的连接器mysql-connector-java-5.1.25-bin.jar,下载地址http://download.csdn.net/detail/xqj198404/6338973

安装MySQL:

[root@hadoop1 ~]# yum install mysql-server mysql -y
[root@hadoop1 ~]# service mysqld start
[root@hadoop1 ~]# mysql

mysql> create database hive;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on hive.* to 'hadoop'@'localhost' identified by 'hadoop';
Query OK, 0 rows affected (0.00 sec)

 

 

修改/homehadoop/.bash_profile

JAVA_HOME=/usr/java/jdk1.7.0_67
HADOOP_HOME=/home/hadoop/hadoop-2.5.0
HIVE_HOME=/home/hadoop/hive-0.13.1

PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin

export JAVA_HOME
export HIVE_HOME
export HADOOP_HOME
export PATH

 

 

启动Hive并测试

[hadoop@hadoop1 ~]$ hive
hive> show tables;
OK
Time taken: 1.773 seconds
hive> create table abc(aa string);
OK
Time taken: 1.571 seconds
hive> show tables;
OK
abc
Time taken: 0.076 seconds, Fetched: 1 row(s)
hive> drop table abc;
OK
Time taken: 1.801 seconds

 

 

 JDBC方式连接Hive

1. 使用jdbc的方式链接Hive, 首先做的事情就是需要启动hive的Thift Server, 否则连接hive的时候会报connection refused的错误.

启动命令    hive --service hiveserver

2. 新建java项目, 然后将hive/lib下的所有jar包和hadoop核心的jar包 添加到项目的类路径上

 

Hive的数据

数据在HDFS的warehouse目录下, 一个表对应一个子目录

桶与reduce

本地的/tmp目录存放日志和执行计划