Spark 开发工程师的批处理任务
在集群上转换大量数据的按计划任务,编写时确保即便某个节点在运行到一半时失效,也能干净地恢复。
当一项数据任务真正超出了单台机器或单个脚本的承受能力,需要改为在集群上运行时,企业通常会开始在迪拜招聘 Spark 开发工程师。由 Apache 软件基金会维护的 Apache Spark,在自己的文档中把自己描述为一个用于大规模数据处理的统一分析引擎,在分布式执行引擎之上,提供 Python、Scala、Java 和 R 的高级 API。
Spark 与许多同类方案相比,最大的特点在于它的覆盖范围:同一个引擎通过 Spark SQL 处理类 SQL 查询,通过 Structured Streaming 处理持续数据流,通过 MLlib 处理机器学习管道,全部基于同一套底层执行模型。这种覆盖范围确实很有用,但也意味着 Spark 开发工程师会走向专精,擅长流式管道的人不一定天然擅长调优批处理任务,两者所依赖的经验有所重叠,但并不完全相同。
一位 Spark 开发工程师还需要对任务实际运行在哪里有明确的判断,因为 Spark 本身只是引擎:独立运行、运行在 YARN 上、运行在 Kubernetes 上,或运行在某个托管平台内。在迪拜招聘 Spark 开发工程师之前,请明确您的运行环境以及工作负载的类型,是批处理还是流式处理,因为这比只是熟悉 Spark 这个名字,更能决定哪位候选人才是真正合适的人选。
Spark 开发工程师会搭建什么
真实的任务,而不是一份 Spark 功能的通用清单。
在集群上转换大量数据的按计划任务,编写时确保即便某个节点在运行到一半时失效,也能干净地恢复。
使用 Spark 较新的流式 API 对事件流进行持续处理,并对管道落后时应如何应对有明确的方案。
对大型数据集进行的类 SQL 查询和转换,往往是原始数据与报表工具可用内容之间的桥梁。
重写任务以减少代价高昂的 shuffle、修复数据倾斜的分区,并在同一个集群上缩短运行时间和降低成本。
为需要跨集群而不是单台机器运行机器学习工作的团队,提供大规模的特征准备和模型训练。
把 Spark 任务接入带有依赖关系和重试机制的更大计划中,让故障被及时发现,而不是几天后才在下游浮现。
重要技能
对一个正在运行的集群的判断力,而不只是对 API 的熟悉程度。
| 技能或工具 | 良好水平的表现 | 为什么重要 |
|---|---|---|
| 阅读执行计划 | 在改动任何代码之前,先打开任务的执行计划找出真正的瓶颈,例如一次 shuffle 或一个数据倾斜的分区 | 靠猜测来做性能修复,会浪费集群时间,往往还会让情况变得更糟 |
| 分区策略 | 针对数据和任务有意识地选择分区数量和分区键,而不是沿用未经审视的默认值 | 糟糕的分区,是导致 Spark 任务运行缓慢、代价高昂的常见原因 |
| 批处理与流处理的判断 | 只有在工作负载确实需要持续处理时才推荐 Structured Streaming,而不是默认使用 | 流式管道的运维和调试难度,比同等的批处理任务要高 |
| 语言熟练度 | 在 PySpark 或 Scala 中真正高效,与您现有代码库所使用的语言相匹配 | 在代码库中无理由地混用语言,会增加日后的维护成本 |
| 资源意识 | 理解部署环境,YARN、Kubernetes 或托管平台,如何影响任务的运行表现 | 同一段 Spark 代码,在不同的集群运行环境下可能表现完全不同 |
Apache 软件基金会自己的 Spark 文档 把 Spark SQL、Structured Streaming、MLlib 和 GraphX 列为该平台的主要内置组件,一位实力过硬的候选人应当能够清楚说明您的项目实际需要哪几项,而不是默认全部都要用上。
合作方式
如果您的集群已经承载生产工作负载,新任务、调优工作和修复的队列几乎从未清空过,适合安排一位专职 Spark 开发工程师。限定搭建适合一项单一、界定清晰的工作,例如把一个批处理任务迁移到 Spark 上,或搭建一条流式管道,在交付并测试完成后完成明确移交。当您希望把一位 Spark 开发工程师长期纳入自己的编制内时,招聘支持是合适的路线,由我们代为完成寻访、筛选和技术评估。当一个 Spark 平台已经存在,您希望在进一步投入之前,独立审视它的性能、成本,或一个始终运行不稳定的具体任务时,咨询服务很有帮助。提前把情况说清楚,会让在迪拜招聘 Spark 开发工程师这件事,更容易落在真正合适的条件上。
评估候选人
围绕真实集群行为、而不是语法记忆展开的核查方式。
您可以自己使用以下问题,也可以在通过招聘支持为团队寻找一位 Spark 开发工程师时,请我们把它们纳入技术评估阶段。
有真实经验的候选人,会描述他们发现的一个具体瓶颈,例如一次 shuffle 或数据倾斜,以及他们具体做了哪些改动。
给他们一份来自缓慢任务的执行计划,请他们说明时间花在了哪里,以及原因。
有实力的候选人能说出一些用更简单的工具反而更合适的场景,而不是遇到什么都默认用 Spark。
询问在他们的管道中,当消费端落后时会发生什么,这能揭示他们的流处理经验是真实的还是纸上谈兵。
他们是否在 YARN、Kubernetes 或托管平台上运行过 Spark,以及这对他们的做法带来了哪些改变。
认证
Apache 软件基金会本身不运营任何认证,但有一项厂商认证在 Spark 领域被广泛认可。
与 Hadoop 一样,Apache Spark 作为一个厂商中立的开源项目维护,Apache 软件基金会并不运营自己的认证项目。对任何宣称是官方 Apache Spark 证书的凭证,应保持谨慎。
与商业化 Spark 工具关联最紧密的公司 Databricks,通过其自己的 认证项目 提供 Apache Spark Developer Associate 认证,可以通过 credentials.databricks.com 核实。评估一位 Spark 开发工程师时,即便是在 Databricks 平台之外,这也是一个合理、可核实的参考信号。
阿联酋相关事项
在 Spark 任务接触真实的客户或员工数据之前应当确定的事项。
阿联酋关于个人数据保护的联邦法律《2021 年第 45 号联邦法令》,适用于与阿联酋相关的控制者或处理者所进行的处理,这也包括 Spark 任务在处理过程中临时写出的中间数据,而不仅仅是最终的表格。
Spark 是运行在本地、某个特定云区域,还是托管平台上,会影响任务处理期间数据实际存放的物理位置,请刻意加以确认,而不要想当然地认为它会跟随企业其他部分已有的运行方式,并在为搭建管道而在迪拜招聘 Spark 开发工程师之前提出这个问题。
如果 Spark 开发工程师不完全是合适的角色,请返回 数据 类别,或更广泛的 迪拜招聘开发人员 板块。如果您的集群仍通过经典的 MapReduce 而不是 Spark 来运行核心任务,我们的 Hadoop 开发工程师 页面涵盖这部分内容;如果工作是在围绕 Spark 搭建的托管湖仓内进行,我们的 Databricks 工程师 页面是更贴切的选择。对于分布式数据基础设施的整体视角,我们的 大数据工程师 页面提供更宽的视野;如果机器学习一侧才是真正的优先事项,请接着查看我们的 AI 与机器学习 类别。
直接解答
Spark 本身只是处理引擎,可以运行在多种环境中:独立集群、依托 Hadoop 的 YARN、Kubernetes,或者 Databricks 之类的托管平台,或云服务商自己的 Spark 服务。请告诉我们您的任务运行在哪里,或应该运行在哪里,因为运行环境对开发工程师日常工作的影响,几乎和 Spark 本身一样大。
只有当一个任务确实无法在单台机器上舒适运行,或需要处理持续的数据流而不是单次批处理时,Spark 才能发挥价值。对于规模更小、更简单的任务,一段普通脚本或一次标准数据库查询通常更简单、更划算,一位优秀的 Spark 开发工程师会主动这样说,而不是默认就选用 Spark。
可以。Spark 同时支持 PySpark 和 Scala,大多数 Spark 开发工程师会更偏向其中一种,不过很多人对两者都能胜任。请告诉我们您现有代码库或团队更偏好哪种语言,我们会据此匹配。
很多可以,因为 Databricks 本身就是围绕 Spark 搭建的,但平台层面的内容,例如 notebook、集群管理、Unity Catalog,需要在 Spark 之外再补充技能。如果您的工作具体是在 Databricks 上,而不是独立的 Spark 集群,我们的 Databricks 工程师页面直接涵盖这个角色。
一位 Spark 开发工程师应当能够读懂任务的执行计划,并指出时间实际花在哪里,例如一次代价高昂的 shuffle 或一个数据倾斜的分区,而不是只说一句任务很慢。我们在下方页面涵盖了这方面的具体核查方式。
资料来源
书面固定价格
已收到,我们正在为您撰写报价。
工作时间内您将在 45 分钟内收到。请查收确认邮件。