hadoop—spark是否可以读取hdfs数据并同时进行一些计算?

ecbunoof  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(484)

例如,我在spark平台上运行了以下工作计数应用程序:

val textFile = sc.textFile("hdfs://...")
val counts = textFile.flatMap(line => line.split(" "))
             .map(word => (word, 1))
             .reduceByKey(_ + _)
counts.saveAsTextFile("hdfs://...")

假设有一个worker需要处理1gb数据,那么这个worker是否可能在获取所有1gb数据之前开始进行一些计算(比如flatmap)?

wmtdaxz3

wmtdaxz31#

spark缓慢地评估rdd操作(换句话说,在请求结果之前),因此在调用诸如 saveAsTextFile .

inkz8wg9

inkz8wg92#

一般来说,可以,但你的问题有点宽泛。所以我不知道你是否在为一个特定的案例寻找答案。
在给定的spark应用程序(sparkcontext示例)中,如果多个并行作业是从不同的线程提交的,那么它们可以同时运行。我所说的“job”是指一个spark操作(例如save、collect)和任何需要运行以评估该操作的任务。spark的调度器是完全线程安全的,并且支持这个用例来启用服务于多个请求的应用程序(例如,针对多个用户的查询)。
有时您需要在不同的用户之间共享资源。
默认情况下,spark的调度程序以fifo方式运行作业。每个作业被划分为“阶段”,第一个作业在其阶段有任务要启动时对所有可用资源具有优先级,然后第二个作业具有优先级,依此类推。如果队列头部的作业不需要使用整个集群,则稍后的作业可以立即开始运行,但如果队列头部的作业很大,那么以后的工作可能会大大推迟。
通常,一切都取决于您使用的调度程序和目的。
参考官方文档>作业调度>应用程序内的调度。
那么回到您的具体问题,假设有一个工人需要处理1gb的数据,那么这个工人是否有可能在获取所有1gb的数据之前开始做一些计算(比如flatmap)?​
是的,会的。

相关问题