Overview
Gobblin可以运行在不同的平台上。现在,Gobblin可以运行在standalone模式(单机)和Hadoop MapReduce模式(Hadoop集群),以及Yarn框架上。下面将要介绍Gobblin不同部署模式的架构。
Gobblin支持 Java 7 及以上版本,只能运行在Hadoop 2.x版本上。
Standalone架构
下图展示了Gobblin standalone的架构。在standalone模式下,Gobblin的实例运行在单个的JVM上,且任务由一个可配置的线程池来运行。standalone模式适用于小型的数据库。Gobblin的默认模式为standalone。
image.png
在standalone模式下,JobScheduler作为一个守护进程运行,使用JobLaunchers调度和运行作业。JobScheduler维护一个线程池,每个job运行都会启动从其中启动一个新的JobLauncher。Gobblin提供两种类型的JobLauchers,LocalJobLauncher和MRJobLauncher,分别用在单机和MapReduce上。
每个LocalJobLauncher启动并管理一些组件来执行Gobblin Job的task。具体来说,TaskExecutor负责在线程池中执行任务,其大小可以根据每个作业配置。LocalTaskStateTracker负责跟踪正在运行的任务的状态,特别是更新任务指标。LocalJobLauncher按照以下步骤启动并运行一个Gobblin作业:
1.启动TaskExecutor和LocalTaskStateTracker。
2.创建作业配置中指定的Source类的实例,并获取要执行的WorkUnits列表。
3.为列表中的每个WorkUnits创建任务,向LocalTaskStateTracker注册任务,并将任务提交给要运行的TaskExecutor。
4.等待所有提交的任务完成。
5.在完成所有提交的任务后,收集任务状态并将它们持久化到状态存储,并发布提取的数据。
Hadoop MapReduce架构
下图展示了Gobblin运行在MapReduce上的架构。如图所示,Gobblin作业被变成一个只有mapper的MapReduce任务。这里的基本思想是使用mappers作为容器来运行Gobblin任务。
image.png
在这种模式下,MRJobLauncher用于在Hadoop MapReduce上启动和运行Gobblin作业,步骤如下:
1.创建作业配置中指定的Source类的实例,并获取要执行的WorkUnits列表。
2.将每个WorkUnits序列化到HDFS上的文件中,稍后映射器将读取该文件。
3.创建一个列出存储序列化WorkUnits的文件路径的文件。
4.创建和配置一个只使用mapper的Hadoop MapReduce作业,该作业将步骤3中创建的文件作为输入。
5.启动MapReduce作业以在选择的集群上运行,并等待它完成。
6.完成MapReduce作业后,收集任务状态并将它们持久化到状态存储区,并发布提取的数据。
Gobblin MapReduce作业中的mapper运行一个或多个任务,具体取决于要执行的workunit数量和作业配置中指定的(可选的)最大mapper数量。如果作业配置中没有指定mapper的最大数量,则每个workunit对应一个mapper执行的任务,每个mapper只运行一个任务。否则,如果指定了最大mapper数量,且workunit数量超过允许的最大mapper数量,则每个mapper可以处理多个workunit。还有一种名为MultiWorkUnit的特殊类型的workunit,它将多个要在单个mapper中的批处理中一起执行的workunit分组在一起。
Gobblin MapReduce作业中的mapper按照以下步骤运行分配给它的任务:
1.启动TaskExecutor,负责在可配置大小的线程池中执行任务;启动MRTaskStateTracker,负责跟踪mapper中正在运行的任务状态。
2.读取下一个输入记录,该记录是存储序列化workunit的文件的路径。
3.反序列化workunit并将其添加到要执行的workunit列表中。如果输入是一个MultiWorkUnit,那么它包装的workunit将全部添加到列表中。重复步骤2和步骤3,直到所有分配的workunit都被反序列化并添加到列表中。
4.对于要执行的任务列表中的每个workunit,为workunit创建一个任务,向MRTaskStateTracker注册任务,并将任务提交给要运行的TaskExecutor。
5.等待所有提交的任务完成。
6.在完成所有提交的任务后,将每个任务的状态写到一个文件中,当收集任务状态时,MRJobLauncher将读取该文件。
7.返回步骤2,如果可用,读取下一个输入记录。
作者:阿猫阿狗Hakuna
链接:https://www.jianshu.com/p/63ab14592bbd