火花需要2秒才能计数到10.



我们只是在试用Spark,但它确实很慢。为了说明我的意思,我在下面举了一个例子——Spark用了将近2秒的时间从HDFS加载到一个有10行的文本文件中,并计算行数。我的问题:

  1. 这是意料之中的事吗?你的站台需要多长时间
  2. 有什么可能的想法吗?为什么?目前,我在一个双节点Hadoop集群上使用Spark 1.3(均为8核,64G RAM)。当谈到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秒。即使配置很糟糕,我也没想到会花那么长时间。

即使对于糟糕的火花配置(而且通常默认火花配置适用于大多数正常使用),这也太慢了(在我的本地机器上为0.3秒)。也许您应该仔细检查您的HDFS配置或网络相关配置。

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

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

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

RDD支持两种类型的操作:转换操作,前者从现有数据集创建新的数据集,后者在数据集上运行计算后向驱动程序返回值。

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

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

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

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

相关内容

  • 没有找到相关文章