Hive安装与详解
简介
一、Hadoop开发存在的问题
- 只能用java语言开发,如果是c语言或其他语言的程序员用Hadoop,存在语言门槛
- 需要对Hadoop底层原理,api比较了解才能做开发
- 开发调试比较麻烦
二、Hive概述
- Hive是基于Hadoop的一个数据仓库工具。可以将结构化的数据文件映射为一张表,并提供完整的sql查询功能
- 底层是将sql语句转换为MapReduce任务进行运行
- Hive提供了一系列的工具,可以用来进行数据提取、转化、加载(ETL Extract-Transform-Load ),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制
- 本质上是一种大数据离线分析工具
三、Hive的HQL
- HQL - Hive通过类SQL的语法,来进行分布式的计算
- HQL用起来和SQL非常的类似,Hive在执行的过程中会将HQL转换为MapReduce去执行,所以Hive其实是基于Hadoop的一种分布式计算框架,底层仍然是MapReduce
四、特点
- 优点:
a. 学习成本低,只要会sql就能用hive
b. 开发效率高,不需要编程,只需要写sql
c. 模型简单,易于理解
d. 针对海量数据的高性能查询和分析
e. HiveQL 灵活的可扩展性(Extendibility)
f. 高扩展性(Scalability)和容错性
g. 与 Hadoop 其他产品完全兼容 - 缺点:
a. 不支持行级别的增删改
b. 不支持完整的在线事务处理
c. 本质上仍然是MR的执行,效率不算高
五、适用场景
- Hive 构建在基于静态(离线)批处理的Hadoop 之上,Hadoop 通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此,Hive 并不能够在大规模数据集上实现低延迟快速的查询因此,Hive 并不适合那些需要低延迟的应用
- Hive 并不提供实时的查询和基于行级的数据更新操作。Hive 的最佳使用场合是大数据集的离线批处理作业,例如,网络日志分析。
数据仓库和数据库对比
一、数据仓库和数据库对比
数据库 | 数据仓库 |
---|---|
为线上系统提供实时数据 | 为离线分析存储历史数据 |
具有完整的增删改查的能力 | 只支持一次写入多次查询,不支持行级别的增删改 |
具有完整的事务能力 | 不强调事务的特性 |
尽量的避免冗余,提高存储和处理的效率 | 人为的制造冗, 提高查询的效率 |
数据来源单一 | 数据来源多样(数据库,爬虫,日志等) |
二、OLTP和OLAP对比
- 数据库属于OLTP系统(Online Transaction Processing)联机事务处理系统。涵盖了企业大部分的日常操作,如购物、库存、制造、银行、工资、注册、记账等。比如Mysql,oracle等关系型数据库;数据仓库属于OLAP系统。(Online Analytical Processing)联机分析处理系统。Hive,Hbase等
- OLTP是面向用户的、用于程序员的事务处理以及客户的查询处理;OLAP是面向市场的,用于知识工人(经理、主管和数据分析人员)的数据分析
- OLAP通常会集成多个异构数据源的数据,数量巨大;OLTP系统的访问由于要保证原子性,所以有事务机制和恢复机制
- OLAP系统一般存储的是历史数据,所以大部分都是只读操作,不需要事务;OLTP系统具有较强的事务
体系结构
1. 用户接口主要有三个:CLI,JDBC 和 WUI
a. CLI,最常用的模式。实际上在>hive 命令行下操作时,就是利用CLI用户接口
b. JDBC,通过java代码操作,需要启动hiveserver,然后连接操作
2. Metastore
Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等
3. 解释器(complier)、优化器(optimizer)、执行器(executor)组件
这三个组件用于:HQL语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行
4. Hadoop
Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成
流程
1.通过客户端提交一条Hql语句
2.通过complier(编译组件)对Hql进行词法分析、语法分析。在这一步,编译器要知道此hql语句到底要操作哪张表
3.去元数据库找表信息
4.得到信息
5.complier编译器提交Hql语句分析方案。
6.1 executor 执行器收到方案后,执行方案(DDL过程)。在这里注意,执行器在执行方案时,会判断
如果当前方案不涉及到MR组件,比如为表添加分区信息、比如字符串操作等,比如简单的查询操作等,此时就会直接和元数据库交互,然后去HDFS上去找具体数据。
如果方案需要转换成MR job,则会将job 提交给Hadoop的JobTracker。
6.2 MR job完成,并且将运行结果写入到HDFS上。
6.3 执行器和HDFS交互,获取结果文件信息。
7.如果客户端提交Hql语句是带有查询结果性的,则会发生:7-8-9步,完成结果的查询。
安装Hive
- 安装JDK
- 安装Hadoop
- 配置JDK和Hadoop的环境变量
- 下载Hive安装包
http://mirror.bit.edu.cn/apache/hive/hive-1.2.2/ - 解压安装hive
解压:tar -xvf apache-hive-1.2.2-bin.tar.gz
改名:mv apache-hive-1.2.2-bin hive-1.2.2
我的路径:/home/software/hive-1.2.2 - 启动Hadoop的HDFS和Yarn
之前我们已经装过hadoop了。所以直接启动即可,注意hive需要hadoop的支持所以要放到一个机器上 - 进入到bin目录,启动Hive:sh hive (或者执行:./hive)
安装成功
注意如果你用的高版本要看和hadoop的兼容。