IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据2--hive--hive介绍 -> 正文阅读

[大数据]大数据2--hive--hive介绍

第一章 Hive介绍

1.1hive概述

1.1.1 hive的简介

????????HIve是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQK查询功能。其本质是将SQL转换为MapReduce/Spark的任务进行运算,底层由HDFS来提供数据的存储,说白了,hive可以理解为一个将SQL转换为MapReduce/spark任务的工具。

1.1.2 HIve的特点:

  • 可扩展性: Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。

  • 延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

  • 容错性:良好的容错性,节点出现问题,SQL仍可以完成执行。

1.2 hive架构

?

用户接口:包括CLI,JDBC/ODBC,WebGui

元数据存储:通常是存在关系数据块例如mysql/derby中。Hive将元数据存储在数据库中。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表),表的数据所在目录等。

解释器,编辑器,优化器,执行器:完成HIve查询语句从词法分析,语法分析,编译,优化以及查询计划的生成,生成的查询计划存储在HDFS中,并在随后被MapReduce调用执行。

1.3 HIve计算引擎

目前Hive支持MapReduce, Tez和Spark三种计算引擎。

1.3.1 MR计算引擎??

????????Map 在读取数据时,先将数据拆分成若干数据,并读取到 Map 方法中被处理。数 据在输出的时候,被分成若干分区并写入内存缓存(buffer)中,内存缓存被数 据填充到一定程度会溢出到磁盘并排序,当 Map 执行完后会将一个机器上输出的 临时文件进行归并存入到 HDFS 中。当 Reduce 启动时,会启动一个线程去读取 Map 输出的数据,并写入到启动 Reduce 机器的内存中,在数据溢出到磁盘时会对数据进行再次排序。当读取数据完成后 会将临时文件进行合并,作为 Reduce 函数的数据源。

1.3.2 Tez计算引擎

????????Tez是进行大规模数据处理且支持DAG作业的计算框架,它直接源于MapReduce框架,除了能够支持MapReduce特性,还支持新的作业形式,并允许不同类型的作业能够在一个集群中运行。

1.3.3 Spark计算引擎

????????Spark是专门为大规模数据处理而设计的快速,通用支持DAG(有向无环图)作业的计算引擎,类似于Hadoop MapReduce的通用并行框架,可用来构建大型的,低延迟的数据分析应用程序。

1.4 Hive数据抽样

????????当数据规模不断膨胀的时候,我们需要找到一个数据的子集来加快数据分析效率。因此我们就需要通过筛选和分析数据集进行模式和趋势识别。目前来说,有三种方式来进行抽样:随机抽样,桶表抽样,块抽样。

1.4.1随机抽样

????????使用rand()函数进行随机抽样,limit关键字限制抽样返回的数据,其中rand()函数前的distribute和sort关键字可以保证数据在mapper和reducer阶段是随机分布的。

案例1:

select * from table_name

where col = xxx

distribute by rand() sort by rand()

limit num;

案例2:使用order关键字:

select * from table_name

where col = xxx

order by rand()

limit num;

对比:在千万级数据中进行随机抽样,order by方式耗时更长。

1.4.2 块抽样

关键字:tablesample() 函数。

1)tablesample(n percent) 根据hive表数据的大小按照比例抽取数据,并保存到新的hive表中。eg: select * from xxx tablesample(10 percent)

2)tablesample(nM)指定抽样数据的大小,单位为M。

????????eg:select? *? from? xxx ? tablesample(20M)

3)tablesample(n rows)指定抽样数据的行数。

????????eg: select * from xxx tablesample(100 rows)

1.4.3 桶表抽样

关键词:tablesample(bucket x out of y [on colname]).其中x是要抽样的桶编号,桶编号从1开始,colname表示抽样的列,y表示桶的数量。

????eg: select *? from? table? tablesample(bucket 1 out of 10 on rand())

1.5 Hive存储压缩

????HIve存储格式

1.5.1行式存储和列式存储

????????Hive支持的存储格式主要有:TextFile(行式存储),SequenceFile(行式存储),ORC(列式存储),Parquet(列式存储)。

?

????????行存储的特点:查询满足条件的一整行数据的时候,列存储需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中其中一个值,其余值都在相邻地方,所以此时行存储查询的速度更快。

????????列存储的特点:因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能够大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的压缩算法。

1.5.2 TextFile

????????默认格式,数据不做压缩,磁盘开销大,数据解析开销大。可结合 Gzip、Bzip2 使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive 不会对数 据进行切分,从而无法对数据进行并行操作。

1.5.3 ORC格式

????????Orc(Optimized row Columnar).可以看到每个Orc文件由一个或者多个Strip组成,每个Strip的大小是250MB,这个Strip实际相当于RowGroup概念。每个Strip由三部分组成,分别是Index Data, Row Data, Stripe Footer.

1.5.4 Parquet格式

????????Parquet 文件是以二进制方式存储的,所以是不可以直接读取的,文件中包括该 文件的数据和元数据,因此 Parquet 格式文件是自解析的。 通常情况下,在存储 Parquet 数据的时候会按照 Block 大小设置行组的大小,由 于一般情况下每一个 Mapper 任务处理数据的最小单位是一个 Block,这样可以 把每一个行组由一个 Mapper 任务处理,增大任务执行并行度

Hive压缩

1.5.5 压缩

1)数据压缩比结论:

????????ORC > Parquet > textFile

2)存储文件的查询效率比较:

????????ORC > TextFile > Parquet

3)创建一个Snappy压缩的ORC存储方式:

????????row format delimited fields terminated by ‘\t’ stored as orc tblproperties(“orc.compress” = “snappy”);

1.6 Hive和数据库的比较

????????1)查询语言

?????????专门针对Hive设计了类SQL的查询语言HQL。

????????2)数据更新

?????????由于Hive是针对数据仓库应用设计的,而数据仓库的内容是读多少写多少的。因此Hive中不建议对数据的改写,所有的数据都是在加载的时候确定好的,而数据库中的数据通常是需要经常修改的。

????????3)执行延迟

????????Hive在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致Hive延迟高的因素是MapReduce框架。由于MapReduce本身具有较高的延迟,因此,在利用MapReduce执行Hive查询的时候,也会有较高的延迟。

????????4)数据规模

?????????由于Hive建立在集群上并且可以利用MapReduce进行并行计算,因此可以支持很大规模的数据,对应地,数据库可以支持的数据规模较小。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:36:07  更:2021-10-25 12:38:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:56:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码