返回 登录
0

以源码为基础,Myriad使用初探:构建、启动和使用过程

Myriad是由MapR主导并且由eBay、Mesosphere参与的项目,关于Myriad项目的起源与架构在部分文章之中都有了阐述,目前还没有分享Myriad相关实际研究成果的文章。本文将会展示Linker Networks最近对于Myriad项目的研究,并结合实际研究阐述Myriad项目的具体工作原理。首先本文会简单介绍一下Myriad项目的研究背景与意义;之后介绍Myriad的构建、启动和使用过程;最后将以源码为基础解释Myriad的启动和使用原理。

1研究背景与意义

1.1 Yarn

YARN(Yet Another Resource Negotiator)是一种通用的资源管理系统,旨在克服MRv1的缺陷为了更加大规模的数据处理而诞生。它包含四个主要的组件:

  1. ResourceManager,管理全局资源
  2. NodeManager,作为ResourceManager的代理管理节点资源
  3. ApplicationMaster代替MRv1里的JobTracker
  4. Container作为资源载体在NodeManager的监控之中执行ApplicationMaster的任务

1.2 Mesos

Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。它包含四个主要的组件:

  1. Mesos-master:管理Framework与Slave,分配和管理Slave的资源给Framework
  2. Mesos-slave:管理Task,给Executor分配资源
  3. Framework:利用MesosSchedulerDiver接入到Mesos的框架
  4. Executor:执行器,启动计算框架中的task。

1.3与Mesos的不同

Mesos与Yarn的不同主要表现在:

  1. scheduler:mesos让framework决定mesos提供的这个资源是否适合该job,从而接受或者拒绝这个资源。而对于yarn来说,决定权在于yarn,所以从scaling的角度来说,mesos更scalable。
  2. 其次yarn只为hadoop jobs提供了一个static partitioning。而mesos的设计目标是为各个框架(hadoop、spark、web services等)提供dynamical partitioning,让各个集群框架共用数据中心机器。虽然yarn有发展,但是改变不了其为了hadoop而设计的初衷(MR2)。
  3. Mesos的资源分配更加细粒度,比yarn管理资源更加精细。

1.4 Myriad的作用

Yarn在处理Mapreduce job的时候有着天然的优势,而Mesos却不具备这样的优势,Myriad项目的出现正好解决了这一难题。这里,Myriad向Mesos申请资源并交给Yarn来使用。Myriad实现了Mesos的接口,这样它可以和Mesos通信并且申请资源,在Mesos当中执行Yarn的任务。

从Mesos的角度来看,Myriad具有Myriad Scheduler和Executor两个组件。Myriad Scheduler是两个框架合并的关键,具体来说,Myriad Scheduler实现了Yarn中的Fair Scheduler资源调度器并以此为基础实现了Mesos接口,于是Myriad Scheduler就同时具备了向Mesos集群申请资源并在Yarn集群内部分配资源的功能。

2 myriad构建

2.1 Myriad必要条件

按照官方说明,Myriad的运行需要以下条件:

  1. JDK 1.7+ (Java 编译与运行环境)
  2. Gradle (编译工具)
  3. Hadoop 2.7.0 (实测CDH的版本也可以运行,具体会在下一章中解释)
  4. Hadoop HDFS (用于share runtime data和运行文件)
  5. Zookeeper (管理Mesos集群)
  6. Mesos with Marathon (也可以没有Marathon)
  7. Mesos-DNS (需配合Marathon把Myriad注册为Mesos的Framework才可用)

Marathon和MesosDNS并不是必须的,如果没有它们则需要在配置文件中指定ResourceManager的url,并且在hosts下添加所有节点的访问信息。此外,如果使用了MesosDNS并且在yarn-site.xml中没有指定yarn.resourcemanager.hostname ,还需要添加一个环境变量:YARN_RESOURCEMANAGER_OPTS=-Dyarn.resourcemanager.hostname=rm.marathon.mesos。

此外值得注意的是,Myriad目前只处在Alpha阶段,Bug依然很多功能也不完善,比如:Cgroups功能还有bug,flux up/down失败等。

下面就如何构建Myriad分享一下我们的经验:

2.2 编译Myriad:

./gradlew build

scheduler jars

$PROJECT_HOME/myriad-scheduler/build/libs/

executor jars

$PROJECT_HOME/myriad-executor/build/libs/

2.3 拷贝jar文件

