简介
Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件 映射为一张数据库表,并提供类 SQL 查询功能。
本质是将 SQL 转换为 MapReduce 程序。
主要用途:用来做离线数据分析,比直接用 MapReduce 开发效率更高。Hive 利用 HDFS 存储数据,利用 MapReduce 查询分析数据。
数据库和数据仓库的区别在于:
- 数据库是面向事务的设计,数据仓库是面向主题设计的。
- 数据库一般存储业务数据,数据仓库存储的一般是历史数据。
- 数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的 User 表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
- 数据库是为捕获数据而设计,数据仓库是为分析数据而设计。
Hive优缺点
优点:
- 可扩展性,横向扩展,Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务 横向扩展:通过分担压力的方式扩展集群的规模 纵向扩展:一台服务器cpu i7-6700k 4核心8线程,8核心16线程,内存64G => 128G
- 延展性,Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数
- 良好的容错性,可以保障即使有节点出现问题,SQL 语句仍可完成执行
缺点:
- Hive 不支持记录级别的增删改操作,但是用户可以通过查询生成新表或者将查询结 果导入到文件中(当前选择的 hive-2.3.2 的版本支持记录级别的插入操作)
- Hive 的查询延时很严重,因为 MapReduce Job 的启动过程消耗很长时间,所以不能 用在交互查询系统中。
- Hive 不支持事务(因为不没有增删改,所以主要用来做 OLAP(联机分析处理),而 不是 OLTP(联机事务处理),这就是数据处理的两大级别)。
Hive架构
hive client我们一般用shell,hive metastore 我们一般配置成mysql。
Hive数据模型
Hive 中所有的数据都存储在 HDFS 中,没有专门的数据存储格式
在创建表时指定数据中的分隔符,Hive 就可以映射成功,解析数据。
Hive 中包含以下数据模型:
- db :在 hdfs 中表现为 hive.metastore.warehouse.dir 目录下一个文件夹
- table :在 hdfs 中表现所属 db 目录下一个文件夹
- external table :数据存放位置可以在 HDFS 任意指定路径
- partition :在 hdfs 中表现为 table 目录下的子目录
- bucket :在 hdfs 中表现为同一个表目录下根据 hash 散列之后的多个文件
- view:与传统数据库类似,只读,基于基本表创建
Hive安装部署
1,Hive 安装前需要安装好 JDK 和 Hadoop。配置好环境变量。
2,上传安装文件 apache-hive-x.x.x-bin.tar.gz,并解压。
3,配置HIVE_HOME环境变量
vi /export/servers/hive/conf/hive-env.sh
配置其中的HADOOP_HOME
export HADOOP_HOME=/export/servers/hadoop-2.7.4
4,配置元数据库信息,在conf文件夹内新添加hive-site.xml文件(分别配置mysql的位置,mysql的Driver,mysql的账号和密码)
vi hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.44.31:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
</configuration>
5,把mysql-connector-java-5.1.32.jar上传到 Hive的lib文件夹中
6,启动hive,我们一般把Hive当做服务启动
启动Hive
bin/hiveserver2
启动成功后,可以在别的节点上用beeline去连接
[root@bigdata-02 bin]# ./beeline
Beeline version 1.2.1 by Apache Hive
beeline> ! connect jdbc:hive2://bigdata-01:10000
Connecting to jdbc:hive2://bigdata-01:10000
Enter username for jdbc:hive2://bigdata-01:10000: root
Enter password for jdbc:hive2://bigdata-01:10000: ******
Connected to: Apache Hive (version 1.2.1)
Driver: Hive JDBC (version 1.2.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