Hive基础知识

                                            Hive基础知识 

1 Hive相关概念

1.1 Hive是什么

Hive是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据映射为一张数据库表,并提供 HQL(Hive SQL)查询功能,最终底层将HQL语句转换为MapReduce任务的,底层数据是存储在 HDFS 上。

1.2 Hive的产生背景

使用MapReduce,所面临的问题: ①人员学习成本太高;②项目周期要求太短;③MapReduce 实现复杂查询逻辑开发难度太大。

MapReduce分布式计算的时候,绝大多数的场景针对于结构化数据的,而针对结构化数据做数据统计分析,sql语句是最擅长的。Facebook 实现并开源Hive,操作接口采用类 SQL 的语法,提供快速开发的能力;避免了写 MapReduce,减少开发人员的学习成本;可自由扩展集群规模而无需重启服务,还支持用户自定义函数。

1.3 Hive的特点

(1)是Hive是基于 Hadoop 的一个数据仓库工具,底层数据存储在HDFS ,计算转换为MapReduce;

数据仓库与数据库的区别:见本文最后一节。Hive不支持事务。

(2)可以将结构化的数据映射为一张数据库表,Hive只能做结构化数据,所以Hive是不可以完全替代MapReduce,因为MapReduce不仅仅可以针对结构化数据,还可以针对半结构化数据;

(3)并提供 HQL(Hive SQL)查询功能;

(4)Hive的本质是将 SQL 语句转换为 MapReduce 任务运行;

(5)使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。

1.4 Hive的优缺点

优点:

(1)可扩展性(横向扩展):可自由的扩展集群的规模,一般不需要重启。

横向扩展:用更多的节点支撑更大量的请求,通过分担压力的方式扩展集群的规模

纵向扩展:扩展一个点的能力支撑更大的请求

(2)延展性:hive中提供的内置函数271个,还可以自定义函数

(3)良好的容错性:可以保障即使有节点出现问题,SQL 语句仍可完成执行

缺点:

(1)不支持 delete操作肯update操作

(2)不支持事务:因为不支持删改,所以主要用来做 OLAP(联机分析处理),而不是OLTP(联机事务处理),这就是数据处理的两大级别

(3)查询延时很严重:因为 MapReduce 的启动过程消耗很长时间,所以不能 用在交互查询系统中。

2 Hive的安装

由于内嵌 Derby 版本,启动hive的时候只会加载当前目录下的元数据库一旦切换目录 ,元数据库无法加载,所以derby适用于单用户不适用多用户,也不能随便切换目录,所在一般不用,下面介绍外置MySQL 版本的Hive的安装

(1)准备好 MySQL;

(2)上传

apache-hive-2.3.2-bin.tar.gz

(3)解压

tar -xvzf apache-hive-2.3.2-bin.tar.gz -C /home/refuel/opt/modules

(4)配置环境变量

vim /home/refuel/.bashrc_profile 添加以下两行内容:

export HIVE_HOME=/home/refuel/opt/modules/apache-hive-2.3.2-bin

export PATH=$PATH:$HIVE_HOME/bin

保存退出后执行 source /home/refuel/.bashrc_profile

(5)修改配置文件

touch /home/refuel/opt/modules/apache-hive-2.3.2-bin/conf/hive-site.xml

vim /home/refuel/opt/modules/apache-hive-2.3.2-bin/conf/hive-site.xml

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://bigdata01:3306/hivedb?createDatabaseIfNotExist=true</value>
        <description>元数据连接的url  bd1904hive元数据库在mysql</description>
        <!-- 如果 mysql 和 hive 在同一个服务器节点,那么请更改 hadoop02 为 localhost -->
    </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>123456</value>
        <description>password to use against metastore database</description>
    </property>
</configuration>

(6)将mysql的驱动(mysql-connector-java-5.1.40-bin.jar)放到hive的lib下

(7)初始化hive的元数据库

schematool -dbType mysql -initSchema

(8)启动 Hive 客户端

hive

 

3 Hive的基本架构

(1)用户接口层

①CLI,Shell 终端命令行,采用交互形式使用 Hive 命令行与 Hive 进行交互,最常用;

②JDBC/ODBC,是 Hive 的基于JDBC操作提供的客户端,用户通过这连接至Hive server 服务; 

③Web UI,通过浏览器访问 Hive

(2)跨语言服务平台层

能让不同的编程语言调用 Hive 的接口,老版本是thift server 新版本是hiveserver2

(3)核心驱动层

Driver驱动器组件完成将HQL语句转化为MapReduce任务,并进行提交。Hive 的核心是驱动引擎, 驱动引擎由四部分组成:

①解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)

②编译器:编译器是将抽象语法树编译为逻辑执行计划

③优化器:优化器是对逻辑执行计划进行优化

④执行器:执行器是调用底层的运行框架执行最终优化结果的逻辑执行计划

(4)元数据层

元数据:描述数据的数据,Hive的元数据就是存储在 Hive 中的数据的描述信息。Hive 中的元数据通常包括:

①描述数据库相关信息的数据(DBS),Hive中创建一个数据库这个表中插入1条数据进行描述

如:

#数据库数据存储的hdfs的位置         数据库名
hdfs://hivedb/user/hive/warehouse   default 

