TALEND WEBINAR : March 27th, 2018 | Step-by-Step to Enterprise Data Integration

Talend 和 Apache Spark:技术入门指南

Talend 和 Apache Spark:技术入门指南

  • Petros Nomikos
    I have 3 years of experience with installation, configuration, and troubleshooting of Big Data platforms such as Cloudera, MapR, and HortonWorks. I joined Talend in 2014, and prior to Talend I held positions as manager of technical support, and project manager for data warehouse implementations. In my current role, I assist companies in understanding how to implement Talend in their Big Data Ecosystem.
  • September 15, 2017

加入 Talend 客户成功架构师团队前,我曾在支持工程师岗位上任职多年,那时候客户经常问及 Talend 的 Apache Spark 相关功能。谈到 Spark,我们总是会首先想到用来提交 Spark 作业的 Spark submit(Spark 提交)命令。由此一来,问题自然而然转到 Talend Spark 作业如何与常规 Spark submit 相当。在本篇博客中,我们将介绍所提供的不同 Apache Spark 模式,Talend 使用的模式,以及 Talend 如何与 Apache Spark 协同工作。

Apache Spark 作业简介

Apache Spark有两种不同的作业类型可供您提交,分别是 Spark Batch(Spark 批处理)和 Spark Streaming(Spark 流式处理)。Spark Batch 在批处理模式下运行,其中数据集按时间段收集,然后发送到 Spark 引擎进行处理。

而 Spark Streaming 则在流式处理模式下运行,其中数据逐项发送到 Spark 引擎,然后实时进行处理。Talend 支持这两种类型的作业,能够帮您针对每一类型创建 Spark 作业。Talend Studio 为您提供两个选项,一个是“大数据批处理”,用于创建 Spark Batch 作业,另一个是“大数据流式处理”,用于创建 Spark Streaming 作业,具体取决于您使用的许可证。

深入了解 Talend 和 Apache Spark

在继续探讨之前,我想介绍几个在本篇博文剩余部分将会用到的主要概念:

  • Spark DriverSpark 驱动器):用于将您的应用程序发送至 Spark Master(Spark 主机),创建并运行您的 Spark Context(Spark 上下文)
  • Spark Master用于按 Spark Driver 所定义从 YARN 请求资源,以及查找即将运行您的作业的主机
  • Spark ExecutorSpark 执行程序):在工作线程节点上开启的进程,用于在内存或磁盘中运行您的作业提交

首先,我们先来了解下使用 Spark submit 或 Talend 运行 Spark 作业是怎么一回事。Spark 作业中必须有一个“驱动器”,用于设置和协调您的 Spark 作业。在这种情况下,Spark driver 将设置您的作业即将使用的配置,例如要连接的 Spark master,或者要为您的 Spark executor 分配多少内存。因此,Talend 可以完成与 Spark submit 同等的操作,前提是必须有一个 Spark driver,用于设置和协调您的 Spark 作业。

接下来,当您从 Hadoop 集群内部执行 Spark submit 时,将从您的集群配置文件中检索一些配置信息。鉴于 Talend Studio 并非总是位于 Hadoop 集群上,我们需要在我们的 Studio 作业中提供此信息,以便 Studio 知道它可以使用的设置。

关于定义 Spark 作业中涉及的数据转换,在 Talend 中,数据转换发生在作业编译阶段,与使用 Spark submit 程序时执行的操作完全相同。与 Spark submit 类似,Talend 还可以作为上文定义的“驱动器”启动作业,虽然作业并非在驱动器中运行,而是在集群级别的 Spark executor 上运行。启动作业后,Talend 通过监听 Hadoop 集群级别发生的事件来监控作业,显示作业进展如何,这点也与使用 Spark submit 相差无几。

