文章目录
Hive简介
- Hive 是一个构建在 Hadoop 上的数据仓库,可以使用SQL的方式来读,写,管理分布式存储(HDFS / S3 / OSS / COS 等)上的大型数据集
- Hive 是由 Facebook 开源,为了解决海量的结构化日志的统计问题,适合处理离线数据
- Hive 是一个客户端,不是一个集群,他的职责就是将 SQL 翻译成 MR 或者 Spark 作业,提交到 Hadoop 集群上运行
- Hive 是一个类 SQL 的框架,Hive 的 SQL 称为 HQL,和 SQL 没有任何关系,只是语法相似
- Hive 底层支持 MR / Spark / Tez 等引擎,但是目前还是以 MR 为主
- Hive 支持统一的元数据管理,简单来说就是 SQL on Hadoop,即 Hive / Spark SQL / Impala / Presto 等框架创建的表可以通用
- Hive 的数据分为两部分
- 存储在 HDFS 或其他分布式文件系统上的数据:例如结构化的日志文件
- 存储在 MySQL 中的元数据 :例如表名,列名,列的类型等描述数据的数据(为了防止单点故障,MySQL 必须做主备)
- 为什么能用SQL来进行大数据的统计分析?
因为有了元数据的支撑,我们知道HDFS上的数据每一列的字段名是什么,字段类型是什么,数据在HDFS的什么位置
Hive的参数
- Hive 的所有参数在官网的 这里
- 可以在 hive-site.xml 中设置全局生效,也可以在命令行中设置,对当前会话有效
- 设置参数:set 参数名=值
- 查看参数值:set 参数名
- hive.metastore.warehouse.dir
- 设置 Hive 默认数据库的存储位置,默认在 /user/hive/warehouse/ 下
- 如果创建了新的数据库,默认在 /user/hive/warehouse/ 下新建一个 数据库名.db 的目录
- hive.cli.print.current.db
- 在命令行中显示当前数据库名
- 在命令行中显示当前数据库名
- hive.cli.print.header
- 在命令行中显示列名
- 在命令行中显示列名
Hive 的常用字段类型
- 数值:int、bigint、float、double
- 字符串:string
Hive 的分隔符
- 字段与字段的分隔符:默认\001,生产上常用逗号,空格,或者制表符(tab)
- 行与行的分隔符:\n
Hive 查看执行日志
- 在 HIVE_HOME 的 conf 目录下,有一个 hive-log4j.properties.template 示例文件,用来设置 hive 的 log 日志输出,其中 hive.log.dir 参数设置了日志存放位置,默认为 /tmp/用户名/ 目录下的 hive.log 文件
- 如果 Hive 执行出现异常,就查看这个日志来定位问题
Hive 元数据在 MySQL 中的存储
- DBS表:存储数据库相关的信息
- VERSION:存储 hive 版本信息,有且只能有一条数据,如果被删除或新增数据,hive 无法正常启动
- TBLS:存储表相关信息
- columns_v2表:存储字段信息
Hive 的 DDL 操作
- Hive 的 DDL 操作官网说明在 这里
- 创建删除数据库
# 在默认数据库目录创建
CREATE DATABASE IF NOT EXISTS 数据库名;
# 指定数据库存储路径
CREATE DATABASE IF N