赞
踩
hive是hadoop生态系统中不可或缺的工具,提供一种类SQL语言,可以查询存储在hadoop分布式文件系统中的数据或者其他hadoop集成的文件系统
hive降低了将这些应用程序转移到hadoop系统上的难度
优点:类sql开发,快速开发;避免了去写MR程序的难度;执行延迟较高,常用作数据分析;处理大型数据集;自定义用户函数
缺点:HQL表达能力有限;hive的效率较低;
hive的本质是将HQL转换为MR程序
数据仓库更加注重数据的存储、查询和管理;而hive主要用于分析查询
1、用户接口 client
2、元数据:metastore:元数据包括数据库、表名、表的拥有者、列/分区字段、表的类型、表的数据所在目录
3、驱动器(driver):
1.解析器(SQL Parser):将 SQL 字符串转换成抽象语法树 AST,这一步一般都用第 三方工具库完成,比如 antlr;对 AST 进行语法分析,比如表是否存在、字段是否存在、SQL 语义是否有误。
2.编译器(Physical Plan):将 AST 编译生成逻辑执行计划。
3.优化器(Query Optimizer):对逻辑执行计划进行优化。
4.执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于 Hive 来 说,就是 MR/Spark。
4、hadoop:使用hdfs进行存储
[图片]
内部表:是hive默认创建的表,它的数据存储在hive的数据仓库中默认路径下,hive负责管理内部表的元数据和数据,当删除内部表时候,hive会删除该表的元数据和数据
外部表:外部表是指hive中定义的表,但数据存储在hive之外的位置上,外部表的元数据由hive进行统一管理,但是数据本身由外部存储系统管理,当删除外部表时候,hive只删除元数据,而不删除数据本身
hive中的数据倾斜是指某些分区或者数据块的数据量过大,导致查询性能下降
解决方案:
1、数据倾斜通常是由于某些键的数据量过大,可以通过将数据进行重分区或者使用更细粒度的分区来解决
2、可以使用随机数和哈希函数等技术来解决数据倾斜,使得数据分区更加均匀
3、可以使用倾斜表连接技术来解决数据倾斜
4、使用布隆过滤器来减少数据倾斜的影响
5、使用动态分区或者分桶来解决数据倾斜
6、使用压缩算法来解决数据倾斜的影响
map端:
增加map任务的数量,提高整并行度和整体处理速度
压缩中间数据,减少磁盘IO开销
reduce端:
增加reduce任务的数量,提高并行度…
合理设置shuffle阶段的内存大小,避免内存溢出或者过多的磁盘IO操作
使用combiner函数,如果reduce端的数据量比较大,可以使用combiner函数来进行部分聚合操作,减少传输给reducer的数据量
UDF、UDAF(用户自定义聚合函数)、UDTF(用户自定义表生成函数)
UDF对单个输入值进行处理,返回一个输出值;UDAF对多个输入值进行聚合计算,返回一个聚合结果;UDTF生成一个或多个输出表。
步骤:
继承GenericUDF类
重写类中的方法
打包上传jar包到/opt/module/hive/datas/myudf.jar中
创建临时函数并且命名
1、解析器:通过解析器将用户输入的HQL转换成抽象语法树
2、语义分析器:对抽象语法树进行语义分析,包括验证表和列的存在性、检查数据类型、解析表达式等
3、查询优化器:在语义分析完以后,hive会对查村进行优化,重写查询计划、选择合适的连接方式等
4、查询计划生成器:优化后的查询计划将被传递给查询计划生成器,生成逻辑查询计划
5、物理计划生成器:逻辑查询计划将被传递给物理计划生成器,生成物理查询计划(将逻辑操作符映射到对应的MR任务,生成一系列的MR任务,生成的MR任务将被提交给hadoop集群进行执行)
6、执行器:生成的物理查询计划将被执行器执行
7、结果存储:查询结果将被存储在指定的位置
存储引擎是基于hadoop的HDFS
计算引擎有三个:MR、Tez、Spark
文本文件格式:textfile
序列文件格式:SequenceFile,二进制文件格式,键值对存储
列示存储格式:parquet和orc,以列为单位存储数据
Avro格式:
RCFile:列示存储格式,每个列的数据存储在单独的文件中
json:以json格式存储数据
csv格式:以逗号分割文本
row_number函数:它为每一行分配一个唯一的整数值,这个值根据窗口排序规则进行排序。即使两个行值相同,它们的row_number值也会不同。例如,如果有5行数据,排序后的结果分别为1、2、3、4、5。返回结果集中每一行的唯一编号。
rank函数:它为每一行分配一个排名值,根据窗口排序规则进行排序。如果两个行的值相同,它们的rank值也会相同,而下一个行将跳过对应数量的排名。例如,如果有5行数据,排序后的结果分别为1、2、2、4、5。
dense_rank函数:它为每一行分配一个紧凑的排名值,根据窗口排序规则进行排序。即使两个行的值相同,它们的dense rank值也会不同,而下一个行将始终增加1。例如,如果有5行数据,排序后的结果分别为1、2、2、3、4。后面名次不跳跃
row_number:依次排序
rank:遇到重复,排名相同,后续排名跳过
dense_rank:遇到重复,排名相同,后续排名依次
Rank:对每一行进行排序,可重复,
dense_rank():稠密排名
count、sum、min、max、first_value、last_value、lag、lead、
count(*) 计算指定列或者整个表中的行数
count(column_name):计算指定列的非空值的个数
前提是需要查询结果的字段类型和字段名一致
union会删除重复行,union all会保留所有行
union会对结果进行排序,消除重复行,unionall不会排序;
leftjoin:保留左边的表的数据
Right join:保留右边的数据
Inner join:保留公共部分的数据
全外连接:保存所有的数据
对于底层HDFS来说,小文件过多会导致namenode元数据特别大,占用大量的内存,严重影响hdfs性能
解决:
1、使用hive自带的concatenate命令,自动合并小文件
使用hive中insert into,就会再hadoop中生成一个小文件夹
2、调整参数减少map数量
3、减少reduce的数量
reduce的个数决定了输出文件的个数,可以调整reduce个数控制hive表的文件数量
就是mr的具体过程
内嵌模式:将元数据保存在本地内嵌的derby数据库中
本地模式:将元数据保存在本地独立的数据库中
远程模式:把元数据保存在远程独立的mysql数据库中
metadata:元数据包含了额hive创建的database和table等信息
metastore:客户端连接metastore服务,再去连接mysql数据库用来存取元数据,有了meatastore服务,就可以有多个客户端同时连接,
HiveServer2:是一种能够使客户端执行hive查询的服务
TRANSPOSE、COLLECT_SET
EXPLODE、STACK
hive默认使用的引擎是MR,hive执行的sql都会转化成MR的作业的形式
hive表默认的存储系统是hdfs文件系统,数据全部存储在hdfs中
hive是一种读时模式,只有真正从hdfs读取数据的时候才会进行类型转换,mysql是一种写时模式。当数据写入文件时候已经严格检验数据
任何整数类型的都可以隐式转换成一个范围更大的类型,TINYINT,SMALLINT,INT,BIGINT,FLOAT和STRING都可以隐式地转换成DOUBLE;
或者使用显示转换:cast
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。