Hive流程

文章目录

  • Hive流程
    • Hive与传统数据库对比
    • Hadoop简介
    • 1.为什么使用Hive
    • 2.Hive是什么
    • 3.Hive具体内容
    • 4.Hive的存储格式
    • 5.Hive的重要特性
    • 6.Hive操作客户端
    • 7.Hive的Metastore
    • job执行流程
    • 8.Hive基础建表语法和加载数据
      • Hive建表
        • 建表1:全部使用默认建表方式
        • 建表2:指定location (这种方式也比较常用)
        • 建表3:指定存储格式
        • 建表4:create table xxxx as select_statement(SQL语句) (这种方式比较常用)
        • 建表5:create table xxxx like table_name 只想建表,不需要加载数据
      • Hive加载数据
        • 1、使用```hdfs dfs -put '本地数据' 'hive表对应的HDFS目录下'```
        • 2、使用 load data inpath
        • 3、create table xxx as SQL语句
        • 4、insert into table xxxx SQL语句 (没有as)
    • .Hive的分区与分桶

Hive与传统数据库对比

​ @ 版本号:Hive1.2.1
​ 0.13和0.14版本稳定版本,不支持但是不支持更新删除操作。
​ 1.2.1和1.2.2稳定版本,为Hive2版本(主流版本)
​ 1.2.1的程序只能连接hive1.2.1 的 hiveserver2

Hadoop简介

Hadoop是一个开源框架,用于在分布式环境中存储和处理大数据。它包含两个模块,一个是MapReduce,另一个是Hadoop分布式文件系统(HDFS).
·MapReduce: 这是一个并行编程模型,用于在大型商用硬件上处理大量机构化,半结构化和非结构化数据。
·HDFS: Hadoop分布式文件系统是Hadoop框架的一部分,用于存储和处理数据集。它提供了一个容错文件系统在商品硬件上运行。
Hadoop生态系统包含不同的子项目(工具), 例如用于帮助Hadoop模块的Sqoop, Pig和Hive。
·Sqoop: 它用于在HDFS和RDBMS之间导入和导出数据
·Pig: 这是一个用于MapReduce操作开发脚本的过程语言平台
·Hive: 它是一个用来开发SQL类型脚本来执行MapReduce操作的平台
注意: 有多种方法可以执行MapReduce操作:

· 使用Java MapReduce程序的传统方法用于结构化,半结构化和非结构化数据
· MapReduce使用Pig处理结构化和半结构化数据的脚本方法
· Hive查询语言(HiveQl或HQL) 用于MapReduce使用Hive处理结构化数据

1.为什么使用Hive

“大数据”一词用于包含巨大数据量,高速度以及日益增多的各种数据的大型数据集。使用传统的数据管理系统,处理大数据很困难。因此,Apache Software Foundation引入了一个名为Hadoop的框架来解决大数据管理和处理难题。
而仅仅在使用Hadoop时,您必须编写复杂的 Map-Reduce 作业,但现在在 Hive 的帮助下,您只需要提交SQL查询即可。Hive 主要面向熟悉 SQL 的用户。Hive 抽象了 Hadoop 的复杂性。需要注意的主要事情是Hive不需要学习java。Hive 使用称为HiveQL (HQL) 的语言,它类似于 SQL。HiveQL 自动将类似 SQL 的查询转换为 MapReduce 作业。

2.Hive是什么

Hive是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、插叙你和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的 类SQL查询语言,称为HQL,它允许熟悉SQL的用户查询数据。同时,这个语言也允许熟悉MapReduce开发者 的开发自定义的mapper和reducer来处理内建的mapper和reducer 无法完成的复杂的分析工作。
数据仓库,英文名称为Dat a Warehouse,可以简写DWDWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它用于分析性报告和决策支持目的而创建。为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

