我们只是试试Spark,而且它证明非常慢。为了表明我的意思,我在下面给出了一个例子 - 它花了将近2秒的时间来加载一个文本文件,其中有10行来自HDFS,并计算行数。我的问题:
最初我测试了一亿行--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 :(得分: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秒钟,第二次花了几分钟。