【问题标题】:Spark taking 2 seconds to count to 10 ...?Spark 需要 2 秒才能数到 10 ...?
【发布时间】:2018-06-13 21:23:21
【问题描述】:

我们只是在试用 Spark,结果证明它真的很慢。为了说明我的意思,我在下面给出了一个示例 - Spark 需要将近 2 秒的时间从 HDFS 加载一个包含 10 行的文本文件,并计算行数。我的问题:

  1. 这是预期的吗?您的平台需要多长时间?
  2. 任何可能的想法为什么?目前我在一个两节点 Hadoop 集群(都是 8 个内核,64G RAM)上使用 Spark 1.3。我对 Hadoop 和 Spark 非常熟悉,所以除了 Ambari/HDP 默认值之外,我几乎没有做任何配置。

最初我在测试一亿行 - Spark 需要大约 10 分钟来简单地计算它。

示例:

创建 10 个数字的文本文件,并将其加载到 hadoop:

for i in {1..10}; do echo $1 >> numbers.txt; done
hadoop fs -put numbers.txt numbers.txt

启动 pyspark(大约需要 20 秒...):

pyspark --master yarn-client --executor-memory 4G --executor-cores 1 --driver-memory 4G --conf spark.python.worker.memory=4G

从 HDFS 加载文件并计数:

sc.textFile('numbers.txt').count()

根据反馈,Spark 大约需要 1.6 秒才能完成此操作。即使配置很糟糕,我也不认为需要那么长时间。

【问题讨论】:

  • 第二次运行 count 命令时还会出现这种情况吗? Spark 需要几秒钟来完成所有的初始化和类加载。
  • 第二轮(
  • 尝试创建 numbers2.txt? :)

标签: hadoop apache-spark apache-spark-1.3


【解决方案1】:

这绝对太慢了(在我的本地机器上 0.3 秒),即使对于错误的 spark 配置(而且通常默认 spark 配置适用于它的大部分正常使用)。也许您应该仔细检查您的 HDFS 配置或网络相关配置。

【讨论】:

    【解决方案2】:

    与集群配置无关。这是由于懒惰的评估。

    Spark 中有两种类型的 API:Transformations & Actions

    从上面的文档链接中查看它。

    RDD 支持两种类型的操作:transformations,从现有数据集创建一个新的数据集,以及 actions,它在运行一个之后返回一个值给驱动程序。数据集上的计算。

    例如,map 是一种转换,它通过一个函数将每个数据集元素传递并返回一个表示结果的新 RDD。另一方面,reduce 是一个 action,它使用某个函数聚合 RDD 的所有元素,并将最终结果返回给驱动程序(尽管也有一个并行的 reduceByKey,它返回一个分布式数据集)。

    Spark 中的所有转换都是惰性的,因为它们不会立即计算结果。相反,他们只记得应用于某些基础数据集(例如文件)的转换。仅当操作需要将结果返回给驱动程序时才会计算转换。

    sc.textFile('numbers.txt').count() 是一个带有count() 调用的动作操作。

    由于这个原因,即使您第一次需要 2 秒,第二次也只需要几分之一秒。

    【讨论】:

    • 真实但不相关
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多