大数据-Hive相关知识点介绍

Hive基本概念
  • 什么是 Hive
    Hive:由 Facebook 开源用于解决海量结构化日志的数据统计。
    Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL 查询功能。基于一个统一的查询分析层,通过SQL语句的方式对HDFS上的数据进行查询、统计和分析。
    Hive本质是将 HQL 转化成 MapReduce 程序
    Hive的表本质就是Hadoop的目录/文件
    Hive默认表存放路径一般都是在你工作目录的hive目录里面,按表名做文件夹分开,如果你有分区表的话,分区值是子文件夹,可以直接在其它的M/R job里直接应用这部分数据

  • 引入原因:
    – 对存在HDFS上的文件或HBase中的表进行查询时,是要手工写一堆MapReduce代码
    – 对于统计任务,只能由懂MapReduce的程序员才能搞定
    – 耗时耗力,更多精力没有有效的释放出来
    Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再Hadoop平台上运行,达到快速开发的目的。
    Hive中的表是纯逻辑表,就只是表的定义等,即表的元数据。本质就是Hadoop的目录/文件,达到了元数据与数据存储分离的目的
    Hive本身不存储数据,它完全依赖HDFS和MapReduce。
    Hive的内容是读多写少,不支持对数据的改写和删除
    Hive中没有定义专门的数据格式,由用户指定,需要指定三个属性:
    – 列分隔符
    – 行分隔符
    – 读取文件数据的方法

  • 与传统关系数据特点比较
    在这里插入图片描述
    hive和关系数据库存储文件的系统不同,hive使用的是hadoop的HDFS(hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统;
    • hive使用的计算模型是mapreduce,而关系数据库则是自己设计的计算模型;
    • 关系数据库都是为实时查询的业务进行设计的,而hive则是为海量数据做数据挖掘设计的,实时性很差
    • Hive很容易扩展自己的存储能力和计算能力,这个是继承hadoop的,而关系数据库在这个方面要比数据库差很多。

  • Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的 Driver,结合元数据(MetaStore),将这些指令翻译成 MapReduce,提交到 Hadoop 中执行,最后,将执行返回的结果输出到用户交互接口。

Hive 体系架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1.用户接口:Client
    CLI(hive shell)、JDBC/ODBC(java 访问 hive)、WEBUI(浏览器访问 hive)
  • 2.元数据:Metastore
    元数据包括:表名、表所属的数据库(默认是 default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;默认存储在自带的 derby 数据库中,推荐使用 MySQL 存储 Metastore
  • 3.Hadoop
    使用 HDFS 进行存储,使用 MapReduce 进行计算。
  • 4.驱动器:Driver
    (1)解析器(SQL Parser):将 SQL 字符串转换成抽象语法树 AST,这一步一般都用第三方工具库完成,比如 antlr;对 AST 进行语法分析,比如表是否存在、字段是否存在、SQL 语义是否有误。
    (2)编译器(Physical Plan):将 AST 编译生成逻辑执行计划。
    (3)优化器(Query Optimizer):对逻辑执行计划进行优化。
    (4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于 Hive 来说,就是 MR/Spark。
  • Hive 的优缺点
  1. 优点
    操作接口采用类 SQL 语法,提供快速开发的能力(简单、容易上手)。
    避免了去写 MapReduce,减少开发人员的学习成本。
    Hive 的执行延迟比较高,因此 Hive 常用于数据分析,对实时性要求不高的场合。
    Hive 优势在于处理大数据,对于处理小数据没有优势,因为 Hive 的执行延迟比较高。
    Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
  2. 缺点
    Hive 的 HQL 表达能力有限
    (1)迭代式算法无法表达
    (2)数据挖掘方面不擅长
    Hive 的效率比较低
    (1)Hive 自动生成的 MapReduce 作业,通常情况下不够智能化
    (2)Hive 调优比较困难,粒度较粗
Hive参数配置方式
  • 参数的配置三种方式

(1)配置文件方式
默认配置文件:hive-default.xml
用户自定义配置文件:hive-site.xml
注意:用户自定义配置会覆盖默认配置。另外,Hive 也会读入 Hadoop 的配置,因为 Hive 是作为 Hadoop 的客户端启动的,Hive 的配置会覆盖 Hadoop 的配置。配置文件的设定对本机启动的所有 Hive 进程都有效。

(2)命令行参数方式
启动 Hive 时,可以在命令行添加-hiveconf param=value 来设定参数。
例如:

[atguigu@hadoop103 hive]$ bin/hive -hiveconf mapred.reduce.tasks=10;

注意:仅对本次 hive 启动有效
查看参数设置:

hive (default)> set mapred.reduce.tasks;

(3)参数声明方式
可以在 HQL 中使用 SET 关键字设定参数
例如:

hive (default)> set mapred.reduce.tasks=100;

注意:仅对本次 hive 启动有效。
查看参数设置

hive (default)> set mapred.reduce.tasks;
  • 上述三种设定方式的优先级依次递增。即配置文件<命令行参数<参数声明。注意某些系统级的参数,例如 log4j 相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。
Hive 数据类型
  • 基本数据类型
    在这里插入图片描述
  • 集合数据类型
    在这里插入图片描述
  • 类型转化
    Hive 的原子数据类型是可以进行隐式转换的,类似于 Java 的类型转换,例如某表达式使用 INT 类型,TINYINT 会自动转换为 INT 类型,但是 Hive 不会进行反向转化,例如,某表达式使用 TINYINT 类型,INT 不会自动转换为 TINYINT 类型,它会返回错误,除非使用 CAST 操作。
    1.隐式类型转换规则如下
    (1)任何整数类型都可以隐式地转换为一个范围更广的类型,如 TINYINT 可以转换成 INT,INT 可以转换成 BIGINT。
    (2)所有整数类型、FLOAT 和 STRING 类型都可以隐式地转换成 DOUBLE。
    (3)TINYINT、SMALLINT、INT 都可以转换为 FLOAT。
    (4)BOOLEAN 类型不可以转换为任何其它的类型。
    2.可以使用 CAST 操作显示进行数据类型转换
    例如 CAST(‘1’ AS INT)将把字符串’1’ 转换成整数 1;如果强制类型转换失败,如执行CAST(‘X’ AS INT),表达式返回空值 NULL。
DDL 数据定义
  1. 创建数据库
    在这里插入图片描述
  2. 查询数据库
  • 显示数据库
    在这里插入图片描述
  • 查看数据库详情
    在这里插入图片描述
  • 切换当前数据库
    在这里插入图片描述
  1. 修改数据库
    用户可以使用 ALTER DATABASE 命令为某个数据库的 DBPROPERTIES 设置键-值对属性值,来描述这个数据库的属性信息。数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。
    在这里插入图片描述
  2. 删除数据库
    在这里插入图片描述
  3. 创建表
    1.建表语法
    CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
    [(col_name data_type [COMMENT col_comment], …)]
    [COMMENT table_comment]
    [PARTITIONED BY (col_name data_type [COMMENT col_comment], …)]
    [CLUSTERED BY (col_name, col_name, …)
    [SORTED BY (col_name [ASC|DESC], …)] INTO num_buckets BUCKETS]
    [ROW FORMAT row_format]
    [STORED AS file_format]
    [LOCATION hdfs_path]
    2.字段解释说明
    (1)CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项来忽略这个异常。
    (2)EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
    (3)COMMENT:为表和列添加注释。
    (4)PARTITIONED BY 创建分区表
    (5)CLUSTERED BY 创建分桶表
    (6)SORTED BY 不常用
    (7)ROW FORMAT
    DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS
    TERMINATED BY char]
    [MAP KEYS TERMINATED BY char] [LI
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值