②描述表的信息(TBLS),Hive中有一个表,这个表就会有一条信息

如:

 #表名     dbid      表类型(MANAGED_TABLE:管理表)
 student     7       MANAGED_TABLE  

③表的字段信息(columns_v2),Hive中显示的表结构来自元数据的

如:

表id    字段名  字段类型    字段顺序
 1           id                int            0

 

4 Hive的数据组织形式

(1)Database数据库

便于数据精细化管理,将不同模块的数据,存储在不同的数据库中。

(2)Table表

1)按照权限分(表数据管理权限):分为内部表(也叫管理表)或外部表。

①内部表(managed_table):表数据(HDFS)的管理权限都是Hive自己所有的,对于存储表数据的HDFS目录 Hive具备绝对的权限的(数据的删除)。默认创建的表,都是内部表。内部表在进行删除的时候元数据和表数据一并被删除的。

②外部表(external_table):表数据的管理权限是HDFS的 ,Hive不具备表数据权限的(数据删除),Hive对这个数据  只有使用权限  没有删除权限。外部表在进行删除的时候元数据会被删除,但是表数据不会被删除,要想彻底删除需要手动删除HDFS的数据。创建时加上external 关键字就是外部表。

内部表和外部表区别:

①建表语句:默认为内部表,创建时加external为外部表;

②删除数据时:内部表删除元数据和原始数据(表数据)一并删除,外部表删除只删除元数据;

③应用场景:

           外部表:公共数据,如好多部门同用的数据,清洗原始日志数据

           内部表:如自己部门的数据

2)按照功能分:分为分区表和分桶表

①分区表:Hive的分区表完全不同于MapReduce中的分区

Hive中每一个表中存储都是海量的数据,我们在进行查询时候 如select * from person where age=18;执行的全表扫描,数据量大,全表扫描严重影响查询效率。为了提高查询效率,将原来的表进行划分成不同的区域,查询的时候降低扫描范围,这里的每一个区域  就叫做一个分区。

分区本质上相当于将原来的表划分成一个个的小表,分区依据按照需要过滤的字段作为分区字段。一个分区表对应一个目录。

/user/hive/warehouse/table1.db/person/00000  没有分区的目录
有分区目录如下:
 /user/hive/warehouse/table1.db/person/age=19/0000
 /user/hive/warehouse/table1.db/person/age=18/0000
 /user/hive/warehouse/table1.db/person/age=20/0000

②分桶表:类似于MapReduce中的分区,将原始数据 按照一定的规则,分成不同的文件

作用主要有两个:提升抽样性能(取某一个或几个桶中的数据)和提升join性能()

默认分桶规则为:分桶字段 .hash & Integer_max % 分桶个数

/user/hive/warehouse/table1.db/person/00000 没有分桶的文件
按照年龄分桶个数为3文件如下

/user/hive/warehouse/table1.db/person/00000   0
/user/hive/warehouse/table1.db/person/00001   1
/user/hive/warehouse/table1.db/person/00002   2
           
           

(3)View视图(类型:VIRTUAL_VIEW)

Hive中只存在逻辑视图 不存在物化视图,Hive中的视图不会真正的执行 仅仅将视图代表的sql语句存储,视图类似于sql查询语句的快捷方式。

视图的作用:提sql高代码的可读性

 

5 数据仓库

数据仓库(data warehouse)概念:含义数据仓库是一个面向主题的,集成的,不可更新的,随时间不断变化的数据集合,他可以支持企业或组织的决策分析处理。是多个数据库服务器的整体集群

数据库:按某种数据结构存储的数据的仓库,是单独的一个运行的数据主体集合,针对小批量的数据的。

(1)数据库是面向事务的设计,数据仓库是面向主题设计的;

(2)数据库一般存储在线数据即当前值,数据仓库存储的一般是历史数据;

(3)数据库设计是尽量避免冗余,数据仓库在设计是有意引入冗余;

(4)数据库是为捕获数据而设计,数据仓库是为分析数据而设计,数据库中数据的目标是面向业务处理人员的,为业务处理人员提供信息处理的支持,而数据仓库则是面向高层管理人员的,为其提供决策支持;

(5)数据库内数据是动态变化的,只要有业务发生,数据就会被更新,而数据仓库则是静态的历史数据,只能定期添加、刷新;

(6)数据库中数据访问频率较高,但访问量较少,而数据仓库的访问频率低但访问量却很高;

(7)数据库在访问数据时要求响应速度快,其响应时间一般在几秒内,而数据仓库的响应时间则可长达数几小时。

数据仓库的物理上就是数据库,数据库中有实时业务系统,我们通常所说的OLTP(On-Line Transaction Processing在线事务处理),要求的是数据库访问频率高,并发量和实时处理的能力要求高,按照秒甚至毫秒来进行的。比如银行、电力交换等业务。数据库中还有一种是联机分析系统。我们通常所说的OLAP(On-Line Analysis Processing),是用来存储过往的历史数据,将可能有用的所有数据归类放到一个库中,就是仓库。届时需要做趋势分析或者其他预测应用时,才访问数据库,实时性要求不是很高。OLAP业务应用比如宏观股指分析、年度的天气分析等。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值