若您使用 Spark submit 或 Talend 作业来将作业提交至 Spark,将有三种模式可供选择,具体视您的 Hadoop 集群配置而定。下面我们来介绍下这 3 种不同的模式(参见 Spark 文档 http://spark.apache.org/docs/latest/cluster-overview.html):

1. 独立:在此模式中,Spark Driver 将作业提交至 Spark master,然后由集群上运行的 Spark executor 处理作业

2. YARN 客户端模式:在此模式中,分配到每一作业的 Spark 工作线程守护程序在 YARN 框架中启动和停止。上述 Spark driver 在您运行 Talend 作业的同一系统上运行。

3.YARN 集群模式:使用 Spark master 并且 Spark executor 在 YARN 框架内运行时,随作业启动和停止。在该情况中,Spark driver 也在 Hadoop 集群级别的 YARN 内运行。

以上是我们对 Spark 所提供模式的定义,接下来我们说说 Talend 提供哪些模式。以下是 Talend 支持的不同模式:

1.本地:如选择本地模式,作业将在本地启动 Spark 框架以运行作业。您的本地机器将充当 Spark master,以及 Spark executor,来执行数据转换。

2. 独立:在此模式下,亦如上文所定义,Talend 将连接至 Hadoop 集群中定义的 Spark Master,然后运行作业。

3.YARN 客户端模式:同样如文所定义,Talend Studio 将运行 Spark“驱动器”,从您的作业启动的位置协调作业,然后将任务流程发送至 YARN 框架以供执行和分配资源。诸如 Hortonworks、Cloudera、MapR、Amazon EMR 等 Hadoop 发行版可选择此模式。

4. YARN 集群:此模式目前仅支持 Talend 中的 HDInsight 和 Cloudera Altus。在此模式中,如我们上面所述,Talend 将在 Hadoop 集群级别的 YARN 内运行 Spark“驱动器”。

关于 Talend 和 Apache Spark 的三大问题解答:

  • Talend 是否会在同一时刻将作业需要的所有工具库和文件全部提交至 Spark Master,或者是某些信息仍在 Studio 上运行?

回答: 不一定在同一时刻将所有工具库发送至 Spark Master。执行器可能回调 Spark “驱动器”,在该时间点发送必要的工具库。在这种情况下,在处理作业时“驱动器”仍保持运行,以便等待作业完成,然后再提供并返回作业的状态。但是,与在任何 Spark 作业中一样,一些处理可能发生在“驱动器”端。比方说,如果您的作业中有一个 tLogRow,则可能会发生此种情况,因为 tLogRow 需要从集群中收集所有信息,而后打印到控制台;又或者如果您正在使用 tCacheIn 和 tCacheOut 组件,也可能会发生此种情况,因为“驱动器”将存储有关文件在内存中位置的元数据信息。在这种情况下,Talend Studio 与运行 Spark submit 别无二致。

  • 如果我想在 Studio 或作业服务器本地写入一个文件,而不是在 HDFS 中,同时不提供存储配置,那么文件能写入吗?

回答: 需要向作业提供存储配置。出于作业稳定性考虑建议您这样做,而且最好整个作业使用一个存储配置。不可能使用针对 2 个不同集群或两种不同身份验证方法的两个 HDFS 存储位置。虽然说以 HDFS 和 S3 为例,这可能奏效。作业无法写入到本地文件系统中的原因是 Spark 工作线程无法洞察“驱动器”的本地文件系统,这也是为何 Spark“驱动器”需要打开服务器来将工具库发送到集群。如果您确实要这样,最好的办法是在 HDFS 中写入一个临时文件,然后创建一个 DI 作业,使用 tHDFSGet 将该临时文件转回到本地机器中。这一操作与 spark submit 也没什么分别。

  • 为何 Spark Master Web 界面中的“环境”选项卡会定向至 Studio 的 IP 地址?

回答:这一选项卡应始终定向至 Spark Driver 的 IP 地址。如果您正在集群上运行 spark submit,那么您将不会注意到重定向,但如果您这样做了,您就会注意到。在这点上,Talend Studio 跟 Spark submit 没有区别。

希望上面的这些信息,能向您清楚地阐明在 Talend 上运行作业与执行 Spark submit 并无不同。借助 Talend,您可以轻松利用 Spark 编写代码,编写 Spark Batch 和 Spark Streaming 作业,并使用您设计的 Spark batch 和 Spark Streaming 作业。期待您使用 Talend 编写您自己的 Spark 作业,体验一下相比 Hadoop 集群或独立 Apache Spark,Talend 如何帮您更加轻松地运行作业。

 

Most Downloaded Resources

Browse our most popular resources - You can never just have one.

Join The Conversation

0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *