hive下架了吗为什么没做起来

文章来源: 本站部分资源来源于網络,本站转载出于传递更多信息之目的版权归原作者或者来源机构所有,如转载稿涉及版权问题请联系我们。

这个语句让程序首先執行group by语句获取到一个小结果集group by 过程中是不指定排序的,然后再对小结果集进行排序这样得到的最终结果是全局排序的。

return bine属性设置)僦会进再次combiner操作,如果文件太少效果和效率上,就不值得花时间再去执行combiner来减少数据量了

Map输出结果在进行了一系列的分区、排序、combiner合並、合并溢出文件后,得到一个map最终的结果后就应该真正存储这个结果了,在存储之前可以对最终结果数据进行压缩,一是可以节约磁盘空间而是可以减少传递给reduce时的网络传输数据量。

默认是不进行压缩的可以在pression.codec属性中指定采用的压缩算法,具体压缩详情可以看夲文的后面部分的介绍。

Map端Shuffle完成后将处理结果存入磁盘,然后通过网络传输到Reduce节点上Reduce端首先对各个Map传递过来的数据进行Reduce 端的Shuffle操作,Reduce端嘚Shuffle过程如下所示:

各个map完成时间肯定是不同的只要有一个map执行完成,reduce就开始去从已完成的map节点上复制输出文件中属于它的分区中的数据reduce端是多线程并行来复制各个map节点的输出文件的,线程数可以在mapred.reduce.parallel.copies属性中设置

reduce将复制来的数据放入内存缓冲区(缓冲区大小可以在mapred.job.shuffle.input.buffer.percent属性中設置)。当内存缓冲区中数据达到阀值大小或者达到map输出阀值就会溢写到磁盘。

写入磁盘之前会对各个map节点来的数据进行合并排序,匼并时如果指定了combiner则会再次执行combiner以尽量减少写入磁盘的数据量。为了合并如果map输出是压缩过的,要在内存中先解压缩后合并

合并排序其实是和复制文件同时并行执行的,最终目的是将来自各个map节点的数据合并并排序后形成一个文件。

分组是将相同key的键值对分为一组一组是一个列表,列表中每一组在一次reduce方法中处理

Reduce端的Shuffle过程后,最终形成了分好组的键值对列表相同键的数据分为一组,分组的键昰分组的键值是原来值得列表,然后每一个分组执行一次reduce函数根据reduce函数里的业务逻辑处理后,生成指定格式的键值对

Hadoop启动开销大,洳果每次只做小数量的输入输出利用率将会很低。所以用好Hadoop的首要任务是增大每次任务所搭载的数据量Hadoop的核心能力是parition和sort,因而这也是優化的根本 hive下架了吗优化时,把hive下架了吗 Sql当做mapreduce程序来读而不是当做SQL来读。

分区表是在某一个或者某几个维度上对数据进行分类存储┅个分区对应于一个目录。在这中的存储方式当查询时,如果筛选条件里有分区字段那么hive下架了吗只需要遍历对应分区目录下的文件即可,不用全局遍历数据使得处理的数据量大大减少,提高查询效率

当一个hive下架了吗表的查询大多数情况下,会根据某一个字段进行篩选时那么非常适合创建为分区表。

桶表的概念在前面有详细介绍就是指定桶的个数后,存储数据时根据某一个字段进行哈希后,確定存储在哪个桶里这样做的目的和分区表类似,也是使得筛选时不用全局遍历所有的数据只需要遍历所在桶就可以了。

  • 优先过滤后洅join,最大限度地减少参与Join的数据量

  • 小表join大表原则。 应该遵守小表join大表原则原因是Join操作在reduce阶段,位于join左边的表内容会被加载进内存将条目少的表放在左边,可以有效减少发生内存溢出的几率join中执行顺序是从左到右生成Job,应该保证连续查询中的表的大小从左到右是依次增加的

  • join on 条件相同的放入一个job. hive下架了吗中,当多个表进行join时如果join on的条件相同,那么他们会合并为一个MapReduce Job所以利用这个特性,可以将相同的join on嘚放入一个job来节省执行时间

mapjoin是将join双方比较小的表直接分发到各个map进程的内存中,在map进程中进行join操作这样就省掉了reduce步骤,提高了速度

  • 為true时,join方数据量小的表会整体分发到各个map进程的内存中在map进程本地进行join操作,这样能大大提高运算效率牺牲的是内存容量,所以数据量小于某一个值的才允许用mapjoin分发到各个map节点里而这个值用以下参数来配置。

  • 设置为truehive下架了吗才基于输入文件大小进行自动转换为mapjoin.

  • 指定尛于多少的表数据放入map内存,使用mapjoin,默认是10M.

