Hive的初识(1).md

Hive
What?Why?How?
Hive的起源?
Hive起源于Facebook(一个美国的社交服务网络)。Facebook有着大量的数据,而Hadoop是一个开源的MapReduce实现,可以轻松处理大量的数据。但是MapReduce程序对于Java程序员来说比较容易写,但是对于其他语言使用者来说不太方便。此时Facebook最早地开始研发Hive,它让对Hadoop使用SQL查询(实际上SQL后台转化为了MapReduce)成为可能,那些非Java程序员也可以更方便地使用。hive最早的目的也就是为了分析处理海量的日志.
a) 方便对文件及数据的元数据进行管理,提供统一的元数据管理方式
b) 提供更加简单的方式来访问大规模的数据集,使用SQL语言进行数据分析

Hive是什么
Hive官网
(1)hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的统计分析。

(2)Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

使用 hive 的命令行接口,感觉很像操作关系数据库,但是 hive 和关系数据库还是有很大的不同,下面我就比较下 hive 与关系数据库的区别,具体如下:

Hive 和关系数据库存储文件的系统不同,Hive 使用的是 hadoop 的 HDFS(hadoop 的分布式文件系统),关系数据库则是服务器本地的文件系统;

hive 使用的计算模型是 mapreduce,而关系数据库则是自己设计的计算模型;

关系数据库都是为实时查询的业务进行设计的,而 Hive 则是为海量数据做数据挖掘设计的,实时性很差;实时性的区别导致 Hive 的应用场景和关系数据库有很大的不同;

Hive 很容易扩展自己的存储能力和计算能力,这个是继承 hadoop 的,而关系数据库在这个方面要比数据库差很多.

Why?
直接使用 MapReduce 所面临的问题:
  1、人员学习成本太高
  2、项目周期要求太短
  3、MapReduce实现复杂查询逻辑开发难度太大
为什么要使用 Hive:
  1、更友好的接口:操作接口采用类 SQL 的语法,提供快速开发的能力
  2、更低的学习成本:避免了写 MapReduce,减少开发人员的学习成本
  3、更好的扩展性:可自由扩展集群规模而无需重启服务,还支持用户自定义函数

特点
优点:
1、可扩展性,横向扩展,Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务 横向扩展:通过分担压力的方式扩展集群的规模 纵向扩展:一台服务器cpu i7-6700k 4核心8线程,8核心16线程,内存64G => 128G
  2、延展性,Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数
  3、良好的容错性,可以保障即使有节点出现问题,SQL 语句仍可完成执行

缺点:
1、Hive 不支持记录级别的增删改操作,但是用户可以通过查询生成新表或者将查询结 果导入到文件中(当前选择的 hive-2.3.2 的版本支持记录级别的插入操作)
  2、Hive 的查询延时很严重,因为 MapReduce Job 的启动过程消耗很长时间,所以不能 用在交互查询系统中.
  3、Hive 不支持事务(因为不没有增删改,所以主要用来做 OLAP(联机分析处理),而 不是 OLTP(联机事务处理),这就是数据处理的两大级别)。 image
总结:
  Hive 具有 SQL 数据库的外表,但应用场景完全不同,Hive 只适合用来做海量离线数 据统计分析,也就是数据仓库.

数据仓库
1、数据仓库基本概念
​ 数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

2、数据处理分类:OLAP与OLTP
​ 数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

3、OLTP
​ OLTP,也叫联机事务处理(Online Transaction Processing),表示事务性非常高的系统,一般都是高可用的在线系统,以小的事务以及小的查询为主,评估其系统的时候,一般看其每秒执行的Transaction以及Execute SQL的数量。在这样的系统中,单个数据库每秒处理的Transaction往往超过几百个,或者是几千个,Select 语句的执行量每秒几千甚至几万个。典型的OLTP系统有电子商务系统、银行、证券等,如美国eBay的业务数据库,就是很典型的OLTP数据库。

4、OLAP
​ OLAP(On-Line Analysis Processing)在线分析处理是一种共享多维信息的快速分析技术;OLAP利用多维数据库技术使用户从不同角度观察数据;OLAP用于支持复杂的分析操作,侧重于对管理人员的决策支持,可以满足分析人员快速、灵活地进行大数据复量的复杂查询的要求,并且以一种直观、易懂的形式呈现查询结果,辅助决策.

解释器,编译器,优化器
Hive经常被大数据企业用作企业级数据仓库。 Hive在使用过程中是使用SQL语句来进行数据分析,由SQL语句到具体的任务执行还需要经过解释器,编译器,优化器,执行器四部分才能完成.
(1)解释器:调用语法解释器和语义分析器将SQL语句转换成对应的可执行的java代码或者业务代码
(2)编译器:将对应的java代码转换成字节码文件或者jar包
(3)优化器:从SQL语句到java代码的解析转化过程中需要调用优化器,进行相关策略的优化,实现最优的查询性能
(4)执行器:当业务代码转换完成之后,需要上传到MapReduce的集群中执行

Hive架构
image

用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli 启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至 Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并 且在该节点启动Hive Server。 WUI是通过浏览器访问Hive.
Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包 括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数 据所在目录等.
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编 译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有 MapReduce调用执行.
Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成 (包含*的查询,比如select * from tbl不会生成MapRedcue任务)
image
4、数据库与数据仓库的区别
​ 注意:前三条重点掌握理解,后面的了解即可

​ 1、数据库是对业务系统的支撑,性能要求高,相应的时间短,而数据仓库则对响应时间没有太多的要求,当然也是越快越好

​ 2、数据库存储的是某一个产品线或者某个业务线的数据,数据仓库可以将多个数据源的数据经过统一的规则清洗之后进行集中统一管理

​ 3、数据库中存储的数据可以修改,无法保存各个历史时刻的数据,数据仓库可以保存各个时间点的数据,形成时间拉链表,可以对各个历史时刻的数据做分析

​ 4、数据库一次操作的数据量小,数据仓库操作的数据量大

​ 5、数据库使用的是实体-关系(E-R)模型,数据仓库使用的是星型模型或者雪花模型

​ 6、数据库是面向事务级别的操作,数据仓库是面向分析的操作

Hive常用命令
创建数据表
image 查看表
imageimage show databases; //列出数据库
desc database fm_data; // 展示数据库 fm_data 的信息
use fm_data; // 使用某个数据库 fm_data
show tables; // 展示这个数据库里面的所有表格 show tables in fm_data; // 展示数据库 fm_data 里面的所有表格
假设有数据库 fm_data,里面有表格 shield_fm_feature_item_ctr

show databases; //列出数据库

desc database fm_data; // 展示数据库 fm_data 的信息

use fm_data; // 使用某个数据库 fm_data\

show tables; // 展示这个数据库里面的所有表格

show tables in fm_data; // 展示数据库 fm_data 里面的所有表格

show tables like ‘ctr’; // 模糊查找

show create table shield_fm_feature_item_ctr; // 获得表格 shield_fm_feature_item_ctr 的建表语句,其中包括表格的字段,HDFS 的 location 等信息

desc shield_fm_feature_item_ctr; // 展示表格 shield_fm_feature_item_ctr 的字段以及字段类型

desc formatted shield_fm_feature_item_ctr; // 详细描述表格 shield_fm_feature_item_ctr,包括表格的结构,所在的 database,owner,location,表格的类型 (Managed Table or External Table),存储信息等

你可能感兴趣的:(Hive的初识(1).md)