(一)hive权威指南学习

(一)hive权威指南学习

1:hive简介

1.1:hive简介

Hive 由 Facebook 实现并开源,是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据映射为一张数据库表,并提供 HQL(Hive SQL)查询功能,底层数据是存储在 HDFS 上。Hive的本质是将 SQL 语句转换为 MapReduce 任务运行,使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。
Hive 只适合用来做海量离线数据统计分析,也就是数据仓库

1.2:架构

  • Shell 终端命令行(client客户端),采用交互形式使用 Hive 命令行与 Hive进行交互,包括beeline,hiveserver2
  • JDBC/ODBC:是 Hive 的基于 JDBC 操作提供的客户端,开发可以通过这连接至Hive server 服务
  • MetaStore:
    1:一个集群内可部署多个MetaStore,负荷分担。提供Hive的元数据服务,负责Hive表的结构和属性信息读、写、维护和修改。
    2:提供Thrift server接口,供HiveServer、Spark、WebHCat等MetaStore客户端来访问,操作元数据。
  • Drvier组件 :该组件是Hive的核心组件,该组件包括Complier(编译器)、Optimizer(优化器)和Executor(执行器),它们的作用是对Hive SQL语句进行解析、编译优化、生成执行计划,然后调用底层MR计算框架。
  • Thrift Server:该组件提供JDBC和ODBC接入的能力,用来进行可扩展且跨语言的服务开发。Hive集成了该服务,能让不同的编程语言调用Hive的接口
    hive架构

语句执行
在这里插入图片描述

1.3:优缺点

  • 1:优点:
    1、可扩展性,横向扩展,Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务
    横向扩展:通过分担压力的方式扩展集群的规模
    纵向扩展:一台服务器cpu i7-6700k 4核心8线程,8核心16线程,内存64G => 128G
    2、延展性,Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数
    3、良好的容错性,可以保障即使有节点出现问题,SQL 语句仍可完成执行
  • 2:缺点:
    1、Hive 不支持记录级别的增删改操作,但是用户可以通过查询生成新表或者将查询结
    果导入到文件中
    2、Hive 的查询延时很严重,因为 MapReduce Job 的启动过程消耗很长时间,所以不能用在交互查询系统中。
    3、Hive 不支持事务

1.4、Hive 的数据存储

支持JSON,CSV,TEXTFILE,RCFILE,SEQUENCEFILE,ORC这几种存储格式

1:存储结构
  • 1、Hive 的存储结构包括数据库、表、视图、分区和表数据等。数据库,表,分区等等都对
    应 HDFS 上的一个目录。表数据对应 HDFS 对应目录下的文件。
  • 2、Hive 中所有的数据都存储在 HDFS 中,没有专门的数据存储格式,因为 Hive 是读模式
    (Schema On Read),可支持 TextFile,SequenceFile,RCFile 或者自定义格式等
  • 3、 只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据
    Hive 的默认列分隔符:控制符 Ctrl + A,\x01
    Hive 的默认行分隔符:换行符 \n
  • 4、Hive 中包含以下数据模型:
    database:在 HDFS 中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
    table:在 HDFS 中表现所属 database 目录下一个文件夹
    external table:与 table 类似,不过其数据存放位置可以指定任意 HDFS 目录路径
    partition:在 HDFS 中表现为 table 目录下的子目录
    bucket:在 HDFS 中表现为同一个表目录或者分区目录下根据某个字段的值进行 hash 散列之后的多个文件
    view:与传统数据库类似,只读,基于基本表创建
  • 5、Hive 的元数据存储在 RDBMS 中,除元数据外的其它所有数据都基于 HDFS 存储。默认情况下,Hive 元数据保存在内嵌的 Derby 数据库中,只能允许一个会话连接,只适合简单的测试。实际生产环境中不适用,为了支持多用户会话,则需要一个独立的元数据库,使用MySQL 作为元数据库,Hive 内部对 MySQL 提供了很好的支持。
  • 6、Hive 中的表分为内部表、外部表、分区表和 Bucket 分桶表
2:内部表和外部表的区别:

表数据的管理对象不同:
删除内部表,删除表元数据和数据
删除外部表,删除元数据,不删除数据
内部表和外部表的使用选择:
外部表:对已经存在的hdfs数据直接建表可使用,通过指定location路径加载文件。

hive 其实仅仅只是对存储在HDFS 上的数据提供了一种新的抽象。而不是管理存储在 HDFS 上的数据。所以不管创建内部表还是外部表,都可以对 hive 表的数据存储目录中的数据进行增删操作。

3:分区表和分桶表的区别:

Hive 数据表可以根据某些字段进行分区操作,细化数据管理,可以让部分查询更快。同时表和分区也可以进一步被划分为 Buckets,分桶表的原理和 MapReduce 编程中的HashPartitioner 的原理类似
分区和分桶都是细化数据管理,但是分区表是手动添加区分,由于 Hive 是读模式,所以对添加进分区的数据不做模式校验,分桶表中的数据是按照某些分桶字段进行 hash 散列形成的多个文件,所以数据的准确性也高很多
分区:根据字段分区。分桶:根据字段hash散列

2:hive的数据类型和文件格式

1:数据类型

  • 基本数据类型
    tinyInt(byte),smallint(short),int,bigint(long),float,double,boolean,string类型
  • 集合数据类型
    Array数组:类型是通过下标来取值,字段的类型必须相同
    Map类型:key–>v的键值对,是通过key来取值
    Struct类型:类似于对象是通过定义时的名称来取值,和map区别是字段类型可以不同

2:文本文件分隔符和编码

  • hive默认分隔符
换行:\n
列分割:^A 	在创建表时使用,可用八进制\001代替
集合类型数据分隔符:^B  可用八进制\002代替
  • 各类型文件分隔符
    CSV文件:数值间用逗号分割,行用\n
    TSV文件:数据间用回车键分隔符,换行\n

3:HQL语句

3.1:3种客户端

  • 1:hive
    在bin目录下,执行hive进入
  • 2:HiveServer2/beeline
  • 3:web UI
    在hive-site.xml配置文件中配置了ip和端口等信息
    浏览器输入:ip:port/hwi

3.2:HQL的库表操作

hive数据库shell操作语句
包括ddl和dml操作

4:hive的索引

因为hive中的表是没有像在mysql中一样的主键的,所以为了提升查询速度,可以创建索引来实现。但是维护索引会消耗额外的存储空间

4.1:索引操作

创建索引:create index indexname on table tablename;
删除索引:delet index if exists indexname on table tablename;
查看索引:show index on table;

5:调优

5.1:explain解析HQL

使用explain功能可以查看我们的HQL是如何转化为MR任务去执行的。
使用:explain 加执行语句即可。explain hql;
比如:explain select * …;

5.2:join优化

5.3:严格模式

严格模式是为了避免执行不好的查询语句:比如查询分区表不指定分区。过多的数据查询会非常慢。

情况1:查询分区表必须通过where 指定分区去过滤
情况2:order by 排序必须跟limit限制返回结果条数
情况3:join笛卡尔积关联使用on而不是直接用where过滤

5.4:索引

索引会加快group by语句执行
等等以及其他优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值