hive、spark优化

hive、spark优化

看了文章https://blog.csdn.net/qq_26442553/article/details/99438121,总结了的。感谢@涤生大大的精彩分享

小文件过多

小文件过多引起maptask太多,初始化时间远大于逻辑处理时间。此时我们可以合并小文件。

  1. hive,调节参数:
set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; --hive0.5开始就是默认值,执行map前进行小文件合并
----------------------------------------------------------------------
set mapred.max.split.size=256000000  
set mapred.min.split.size=10000000
set mapred.min.split.size.per.node=8000000 --每个节点处理的最小split
----------------------------------------------------------------------
set hive.merge.mapfiles = true ;
set hive.merge.mapredfiles = true ;
set hive.merge.size.per.task = 256000000 ;
set hive.merge.smallfiles.avgsize=160000000 ;

------------------------------------------------------------------------
注意一般来说这四个参数的配置结果大小要满足如下关系。
max.split.size >= min.split.size >= min.size.per.node >= min.size.per.node

注意,
1.调节上面四个参数控制map端任务个数时,如果文件未使用压缩,或者压缩格式不支持split,那么在文件较大的情况下想要通过调节参数增加map数是无效的。
2.如果是可切分的压缩格式,则需要上面👆四个参数一起,进行精准控制调优。

  1. spark 。
    spark 可以通过/repartition(n)/,根据实际情况,对最终结果进行repartion进而达到控制最终落到hdfs的文件数的目的
数据倾斜
1.join倾斜
  1. 小表join大表
    将小表写在前面,通过/*map join */舍掉reduce操作,没有reduce操作就不会有数据倾斜。并且map join的原理是将小表加载到每一个map节点上与大表进行关联,所以对小表 join大表的笛卡尔积的情况,也十分有效。

  2. 大表join大表

    • null值引起的数据倾斜。
      预先过滤null值,或者将null处理成非关联值的随机值。
    • 非null的热点值引起的倾斜
      将热点值和非热点值分开进行计算,最终合并到一起,
    • sql层面处理。
      1、 尽量避免distinct 用group by代替
      2、 尽可能的裁剪列和分区,或者进行预聚合,缩小数据集
      3、 关联key 的字段类型保持一致。
      4、distribute by ()sort by 代替partition by () order by() 因为。orderby是全局排序,只会起一个reduce任务,所以会很慢
    • 参数调节
      1、设置每个reduce可处理的数据量大小
      set hive.exec.reducers.bytes.per.reducer = 1000000000
      2、控制倾斜的阈值
      ihve 在运行的时候没有办法判断哪个key 会产生多大的倾斜,所以使用这个参数控制倾斜的阈值,如果超过这个值,新的值会发送给那些还没有达到的reduce, 一般可以设置成你处理的总记录数/reduce个数的2-4倍都可以接受.
      set hive.optimize.skewjoin = true;
      set hive.skewjoin.key = skew_key_threshold (default = 100000)
      
3.group by 倾斜

首先配置允许在map端进行聚合,然后同样调节倾斜的阈值。

hive.map.aggr=true  (默认true) 这个配置项代表是否在map端进行聚合,相当于Combiner

hive.groupby.skewindata=true(默认false)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: HiveSpark都是大数据领域中非常热门的开源框架,常用于分布式数据处理和分析,两者之间也有很多的协作和融合。而在Spark 3.0版本中,集成了一个Hive 3.0版本,使得开发者可以更加轻松地在Spark中使用Hive特性。 通过编译Hive Spark 3.0版本,我们可以得到一个支持Hadoop 3.2的Hive版本,并且集成了新版Spark的功能。这个版本不仅可以提升开发者的编程效率和数据处理速度,同时也对一些性能上的问题进行了修复和优化,提升了整体的稳定性和可靠性。 在使用编译好的Hive Spark 3.0版本时,我们可以通过类似于Hive CLI的方式来使用Hive,也可以通过Spark SQL的方式来使用。同时,还有许多针对Spark执行计划优化和查询优化的特性,使得我们可以更加高效地管理和分析数据。 总而言之,编译好的Hive Spark 3.0版本是一个强大又稳定的数据处理和分析工具,可以帮助开发者快速准确地处理大规模数据,提升业务价值和竞争力。 ### 回答2: Hive Spark 3.0是指在Apache Hive平台中,使用了Spark 3.0作为计算引擎进行编译的版本。 Apache Hive是一个基于Hadoop平台的数据仓库系统,旨在处理大数据集并提供一种简单的查询语言来查询和分析数据。 使用Spark作为计算引擎的好处在于,它能够利用内存计算技术快速处理数据,并且提供了许多高级的API和工具,可以进行复杂的数据分析和数据挖掘操作。同时,Spark还能够与其他大数据组件如Hadoop、HBase等无缝集成,因此是处理大数据的一个很好的选择。 通过编译好的Hive Spark 3.0,用户可以使用HiveQL查询语言进行数据分析,同时发挥Spark的高效性能来加速计算过程。此外,Hive Spark 3.0还支持流式数据处理和机器学习等高级特性,使数据处理更加灵活和多样化。 总之,Hive Spark 3.0编译好的版本集合了Apache HiveSpark这两个强大的工具,提供了一个高效且易于使用的平台来进行大数据分析和处理。 ### 回答3: Hive Spark 3.0编译好的意味着用户已经成功编译了Apache HiveSpark 3.0版本,使其可在Apache Hadoop集群上运行。Spark 3.0是Apache Spark的最新版本,拥有更多的改进和新功能。通过Hive Spark 3.0,用户可以利用Spark的高性能计算能力和Hive的数据仓库功能进行数据处理和分析。 Hive是一种基于Hadoop的数据仓库工具,Spark是一种基于内存计算引擎的分布式计算系统,两者结合可以更有效地处理大量数据。Hive Spark 3.0编译好的版本具有更好的性能和可扩展性,可以轻松地扩展到数百或数千个计算节点,并且可以快速处理PB级别的数据。 使用Hive Spark 3.0,用户可以使用SQL查询语言来处理数据,而无需大量的编程。它还提供了许多内置函数和聚合函数,可以轻松地进行数据操作和统计分析。此外,用户还可以使用可视化工具来创建和执行查询,以更直观地了解数据。 总之,Hive Spark 3.0编译好的版本为个人和企业用户提供了一种快速高效地处理海量数据的解决方案,为数据分析和业务决策提供了更有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值