火花需要2秒才算到10 ......?

时间:2015-11-24 05:50:17

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

我们只是试试Spark,而且它证明非常慢。为了表明我的意思,我在下面给出了一个例子 - 它花了将近2秒的时间来加载一个文本文件,其中有10行来自HDFS,并计算行数。我的问题:

  1. 这是预期的吗?你的平台需要多长时间?
  2. 任何可能的想法为什么?目前我在双节点Hadoop集群(8核,64G RAM)上使用Spark 1.3。在Hadoop和Spark方面我很绿,所以除了Ambari / HDP默认设置外,我做的配置都很少。
  3. 最初我测试了一亿行--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秒才能完成。即使配置很糟糕,我也不会指望这么长时间。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

从上面的文档链接看一下。

  

RDD支持两种类型的操作:转换,用于从现有数据集创建新数据集; 操作,在运行a后,将值返回给驱动程序计算数据集。

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

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

sc.textFile('numbers.txt').count()是一个count()来电的操作操作。

由于这个原因,即使你第一次花了2秒钟,第二次花了几分钟。