ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-24 17:05:21  阅读:183  来源: 互联网

标签:tablesample 存储 -- MapReduce 介绍 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进行并行计算,因此可以支持很大规模的数据,对应地,数据库可以支持的数据规模较小。

标签:tablesample,存储,--,MapReduce,介绍,hive,Hive,数据
来源: https://blog.csdn.net/yezonghui/article/details/120936448

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有