`
qianjiangbing
  • 浏览: 91452 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

spark结合hive数据倾斜的几种解决方案

阅读更多

数据倾斜表现:

有的task执行很快,有的很慢或者内存溢出

 

定位数据倾斜的位置:

用client模式提交,观察log

 

解决方案

1、在hive etl时进行数据聚合,把key相同的数据聚合成一条数据,这样就可能不用shuffle了,从而解决数据倾斜。

当没办法对key进行聚合时也可以选择其它粒度聚合,比如数据中包含了几个城市,几个职业,可以选择合适的粒度聚合。

 

2、过滤导致倾斜的key

如果业务允许某几个key的数据可以丢弃,那么对于有两个key对应10万条数据,而其它key都是几十条,那么就可以过滤那两个key。

 

3、提高ruduce并行度从而使key更分散,从而有可能解决数据倾斜。

 

4、双重聚合法(针对非join,如groupByKey,reduceByKey)

1、在每个key前加上一个随机数和一个分隔符比如:"2_",那么key对应的数量就比较均匀了,然后做第一次reduce。

2、把第一次聚合得到的RDD的前缀(x_)去掉,再进行一次聚合即可。

 

5、reduce join转map join

就是把一个RDD的信息放到broadcast变量中,作为另一个RDD的map操作变量和它做配对操作(没有join操作,一个RDD进行mapToPair操作,另一个RDD变成广播list传入然后变map)

 

reduce join转换为map join,适合在什么样的情况下,可以来使用?

如果两个RDD要进行join,其中一个RDD是比较小的。一个RDD是100万数据,一个RDD是1万数据。(一个RDD是1亿数据,一个RDD是100万数据)

其中一个RDD必须是比较小的,broadcast出去那个小RDD的数据以后,就会在每个executor的block manager中都驻留一份。

要确保你的内存足够存放那个小RDD中的数据

这种方式下,根本不会发生shuffle操作,肯定也不会发生数据倾斜;从根本上杜绝了join操作可能导致的数据倾斜的问题;

对于join中有数据倾斜的情况,大家尽量第一时间先考虑这种方式,效果非常好;如果某个RDD比较小的情况下。

 

对于join这种操作,不光是考虑数据倾斜的问题;即使是没有数据倾斜问题,也完全可以优先考虑,用我们讲的这种高级的reduce join转map join的技术,

不要用普通的join,去通过shuffle,进行数据的join;完全可以通过简单的map,使用map join的方式,牺牲一点内存资源;在可行的情况下,优先这么使用。

不走shuffle,直接走map,是不是性能也会高很多?这是肯定的。

6、可以先从要join的一个RDD中抽取10%的数据并从中得到数量最多的那个key,然后从两个RDD中过滤出这个key的数据,得当两个RDD,rdd1和rdd2,然后对两个RDD中的key加随机

前缀,如果rdd2的数据只有一个,那么就用for多生成几个,然后俩个RDD做join,然后对那些非特殊的RDD进行join,然后union两个结果。

 

什么时候不适用呢?

如果一个RDD中,导致数据倾斜的key,特别多;那么此时,最好还是不要这样了;

 

7、扩容方式

就是把一个RDD扩大n倍(越大越好,只要内存足够),这个RDD的每个数据的key前都分别加x_,共n个,对于另一个RDD的每一个key前加随机前缀,

然后对两个RDD做join。

 

适用场合

两个RDD很大,且影响数据倾斜的数据有多个

 

局限

内存消耗

分享到:
评论

相关推荐

    项目实战——Spark将Hive表的数据写入ElasticSearch(Java版本)

    在本项目实战中,我们将探讨如何使用Java编程语言,结合Spark和Hive,将Hive中的数据高效地导入到ElasticSearch(ES)中,并利用ES的别名机制实现数据更新的平滑过渡。以下是对这个流程的详细解析: 1. **Hive数据...

    hive数据倾斜原因分析及解决方案.pdf

    Hive 数据倾斜原因分析及解决方案 Hive 数据倾斜是指在 Hive 执行过程中,某些 Reduce 任务处理的数据量远远高于平均值,导致整个 Job 的执行效率下降,影响着业务的正常运行。以下是 Hive 数据倾斜的原因和解决...

    简单的spark 读写hive以及mysql

    总之,Spark 通过灵活的数据处理能力与 Hive 和 MySQL 的结合,为大数据处理提供了强大的解决方案。通过正确地配置和使用这些组件,我们可以实现高效的数据读取、处理和存储,满足各种业务需求。

    spark-hive-2.11和spark-sql-以及spark-hadoop包另付下载地址

    Spark与Hive的集成,使得用户可以通过Spark SQL进行Hive数据的处理和分析,从而利用Spark的高性能来提升大数据查询的效率。 在标题"spark-hive-2.11和spark-sql-以及spark-hadoop包另付下载地址"中,我们关注的是...

    编译的spark-hive_2.11-2.3.0和 spark-hive-thriftserver_2.11-2.3.0.jar

    spark-hive_2.11-2.3.0 spark-hive-thriftserver_2.11-2.3.0.jar log4j-2.15.0.jar slf4j-api-1.7.7.jar slf4j-log4j12-1.7.25.jar curator-client-2.4.0.jar curator-framework-2.4.0.jar curator-recipes-2.4.0....

    spark-hive_2.11-2.1.4-SNAPSHOT.rar

    当这两者结合,Spark-Hive模块应运而生,为大数据处理提供了一种灵活且高效的解决方案。本文将详细探讨Spark-Hive 2.11-2.1.4-SNAPSHOT版本中的关键知识点。 首先,Spark-Hive模块是Spark对Hive的支持,它允许Spark...

    spark操作hive表源码

    在大数据处理领域,Spark和Hive是两个非常重要的工具。...同时,深入源码可以让我们更好地理解Spark如何与Hive集成,以及数据在两者之间流动的流程,这对于优化大数据处理任务和解决实际问题具有重要意义。

    spark-hive-thriftserver_2.11-2.1.3-SNAPSHOT-123456.jar

    spark-hive-thriftserver_2.11-2.1.spark-hive-thrift

    spark连接HIveDemo

    在大数据处理领域,Spark和Hive是两个非常重要的组件。Spark以其高效的计算性能和丰富的生态系统在实时处理和分析任务中占据重要地位,而Hive则作为数据仓库工具,提供了SQL接口进行大规模数据处理。本教程将详细...

    建立Hive和Hbase的映射关系,通过Spark将Hive表中数据导入ClickHouse

    接下来,Spark作为一个分布式计算框架,提供了一种灵活且高性能的方式来处理数据。在Hive和ClickHouse之间传输数据时,Spark可以作为一个中间层,利用其强大的数据处理能力,将Hive表的数据转换为适合ClickHouse存储...

    Hive千亿级数据倾斜解决方案.docx

    "Hive 千亿级数据倾斜解决方案" Hive 千亿级数据倾斜解决方案是解决大规模数据处理中常见的问题。数据倾斜是指在分布式系统中,某些节点或任务处理的数据远远多于其他节点或任务,这将导致系统性能下降、数据处理...

    大数据hive数据倾斜,hive-sql优化

    大数据Hive数据倾斜、Hive-SQL优化 在大数据处理中,Hive是一个非常重要的工具,然而在实际应用中,...Hive性能调优、数据模型设计、数据倾斜判断和解决方法等知识点都是解决大数据Hive数据倾斜和性能优化问题的关键。

    Hadoop+Spark+Hive+HBase+Oozie+Kafka+Flume+Flink+ES+Redash等详细安装部署

    这些组件协同工作,提供了数据存储、处理、调度、流处理、实时分析和可视化的一体化解决方案。 首先,我们来看Hadoop,这是一个分布式文件系统,核心由HDFS(Hadoop Distributed File System)和MapReduce组成。...

    Spark-数据倾斜的解决方案.pdf

    ### Spark 数据倾斜解决方案详解 #### 一、理解数据倾斜及其影响 **数据倾斜定义:** 数据倾斜是指在并行处理框架(例如Spark)中,数据集的某一部分数据量显著多于其他部分的情况。这种不均衡的数据分布会导致...

    Hadoop+Hbase+Spark+Hive搭建

    Hadoop+Hbase+Spark+Hive搭建指南 Hadoop是Apache开源的大数据处理框架,它提供了可靠的高效的数据存储和处理能力。...本文档旨在指导读者从零开始搭建Hadoop+Hbase+Spark+Hive环境,以便更好地进行大数据处理和分析。

    Spark数据倾斜解决方案1

    解决数据倾斜问题的方法主要包括以下几种策略: **解决方案一:聚合原数据** 1. 避免shuffle操作:如果可能,尽量在数据输入阶段就进行预处理,比如在Hive中按key分组聚合数据,将多条数据合并为单条,减少shuffle...

    spark替代Hive实现ETL作业

    1. **部署准备**:将Hive-site.xml文件移至Spark的配置目录中,确保Spark能够访问Hive元数据。注意检查Hive元数据版本,如果是通过Hive Server模式连接,则还需要注意服务器用户的权限问题。 2. **脚本转换**:基于...

    spark2.3.1-with-hive

    Spark 2.3.1 是一个重要的大数据处理框架,它提供了高效的分布式计算能力,而与 Hive 的集成使得 Spark 可以充分利用 Hive 的元数据、SQL 查询功能和存储系统,为大数据分析提供更丰富的选择。Hive 是一种基于 ...

    spark-hive-thriftserver_2.11-2.4.5.jar

    spark和hive结合依赖,如何使用请看我博客https://blog.csdn.net/z1987865446/article/details/109372818

    Atlas Spark SQL血缘分析,Hive Hook

    Apache Atlas 是一个元数据管理框架,它为大数据生态系统提供了一个全面的数据治理解决方案。它支持对数据的分类、标记、审计和血缘分析,确保数据质量和合规性。在本主题中,我们将深入探讨如何使用Apache Atlas...

Global site tag (gtag.js) - Google Analytics