大数据秋招学习笔记3

Hive基础知识:
1)用于解决海量结构化日志的数据统计工具(数据仓库),可将结构化的数据文件映射为一张表,并提供类 SQL 查询功能。本质就是将 HQL 转化成 MapReduce 程序。处理的数据存储在 HDFS上,分析数据底层的实现是 MapReduce,执行程序运行在 Yarn 上。
2)优缺点:
优点:(1)操作接口采用类 SQL 语法,提供快速开发的能力。
(2)避免了去写 MapReduce,减少开发人员的学习成本。
(3)优势在于处理大数据 。
(4)支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
缺点:(1)执行延迟比较高,因此 Hive 常用于数据分析,对实时性要求不高的场合。
(2)Hive 的 HQL 表达能力有限,迭代式算法无法表达,数据挖掘方面不擅长,由于 MapReduce 数据处理流程的限制,效率更高的算法无法实现。
(3)Hive 的效率比较低,自动生成的 MapReduce 作业,通常情况下不够智能化,调优比较困难,粒度较粗。
3)Hive与数据库的不同:
(1)Hive 中不建议对数据的改写,所有的数据都是在加载的时候确定好的。而数据库中的数据通常是需要经常进行修改的。
(2)Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致 Hive 执行延迟高的因素是 MapReduce 框架。相对的,数据库的执行延迟较低。
(3)Hive 建立在集群上并可以利用 MapReduce 进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小。
4)外部表和内部表:
在删除表的时候,内部表(管理表)的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。 内部表数据由Hive自身管理,外部表数据由HDFS管理。
5)对于大规模的数据集 order by 的效率非常低。在很多情况下,并不需要全局排序,此时可以使用 sort by。Sort by 为每个 reducer 产生一个排序文件。每个 reducer 内部进行排序,对全局结果集来说不是排序。
6)distribute by 采集hash算法,在map端将查询结果中hash值相同的结果分发到对应的reduce文件中,结合 sort by 使用。对于 distribute by 进行测试,一定要分配多 reducer 进行处理,否则无法看到 distribute by 的效果。distribute by 的分区规则是根据分区字段的 hash 码与 reducer 的个数进行模除后, 余数相同的分到一个区。Hive 要求 DISTRIBUTE BY 语句要写在 SORT BY 语句之前。
7)当 distribute by 和 sorts by 字段相同时,可以使用 cluster by 方式。cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能。但是排序只能是升序排序,不能指定排序规则为 ASC 或者 DESC。
8)分区表:
(1)Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要的指定的分区,这样的查询效率 会提高很多。
(2)分区字段不能是表中已经存在的数据,可以将分区字段看作表的伪列。
(3)分区表加载数据时,必须指定分区 。
9)动态分区:
关系型数据库中,对分区表 Insert 数据时候,数据库自动会根据分区字段的值,将数据 插入到相应的分区中,Hive 中也提供了类似的机制,即动态分区(Dynamic Partition)。
10)分桶表:
分区针对的是数据的存储路径;分桶针对的是数据文件。
Hive 的分桶采用对分桶字段的值进行哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。
分桶表操作需要注意的事项:
(1)reduce 的个数设置为-1,让 Job 自行决定需要用多少个 reduce 或者将 reduce 的个数设置为大于等于分桶表的桶数。
(2)从 hdfs 中 load 数据到分桶表中,避免本地文件找不到问题。
(3)不要使用本地模式。
11)Hive 支持的存储数据的格式主要有:TEXTFILE 、SEQUENCEFILE、ORC、PARQUET。
行存储的特点:
查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。
列存储的特点:
因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的
数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的压缩算法。
在实际的项目开发当中,hive 表的数据存储格式一般选择:orc 或 parquet。压缩方式一 般选择 snappy,lzo。
12)hive优化有哪些?
(1)数据存储及压缩。 针对hive中表的存储格式通常有orc和parquet,压缩格式一般使用snappy。相比与textfile格式表,orc占有更少的存储。因为hive底层使用MR计算架构,数据流是hdfs到磁盘再到hdfs,而且会有很多次,所以使用orc数据格式和snappy压缩策略可以降低IO读写,还能降低网络传输量,这样在一定程度上可以节省存储,还能提升hql任务执行效率;
(2)通过调参优化:
并行执行:在Hive中可能有很多个阶段,不一定是一个阶段,这些阶段并非相互依赖的。然后这些阶段可以并行完成,设置并行:set hive.exec.parallel = true。
调节jvm参数,重用jvm;
设置map、reduce的参数;
动态分区调整:(1)开启动态分区:hive.exec.dynamic.partition=true。(2)设置为非严格模式:hive.exec.dynamic.partiton.mode = nostrict。(3)实操:创建分区表、加载数据到分区表中、创建目标分区、设置动态分区、查看目标分区表的分区情况。
(3)有效地减小数据集,将大表拆分成子表;结合使用外部表和分区表。
(4)SQL优化 :
大表对大表:尽量减少数据集,可以通过分区表,避免扫描全表或者全字段;
大表对小表:设置自动识别小表,将小表放入内存中去执行。
(5)本地模式:大多数的Hadoop Job要求Hadoop提供完整的可扩展性来触发大数据集,不过有时候hive的输入数据量非常的小,这样的情况下可能触发任务的事件比执行的事件还长,我们就可以通过本地模式把小量的数据放到本地上面计算。
13)Hive小文件问题怎么解决:
(1) 使用 hive 自带的 concatenate 命令,自动合并小文件 。
concatenate 命令只支持 RCFILE 和 ORC 文件类型。
(2)减少Map数量 。
(3)减少Reduce的数量 。
(4)使用hadoop的archive将小文件归档 。Hadoop Archive简称HAR,是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减少namenode内存使用的同时,仍然允许对文件进行透明的访问。
建议hive使用 orc 文件格式,以及启用 lzo 压缩。这样小文件过多可以使用hive自带命令 concatenate 快速合并。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值