3.Hive具体内容

  1. 查询语言:类SQL的查询语言HQL。熟悉SQL开发的开发者可以很方便使用Hive进行开发。
  2. 数据存储位置:所有Hive的数据都是存储在HDFS中的。而数据库则可以将数据保存在块设备中或者本地文件系统中。
  3. 数据格式。 Hive中没有定有专门的数据格式。而在数据库中,所有数据都会按照一定的组织存储,因此,数据库加载数据的过程会比较耗时。
  4. 数据更新。 Hive堆数据的改写和添加比较弱化,0.14版本之后支持,需要启动配置项。而数据库中的数据通常是需要经常进行修改的。
  5. 索引。Hive在加载数据的过程中不会对数据进行任何处理。因此访问延迟较高。数据库可以有很高的效率。较低的延迟。由于数据的访问延迟较高,决定了Hive不适合在线数据查询。
  6. 执行计算。Hive中执行是通过MapReduce来实现的而数据库通常有自己的执行引擎。
  7. 数据规模。由于HIve建立在集群上并可以利用MapReduce进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小。

4.Hive的存储格式

Hive会为每个创建的数据在HDFS上创建一个目录,该数据库的表会以子目录形式存储,表中的数据会以表目录下的文件形式存储。对于default数据库,默认的缺省数据库没有自己的目录,default数据库下的表默认存放在/usr/hive/warehouse目录下

Hive的数据存储基于Hadoop HDFS。
Hive的没有专门的数据文件格式,常见的有以下几种。

  1. TEXTFILE 为默认格式,存储方式为行存储。数据不做压缩,磁盘开销大,数据解析开销大。

  2. SEQUENCEFILE 是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。

    三种压缩选择: NONE,RECORD,BLOCK。 Record压缩率低,一般建议使用BLOCK压缩

  3. AVRO

  4. RCFILE 一种行列存储相结合的存储方式。

  5. ORCFILE 数据按照行分块,每个块按照列存储,其中每个块都存储有一个索引。hive给出的新格式,属于RCFILE的升级版,性能有大幅度提升,而且数据可以压缩存储,压缩快 快速列存取

  6. PARQUET 也是一种行式存储,同时具有很好的压缩性能;同时可以减少大量的表扫描和反序列化的时间。

存储效率及执行速度对比

读取操作效率对比

5.Hive的重要特性

· 在Hive中,首先创建表和数据库,然后将数据加载到这些表中。
· Hive作为数据仓库,设计用于仅管理和查询存储在表中的结构化数据。
· 在处理结构化数据时, Map Reduce没有像UDF那样的优化和可用性功能,但Hive框架有。查询优化是指在性能方面的一种有效的查询执行方式。
· Hive的受SQL启发的语言将用户与MapReduce编程的复杂性分开。它重用了关系数据库中熟悉的概念,例如表、行、列和模式等,以便于学习。
· Hadoop的编程适用于平面文件。因此,Hive可以使用目录结构对数据机型"分区",以提高某些 查询性能。
· Hive的一个新的重要组件,即用于存储架构信息的Metastore。此metastore通常驻留在关系数据库中。我们可以使用以下方法与Hive进行交互
· Web GUI
· Java 数据库(JDBC)接口
· 大多数交互往往通过命令行界面(CLI)进行。Hive提供了一个CLI来使用Hive查询语言(HQL)编写Hive查询
· 通常,HQL语言类似于大多数数据分析师熟悉的SQL语法。下面的示例查询显示提到的表名中存在的所有记录
· **示例查询:**Select * from
· Hive支持四种文件格式,即TEXTFILE、SEQUENCFILE、ORC和RCFILE(记录列文件)。
·对于单用户元数据存储,Hive使用derby数据库,对于多用户元数据或共享元数据情况,Hive使用MYSQL。

关于Hive的一些关键点:

· HQL和SQL的主要区别在于Hive查询在Hadoop的基础架构上执行,而不是在传统数据上执行。
· Hive查询执行将类似于一系列自动生成的mapreduce作业。
· Hive支持分区和桶概念,一边在客户端执行查询时轻松检索数据。
· Hive支持自定义特定的UDF(用户定义函数) 用于数据清理、过滤等。根据程序员的要求可以定义Hive UDF。