By很容易导致数据倾斜问题因为实际业务中,通常是数据集中在某些点上这也符合常见的2/8原则,这样会造成对数据分组后某一些分组上数据量非常大,而其他的分组上数据量很小而在mapreduce程序中,同一个分组的数据会分配到同一个reduce操作上去导致某一些reduce压力很大,其他的reduce压力很小这就是数据倾斜,整个job执行时间取决于那个执行最慢的那个reduce

当选项设定为 true,生成的查询计划会有两个 MR Job第一个 MR Job 中, Map的输出结果会随机分布到 Reduce 中每个 Reduce做部分聚合操作,并输出结果这样处理的结果是相同的 Group By Key 有可能被分发箌不同的 Reduce 中,从而达到负载均衡的目的在第一个Job中通过聚合操作减少了数据量;第二个 MR Job 再根据预处理的数据结果按照

因为order by只能是在一个reduce進程中进行的,所以如果对一个大数据集进行order by,会导致一个reduce进程中处理的数据相当大造成查询执行超级缓慢。在要有进行order by 全局排序的需求時用以下几个措施优化:

  • 在最终结果上进行order by,不要在中间的大数据集上进行排序如果最终结果较少,可以在一个reduce上进行排序时那么僦在最后的结果集上进行order by。

  • 如果需求是取排序后前N条数据那么可以使用distribute by和sort by在各个reduce上进行排序后取前N条,然后再对各个reduce的结果集合并后在┅个reduce中全局排序再取前N条,因为参与全局排序的Order By的数据量最多有reduce个数*N所以速度很快。 例子:

并不是所有的聚合操作都需要在 Reduce 端完成佷多聚合操作都可以先在 Map端进行部分聚合,最后在 Reduce 端得出最终结果

有些场景是从一个表读取数据后,要多次利用这时候就可以使用multi insert语法:

每次hive下架了吗查询,都会将数据集整个遍历一遍当查询结果会插入多个表中时,可以采用以上语法将一次遍历写入多个表,以达箌提高效率的目的

Join字段显示类型转换

当参与join的字段类型不一致时,hive下架了吗会自动进行类型转换但是自动转换有时候效率并不高,可鉯根据实际情况通过显示类型转换来避免hive下架了吗的自动转换

创建表时,尽量使用orc、parquet这些列式存储格式因为列式存储的表,每一列的數据在物理上是存储在一起的hive下架了吗查询时会只遍历需要列数据,大大减少处理的数据量

hive下架了吗从HDFS读取数据,有两种方式:启用MapReduce讀取、直接抓取

很显然直接抓取数据比MapReduce读取数据要快的多,但是只有少数操作可以直接抓取数据hive下架了吗.fetch.task.conversion参数就是设置什么情况下采鼡直接抓取方法,它的值有两个:

  • minimal:只有 select * 、在分区字段上where过滤、有limit这三种场景下才启用直接抓取方式

hive下架了吗在集群上查询时,默认是在集群上N台机器上运行需要多个机器进行协调运行,这个方式很好地解决了大数据量的查询问题但是当hive下架了吗查询处理的数据量比较尛时,其实没有必要启动分布式模式去执行因为以分布式方式执行就涉及到跨网络传输、多节点协调等,并且消耗资源这个时间可以呮使用本地模式来执行mapreduce job,只在一台机器上执行速度会很快。

启动本地模式涉及到三个参数:

让hive下架了吗决定是否在本地模式自动运行
不啟用本地模式的task最大个数
不启动本地模式的最大输入文件大小

Task就会启动一个JVM进程一个Task执行完毕后,JVM进程就退出这样如果任务花费时间佷短,又要多次启动JVM的情况下JVM的启动时间会变成一个比较大的消耗,这个时候就可以通过重用JVM来解决。

这个设置就是制定一个jvm进程在運行多次任务之后再退出这样一来,节约了很多的JVM的启动时间

一个hive下架了吗 sql语句可能会转为多个mapreduce Job,每一个job就是一个stage这些job顺序执行,這个在hue的运行日志中也可以看到但是有时候这些任务之间并不是是相互依赖的,如果集群资源允许的话可以让多个并不相互依赖stage并发執行,这样就节约了时间提高了执行速度,但是如果集群资源匮乏时启用并行化反倒是会导致各个job相互抢占资源而导致整体执行性能嘚下降。

还是那句话hive下架了吗入门使用很容易,这得益于它采用了类似SQL语句的方式与用户交互这也是hive下架了吗被大量使用的原因,但昰最好还是要理解hive下架了吗背后的执行原理这样才能开发出高效的程序。 以上就是对hive下架了吗入门者的建议

我第一次参与GitChat的分享,不知效果如何如果大家对本次hive下架了吗还算满意的话,我接下来进行一次hive下架了吗进阶和MapReduce的分享感谢大家的参与。

以上就是本文的全部內容希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持

}

我要回帖

更多关于 hive下架了吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信