代码之家  ›  专栏  ›  技术社区  ›  WomenWhoCode

在EMR上运行Spark应用程序速度较慢

  •  1
  • WomenWhoCode  · 技术社区  · 7 年前

    我是Spark和MApReduce的新手,在Elastic Map Reduce(EMR)AWS集群上运行Spark时遇到问题。 问题是在EMR上运行要花费我很多时间。

    例如,我有数百万的记录。csv文件,我在JavaRDD中读取和转换。对于Spark,在此数据集上计算简单的mapToDouble()和sum()函数需要104.99秒。

    然而,当我在没有Spark的情况下使用Java8和转换进行相同的计算时。要列出csv文件,只需0.5秒。(见下面的代码)

    这是火花代码(104.99秒):

        private double getTotalUnits (JavaRDD<DataObject> dataCollection)
    {
        if (dataCollection.count() > 0) 
        {
            return dataCollection
                    .mapToDouble(data -> data.getQuantity())
                    .sum();
        }
        else
        {
            return 0.0;
        }
    }
    

    这是相同的Java代码,没有使用spark(0.5秒)

        private double getTotalOps(List<DataObject> dataCollection)
    {
        if (dataCollection.size() > 0)
        {
            return dataCollection
                    .stream()
                    .mapToDouble(data -> data.getPrice() * data.getQuantity())
                    .sum();
        }
        else
        {
            return 0.0;
        }
    
    }
    

    我是EMR和Spark的新手,所以我不知道该怎么解决这个问题?

    更新时间: 这是函数的单个示例。我的全部任务是计算不同的统计数据(总和、平均值、中值),并对6 GB的数据执行不同的转换。这就是我决定使用Spark的原因。 整个应用程序的数据容量为6gb,使用常规Java运行大约需要3分钟,使用Spark和MapReduce运行18分钟

    1 回复  |  直到 7 年前
        1
  •  4
  •   Gyanendra Dwivedi    7 年前

    我想你是在拿桔子和苹果作比较。 您必须了解何时使用BigData和普通Java程序?

    大数据并不是为了处理小规模的数据,Bigdata框架需要在分布式环境中执行多个管理任务,这是一项巨大的开销。对于小数据,实际处理时间可能与hadoop平台中管理整个过程所需的时间相比非常小。因此,一个独立的程序比BigData工具(如 mapreduce ,则, spark

    如果希望看到差异,请确保通过上述两个程序处理至少1 TB的数据,并比较处理相同数据所需的时间。

    除此之外,BigData还在处理过程中引入了容错功能。想想看,如果JVM崩溃(比如OutOfMEmoryError)正常的Java程序执行,会发生什么?在普通java程序中,整个过程都会崩溃。在Bigdata平台中,该框架确保处理不会停止,并执行故障恢复/重试过程。这使得它具有容错性,并且不会因为崩溃而失去对数据其他部分所做的工作。

    下表大致解释了您应该何时切换到大数据。

    enter image description here