Hive(二)优化总结

在介绍hive优化之前,首先要知道hive是什么。

1.hive简介

  • hive是基于hadoop的一哥数据仓库工具,可以将结构化的数据文件映射成一张完整的数据包,并提供完整的sql查询功能,可以将sql语句转化成mapreduce任务进行运行。
  • Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。

2.Hive与关系型数据库的区别

  • hive和关系数据库存储文件的系统不同,hive使用的是hadoop的HDFS(hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统
  • hive使用的计算模型是mapreduce,而关系数据库则是自己设计的计算模型
  • 关系数据库都是为实时查询的业务进行设计的,而hive则是为海量数据做数据挖掘设计的,实时性很差
  • Hive很容易扩展自己的存储能力和计算能力,这个是继承hadoop的,而关系数据库在这个方面要比数据库差很多

3.Hive优化策略

根据前面介绍,hive是将sql语句转化成MapReduce任务去运行,一个hive查询往往会生成多个Map Reduce Job而一个MR又会有Map,Reduce,Splii,Shuffle,Sort等阶段。所以hive优化可以分为针对MR中具体步骤的优化,MR的整体优化以及查询的优化。

(1)MR中具体步骤的优化
一个MR Job会有Map、Reduce、Spill、Shuffle和Sort这几个阶段,接下来根据这些具体的阶段去优化hive。

Map的优化:
Map阶段的优化主要是确定合适的map数。map数的确定与其计算公式有关系,map数的计算公式如下:

num_Map_tasks = max[${Mapred.min.split.size},
                min(${dfs.block.size}, ${Mapred.max.split.size})]

• Mapred.min.split.size指的是数据的最小分割单元大小。
• Mapred.max.split.size指的是数据的最大分割单元大小。
• dfs.block.size指的是HDFS设置的数据块大小。

一般来说dfs.block.size这个值是一个已经指定好的值,而且这个参数Hive是识别不到的,所以实际上只有Mapred.min.split.size和Mapred.max.split.size这两个参数(本节内容
后面就以min和max指代这两个参数)来决定Map数量。在Hive中min的默认值是1B,max的默认值是256MB。所以如果不做修改的话,就是1个Map task处理256MB数据,我们就以调整max为主。通过调整max可以起到调整Map数的作用,减小max可以增加Map数,增大max可以减少Map数。需要提醒的是,直接调整Mapred.Map.tasks这个参数是没有效果的。

调整大小的时机根据查询的不同而不同,总的来讲可以通过观察Map task的完成时间来确定是否需要增加Map资源。如果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值