cp myriad-scheduler/build/libs/*.jar /opt/hadoop-2.7.0/share/hadoop/yarn/lib/
cp myriad-executor/build/libs/myriad-executor-0.1.0.jar /opt/hadoop-2.7.0/share/hadoop/yarn/lib/
cp myriad-scheduler/build/resources/main/myriad-config-default.yml /opt/hadoop-2.7.0/etc/hadoop/

对于CDH 版本,需要把libmesos.so 等so文件copy 到share/lib/native目录下,否则启动报错

2.4 配置文件

1. mapred-site.xml

示例:

<configuration>
    <property>
        <name>mapreduce.shuffle.port</name>
        <value>${myriad.mapreduce.shuffle.port}</value>
    </property>
</configuration>

2. yarn-site.xml

示例:

https://cwiki.apache.org/confluence/display/MYRIAD/Sample%3A+yarn-site.xml

这里可能需要添加一个yarn.resourcemanager.hostname 来指定ResourceManager的位置,如果使用Marathon和Mesos-DNS这一变量就可以设置成rm.marathon.mesos(也可以和本节最开始提到的一样,通过环境变量的形式来进行设定)。

3. myriad-config-default.yml

示例:https://cwiki.apache.org/confluence/display/MYRIAD/Sample%3A+myriad-config-default.yml

配置文件内部的jvmMaxMemoryMB千万不要调小,否则可能出现莫名的启动错误;executor中的path需要指定NFS或者HDFS当中的路径,务必要保证集群中所有节点都可以access到;nodeManagerUri可以是http地址也可以是hdfs的地址,按照官方的要求,这个数据包在打包时最好把yarn-site.xml文件删除,因为这个文件会在运行时自动生成;YARN_HOME必须是一个相对路径,因为Mesos在执行任务时执行路径是不一定的,所以必须指定为相对路径。

2.5 打包并上传执行文件

首先删除yarn-site.xml然后执行:

tar -zxvf hadoop-myriad.tgz hadoop-myriad 
hadoop fs -put hadoop-myriad.tgz /dist/

2.6 启动和log目录

./sbin/yarn-daemon.sh start resourcemanager
log文件:${HADOOP_HOME}/logs

3 运行实例与解释

我们利用CDH的hadoop-2.6.0-cdh5.7.0进行了测试,发现它也可以很好地运行myriad。

3.1 简单使用方法

我们在CDH的版本之上测试了两种简单的Myriad使用方法

1. flux up/down:

方式1:web页面上直接添加或者删除Instance
方式2:使用RestAPI

HTTP请求方式 uri
PUT /api/cluster/flexup
PUT /api/cluster/flexdown

2. run mapreduce job:

hadoop jar 

HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-.jar teragen 10000 /outDir
hadoop jar 

HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-.jar terasort /outDir /terasortOutDir

3.2解释

这里首先介绍两个概念:

  1. AuxiliaryService,一个nodemanager的定制化组件,有点像mapreduce中的shuffle,可以自己根据需求定制。
  2. FairScheduler,是Yarn中资源调度器的一种(还有FifoScheduler和CapacityScheduler)是由Facebook开发,它能使得hadoop应用能够被多用户公平地共享整个集群资源的调度器。

想必有些读者注意到yarn-site.xml当中的一个配置项:

<property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.myriad.scheduler.yarn.MyriadFairScheduler</value>
</property>

如果阅读源代码可以发现,Myriad重写了Yarn的FairScheduler资源调度器,并且在initialize Yarn的过程之中启动了MesosDriver并把Myriad作为了Mesos的Module来进行注册。这个重写过程并没有对Yarn FairScheduler本身的一些内容进行改变,只是增加了与Mesos交互的过程,在Myriad Scheduler(Yarn RM)启动完成之后,程序还会自动找到合适的Mesos Slave根据配置数量相应地把Myriad Executor(Yarn NM)实例运行起来。

关于NM,yarn-site.xml之中也有一些相关的配置项:

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle,myriad_executor</value>
        <!-- If using MapR distro, please use the following value:<value>mapreduce_shuffle,mapr_direct_shuffle,myriad_executor</value> -->
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.myriad_executor.class</name>
       <value>org.apache.myriad.executor.MyriadExecutorAuxService</value>
    </property>

在这里,Myriad利用MyriadExecutorAuxService实现了与Yarn程序的交互并且在MyriadExecutor中实现了Mesos Executor的接口从而可以把Yarn的NM运行在Myriad Framework中的Task里。

作者:陈冉、陈泳宇,陈冉Linker Networks的首席技术官和技术副总裁,主要负责Linker 的技术路线制定,陈冉曾担任惠普云的首席技术官,首席云技术专家和领域专家。
声明: CSDN作者原创投稿文章,未经许可禁止任何形式的转载。

评论