Hive和关系数据之间的一些主要区别

  关系数据库是“读模式和写模式”。首先创建一个表,然后将数据插入到特定的表。在关系数据表上,可以执行插入、更新和修改等功能。Hive是“只读模式”。因此,更新、修改都能功能不适用于此。因为典型集群中的Hive查询运行在多个数据节点上。所以无法跨多个节点更新和修改数据。(0.13以下的Hive版本)此外,Hivb支持”READ Many WRITE Once“模式。意味着在插入表后,我们可以在最新的Hive版本中更新表。之一:但是新版本Hive带有更新的功能。Hive版本(Hive 0.14)提供了更新和删除选项作为新功能

Hive结构

6.Hive操作客户端

常用的2个:CLI,JDBC/ODBC
· CLI, 即Shell命令行
· JDBC/ODBC 是Hive的Java, 与使用传统数据库JDBC的方式类似。
· Hive将元数据存储在数据库中(metastyore), 目前只支持mysql、derby。
· Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等;由解释器、编译器、优化器完成HQL查询语句,从此法分析、语法分析、编译、优化以及查询计划(破烂)的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行。
· Hive的数据存储在HDFS中,大部分的查询由MapReduce完成(包含*的查询,比如select * from table 不会生成MapReduce任务

7.Hive的Metastore

· metastore是hive元数据的集中存放地
· metastore默认使用内嵌的derby数据库作为存储引擎
· Derby引擎的缺点:一次只能打开一个会话
· 使用MySQL作为外置存储引擎,多用户同时访问
· 元数据详解见:查看mysql SDS表和TBLS表 --> 元数据详解啦

Hive 存储和计算:

Meta存储、文件系统、Job Client等Hive服务依次与Hive存储通信并执行以下操作
· 在Hive中创建的表的元数据存储在Hive”元存储数据库“中。
· 查询结果和加载到表中的数据将存储在HDFS上的Hadoop集群中。

job执行流程

Hive中的数据流按以下模式运行:

从UI(用户界面)或interface(接口)执行查询
驱动程序正在与Compiler交互以获取计划。(这里的计划是指查询执询)流程及其相关元数据信息的收集
编译器为要执行的作业创建计划。编译器与Meta存储通信以获取元数据请求
元存储将元数据信息发回编译器
编译器与驱动程序通信并提出执行查询的计划
驱动程序将执行计划发送到执行引擎
执行引擎(EE)充当Hive和Hadoop之间的桥梁来处理查询。用于DFS操作。
从驱动获取结果
将结果发送到执行引擎。一旦从数据节点获取结果到EE,它就会将结果发送回驱动程序和UI或interface(接口)

我们将第七步拿出来详解

  1. DFS操作
    · EE应首先联系Name Node,然后联系Data节点以获取存储在表中的值。
    · EE将从数据节点获取所需的记录。表的实际数据仅驻留在数据节点中。而从名称节点,它只获取查询的元数据信息
    · 它从与提到的查询相关的数据节点收集实际数据
    · 执行引擎(EE)与Hive中存在的原存储进行双向操作。以执行DDL(数据定义语言)操作。这里完成了CREATE、DROP和ALTERING表和数据库等DDL操作。原存储有关数据库名称、表名称和列名称的信息。它将获取与提到的查询有关的数据。
    · 执行引擎(EE)反过来与Hadoop守护进程(例如 Name node、 Data node和Job tracker)通信以在Hadoop文件系统之上执行查询

8.Hive基础建表语法和加载数据

Hive建表

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] // 指定Hive储存格式:textFile、rcFile、SequenceFile 默认为:textFile[STORED AS file_format]| STORED BY 'storage.handler.class.name' [ WITH SERDEPROPERTIES (...) ]  (Note:  only available starting with 0.6.0)]// 指定储存位置[LOCATION hdfs_path]// 跟外部表配合使用,比如:映射HBase表,然后可以使用HQL对hbase数据进行查询,当然速度比较慢[TBLPROPERTIES (property_name=property_value, ...)]  (Note:  only available starting with 0.6.0)[AS select_statement]  (Note: this feature is only available starting with 0.5.0.)
建表1:全部使用默认建表方式
create table students
(id bigint,name string,age int,gender string,clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; // 必选,指定列分隔符
建表2:指定location (这种方式也比较常用)
create table students2
(id bigint,name string,age int,gender string,clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/input1'; // 指定Hive表的数据的存储位置,一般在数据已经上传到HDFS,想要直接使用,会指定Location,通常Locaion会跟外部表一起使用,内部表一般使用默认的location
建表3:指定存储格式
create table students3
(id bigint,name string,age int,gender string,clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS rcfile; // 指定储存格式为rcfile,inputFormat:RCFileInputFormat,outputFormat:RCFileOutputFormat,如果不指定,默认为textfile,注意:除textfile以外,其他的存储格式的数据都不能直接加载,需要使用从表加载的方式。
建表4:create table xxxx as select_statement(SQL语句) (这种方式比较常用)
create table students4 as select * from students2;
建表5:create table xxxx like table_name 只想建表,不需要加载数据
create table students5 like students;

Hive加载数据

1、使用hdfs dfs -put '本地数据' 'hive表对应的HDFS目录下'
2、使用 load data inpath

下列命令需要在hive shell里执行

// 将HDFS上的/input1目录下面的数据 移动至 students表对应的HDFS目录下,注意是 移动、移动、移动
load data inpath '/input1/students.txt' into table students;
// 清空表
truncate table students;
// 加上 local 关键字 可以将Linux本地目录下的文件 上传到 hive表对应HDFS 目录下 原文件不会被删除
load data local inpath '/usr/local/soft/data/students.txt' into table students;
// overwrite 覆盖加载
load data local inpath '/usr/local/soft/data/students.txt' overwrite into table students;
3、create table xxx as SQL语句
4、insert into table xxxx SQL语句 (没有as)
// 将 students表的数据插入到students2 这是复制 不是移动 students表中的表中的数据不会丢失
insert into table students2 select * from students;// 覆盖插入 把into 换成 overwrite
insert overwrite table students2 select * from students;

.Hive的分区与分桶

参考文案:图、概念
特性

万字夜里爆肝,熬夜倾情奉献 Hive最最基础应用相关推荐

  1. 万字长文爆肝Python基础入门【巨详细,一学就会】

    目录 数据的名字和种类--变量和类型 初探数据种类 数据类型 数值运算 比较运算 变量和赋值 变量的好处 用赋值更新变量 变量和数据类型的关系 总结 数据类型 数值运算 数值比较 变量和赋值 一串数据 ...

  2. 万字长文爆肝 DNS 协议!

    试想一个问题,我们人类可以有多少种识别自己的方式?可以通过身份证来识别,可以通过社保卡号来识别,也可以通过驾驶证来识别,尽管我们有多种识别方式,但在特定的环境下,某种识别方法可能比另一种方法更为适合. ...

  3. 万字长文爆肝Python基础入门【第二弹、超详细数据类型总结】

    目录 一.建立一个数据火车--列表 1.创建列表 2.列表元素的获取 3.列表元素的添加 4.列表元素的删除 5.列表元素的修改 二.列表的亲兄弟--元组 1.创建元组 2.元组元素的获取 3.元组和 ...

  4. ❤️爆肝熬夜开发了一个SpringBoot活动管理系统,现在开源给你!毕设面试学习都不愁了!【强烈建议收藏】❤️

    前面有个粉丝找到猛哥,说遇到了困难!让我开发一个基于springboot的活动管理系统! 他非常的着急,事情比较突然. 好吧,我去买了咖啡,熬了两个通宵给赶制出来了! 后来小伙伴用完系统后,他说可以开 ...

  5. ❤️ 爆肝一个月!JAVA零基础入门总结(下)❤️

    程序.进程.线程 程序(program) 是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 进程(process) 是程序的一次执行过程,或是正在运行的一个程序.是一个 ...

  6. ❤️ 爆肝一个月!JAVA零基础入门总结(上)❤️

    标识符与命名规范 标识符 Java 对各种变量.方法和类等要素命名时使用的字符序列称为标识符 技巧:凡是自己可以起名字的地方都叫标识符. 定义合法标识符规则 由26个英文字母大小写,0-9 ,_或$组 ...

  7. 熬夜爆肝!C++基础入门大合集【万字干货预警 建议收藏】

    前言 前几天有粉丝问我,大一结束c++刚学完,不知道自己目前学得怎么样?要掌握的知识点有没有都弄懂了?是否基础入门了? 这就安排上,熬夜爆肝整理出来的C++基础入门知识! 一篇文带你入门C++!一篇文 ...

  8. 再也不用熬夜爆肝做汇报了!PPT生成神器ChatBCG来啦!

    来源:新智元 相信不管是学生党,还是上班族,都有为PPT汇报熬夜爆肝的经历...... 光挑选模版和样式就杀死了一堆脑细胞. 而现在,一款能一键自动生成PPT模版和文字可能成为解放生产力的神器,它就是 ...

  9. ❤️爆肝万字!一文最全总结之Spring从入门到入土❤️(建议收藏)

    文章目录 最新更新 前言 1. Spring概述 1.1 介绍 2. IoC入门 2.1 什么是IoC 2.2 IoC入门案例1(基础案例) 2.3 IoC入门案例2(依赖注入) 2.4 IoC入门案 ...

最新文章

  1. 当 Vue 处理数组与处理纯对象的方式一样
  2. Gauss-Newton算法学习
  3. 用电梯服务器怎样解电梯显示E34,默纳克品牌电梯故障代码e41怎么处理
  4. OpenGL之深入解析坐标系
  5. 第八课-第二讲 08_02_bash脚本编程之七 case语句及脚本选项进阶
  6. selenium自动化之元素高亮显示
  7. PSFTP上传文件到服务器
  8. java端口扫描器_简单端口扫描器java的设计与实现.doc
  9. 这38款超级炫酷的时间轴特效代码案例,总有一款是你需要的
  10. Spring mcv 框架 浅谈
  11. 模拟ATM机存取款管理系统设计(C++)
  12. 招生难、管理难!教育如何实现零流失、高增长?教育行业如何玩转“私域流量”?...
  13. 关于Java实现“1000个鸡蛋/苹果分装到10个篮子/箱子里,可表述1000以内任何正整数”的程序
  14. Solidity学习笔记
  15. C# FileSystemWatcher监控新生成的文件
  16. Worthington 核糖核酸酶 T1解决方案
  17. UE5学习笔记——前言
  18. tmall.product.schema.add(淘宝天猫商品发布接口),淘宝商品发布API接口,tmall.product.schema.get产品信息获取接口
  19. 量子计算 12 量子计算机到底是啥?
  20. 中国香茅醇行业研究与投资预测报告(2022版)

热门文章

  1. 如何通过三视图判断立方体个数_中考难点,由三视图确定小立方体个数的问题求解有策略...
  2. 乌龟为什么喜欢叠罗汉!!!
  3. tiny4412 裸机程序 八、重定位到DRAM及LCD实验
  4. 天猫精灵连接蓝牙摸索4 STM32单片机和TG7100B实现数据上发和播报
  5. MySQL 亿级数据的迁移、清洗、与审计分析
  6. 小蜜脚本显示服务器关闭了链接,小蜜脚本怎么老出现错误报告鼠标连点选中区域...
  7. blackjack java gui_求助一个java的题,blackjack, class 分为Card 和Deck,求大神帮我做一个程序...
  8. 华为手机怎么编辑PDF?一款神器轻松搞定
  9. 情以何堪的伤感QQ日志分享:一句话,了断一切
  10. java毫秒值转换成日期_Java学习笔记day08