spark需要2秒才能数到10?

c9x0cxw0  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(321)

我们只是在试用spark,而且速度很慢。为了说明我的意思,我在下面举了一个例子——spark花了将近2秒钟的时间从hdfs加载一个包含10行的文本文件,并计算行数。我的问题:
这是预期的吗?你的站台要多长时间?
有什么想法吗?为什么?目前我在两节点hadoop集群上使用spark1.3(都是8核,64gram)。我对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

启动Pypark(大约需要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秒。即使配置很糟糕,我也不会期望它花那么长时间。

kyks70gy

kyks70gy1#

它与集群配置无关。这是由于懒惰的评估。
spark中有两种类型的API: Transformations & Actions 从上面的文档链接看一下。
RDD支持两种类型的操作:转换(从现有数据集创建新数据集)和操作(在数据集上运行计算后将值返回到驱动程序)。
例如,map是一种转换,它通过一个函数传递每个dataset元素,并返回一个表示结果的新rdd。另一方面,reduce是一个操作,它使用一些函数聚合rdd的所有元素,并将最终结果返回给驱动程序(尽管还有一个并行reducebykey返回分布式数据集)。
spark中的所有转换都是懒惰的,因为它们不会立即计算结果。相反,他们只记得应用于一些基本数据集(例如文件)的转换。仅当操作需要将结果返回到驱动程序时,才计算转换。 sc.textFile('numbers.txt').count() 是一个动作操作 count() 打电话。
由于这个原因,即使你第一次花了2秒,第二次却只花了几分之一秒。

byqmnocz

byqmnocz2#

这绝对是太慢(在我的本地机器0.3秒),即使是坏Spark配置(而且通常默认Spark配置适用于它的大多数正常使用)。也许您应该仔细检查您的hdfs配置或网络相关配置。

相关问题