背景:
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
设置环境变量
[[email protected] apache-hive-0.13.1-bin]$ cd conf/ [[email protected] conf]$ cp hive-env.sh.template hive-env.sh [[email protected] 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
[[email protected] 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数据存放在
[[email protected] hadoop-2.5.0]$ hadoop fs -ls /user/hive/warehouse
独立模式安装
1. hive安装在hadoop.client
2. 解压缩安装在/home/hadoop
配置
[[email protected] ~]$ tar xf apache-hive-0.13.1-bin.tar.gz [[email protected] ~]$ mv apache-hive-0.13.1-bin hive-0.13.1 [[email protected] ~]$ cd hive-0.13.1/
编辑hive-env.sh
[[email protected] hive-0.13.1]$ cp conf/hive-env.sh.template conf/hive-env.sh [[email protected] hive-0.13.1]$ vi conf/hive-env.sh HADOOP_HOME=/home/hadoop/hadoop-2.5.0
编辑hive-site.xml
[[email protected] hive-0.13.1]$ cp conf/hive-default.xml.template conf/hive-site.xml [[email protected] hive-0.13.1]$ vim conf/hive-site.xml <property> <name>hive.metastore.local</name> <value>true</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hadoop</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hadoop</value> </property>
lib文件夹缺少mysql的连接器mysql-connector-java-5.1.25-bin.jar,下载地址http://download.csdn.net/detail/xqj198404/6338973
安装MySQL:
[[email protected] ~]# yum install mysql-server mysql -y [[email protected] ~]# service mysqld start [[email protected] ~]# 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并测试
[[email protected] ~]$ 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目录存放日志和执行计划