什么是Spark Job?

cha*_*uru 31 batch-processing job-scheduling apache-spark

我已经完成了spark安装并执行了几个设置master和worker节点的测试用例.也就是说,我对Spark上下文(而不是SparkContext)中的作业意味着什么非常混乱.我有以下问题

  • 来自Driver程序的工作有多么不同.
  • 应用程序本身是Driver程序的一部分?
  • Spark提交方式是一份工作吗?

我阅读了Spark文档,但这件事对我来说还不清楚.

话虽如此,我的实现是编写火花作业{programmatically},这将火花提交.

如果可能,请帮助一些例子.这将非常有帮助.

注意:请不要发布spark链接,因为我已经尝试过了.虽然这些问题听起来很幼稚,但我仍需要更清晰的理解.

Dan*_*don 42

嗯,术语总是很难,因为它取决于上下文.在许多情况下,您可以习惯于"将作业提交到群集",其中火花就是提交驱动程序.

也就是说,Spark直接从词汇表中对"工作"有自己的定义:

作业一种并行计算,由多个任务组成,这些任务是为了响应Spark动作而产生的(例如,保存,收集); 你会在驱动程序的日志中看到这个术语.

所以我在这个背景下,假设您需要执行以下操作:

  1. 将包含人名和地址的文件加载到RDD1中
  2. 将包含人名和手机的文件加载到RDD2中
  3. 按名称加入RDD1和RDD2,得到RDD3
  4. 在RDD3上映射,为每个人获得一个漂亮的HTML演示卡作为RDD4
  5. 将RDD4保存到文件.
  6. 映射RDD1以从地址中提取zipcodes以获取RDD5
  7. 在RDD5上聚合以获得每个邮政编码上有多少人的计数RDD6
  8. 收集RDD6并将这些统计信息打印到标准输出.

所以,

  1. 驱动器程序是这个代码整片,运行的所有8个步骤.
  2. 在第5步生成整个HTML卡是一项工作(因为我们使用的是保存操作,而不是转换).与步骤8中的收集相同
  3. 其他步骤将分为几个阶段,每个工作都是一系列阶段的结果.对于简单的事情,作业可以有一个阶段,但是需要重新分区数据(例如,步骤3中的连接)或任何破坏数据局部性的事物通常会导致出现更多阶段.您可以将阶段视为产生中间结果的计算,实际上可以持久化.例如,我们可以持久化RDD1,因为我们将不止一次地使用它,避免重新计算.
  4. 以上所有3基本上都讨论了如何破解给定算法的逻辑.相反,任务是一个特定的数据片段,它将在给定的执行器上经过给定的阶段.

希望它能让事情更清晰;-)

  • 嗯,这在很大程度上取决于您拥有的基础设施类型(例如,您使用Spark on Yarn吗?)不是我的强项,但原则上,我从Bash脚本启动所有驱动程序(为了记住参数,创建输出文件夹等).任何能够运行控制台命令的正常调度工具都应该可以工作.如果每个作业都使用群集中的所有资源,那么您只需提交程序,他们就会等待释放资源. (2认同)
  • @akashpatel 不,不是。作业意味着 Spark 操作(例如保存、收集)以及需要运行以评估该操作的任何任务 (2认同)