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作者原创投稿文章,未经许可禁止任何形式的转载。

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

  1. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 TaskMasger 启动

    1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [四] 上一篇: [flink]Flink 1.12.2 源码浅析 : yarn-per-job模式解析 Jo ...

  2. 源码级剖析了 Naive UI 的 Button 完整过程

    注意:为了让篇幅尽可能简洁一丢丢,在有些地方贴源码时,我尽可能贴最能反映要讲解内容的源码,其他重复性的代码就略去了,所以如果你自己尝试去阅读源码时,可能会发现和文章里的代码有出入.文章跑通 Naive ...

  3. vue源码分析系列一:new Vue的初始化过程

    import Vue from 'vue'(作者用的vue-cli一键生成) node环境下import Vue from 'vue'的作用是什么意思? 在 NPM 包的 dist/ 目录你将会找到很 ...

  4. 老李推荐:第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用 1...

    老李推荐:第5章5节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 获取系统服务引用 上一节我们描述了monkey的命令处理入口函数run是如何调用optionPro ...

  5. Netty源码分析第1章(Netty启动流程)----第4节: 注册多路复用

    Netty源码分析第1章(Netty启动流程)---->第4节: 注册多路复用 Netty源码分析第一章:Netty启动流程   第四节:注册多路复用 回顾下以上的小节, 我们知道了channe ...

  6. Spring源码剖析——Bean的配置与启动

    IOC介绍   相信大多数人在学习Spring时 IOC 和 Bean 算得上是最常听到的两个名词,IOC在学习Spring当中出现频率如此之高必然有其原因.如果我们做一个比喻的话,把Bean说成Sp ...

  7. spring源码阅读(3)-- 容器启动之BeanFactoryPostProcessor

    接着上文<spring源码阅读(2)-- 容器启动之加载BeanDefinition>,当spring加载完所有BeanDefinition时,并不会马上去创建bean,而是先配置bean ...

  8. linux io映射,【原创】Linux 文件系统移植全解密以linux-2.6.35内核源码为例说明一下IO静态映射的过程...

    最近不断有人跟我说起静态映射的问题,今天就以linux-2.6.35内核源码为例说明一下IO静态映射的过程(ARM平台). //init/main.c asmlinkage void __init s ...

  9. 【SemiDrive源码分析】【X9芯片启动流程】12 - freertos_safetyos目录Cortex-R5 DIL2.bin 之 sdm_display_init 显示初始化源码分析

    [SemiDrive源码分析][X9芯片启动流程]12 - freertos_safetyos目录Cortex-R5 DIL2.bin 之 sdm_display_init 显示初始化源码分析 一.s ...

最新文章

  1. python获取数据类型_python数据类型详解
  2. Yahoo! 的数据仓库: 世界上最大最忙
  3. 图神经网络三剑客:GCN、GAT与GraphSAGE
  4. 【复现】CVE-2015-1635-HTTP.SYS远程执行代码漏洞(ms15-034)
  5. 大航海商务助理更新1.24
  6. Using Python with Oracle
  7. Redis 会遇到的「坑」,你踩过几个?
  8. 微信小程序隐藏菜单栏目下转发按钮的几个方法
  9. 在html中frame标签的作用,HTML框架标签frameset、frame、iframe、noframes
  10. Latex入门----从提纲开始
  11. 三大有限元分析软件(ABAQUS、ANSYS、MSC)的优缺点是什么?应如何选择?
  12. Web Api Token验证
  13. zk kafka常识
  14. html5如何引用百度地图api,WebApp如何调用百度地图API
  15. linux+暂停运行,如何暂停和继续运行Linux程序
  16. 简单图片木马的生成与利用
  17. 关于中台,你要想明白这几点(上)(转载)
  18. mysql 图片路径用什么类型_mysql数据库怎么存图片路径
  19. 云计算运维工程师是做什么的?需要经常加班吗?
  20. JS + 递归实现细胞分裂

热门文章

  1. Centos yum 报错:Couldn't open file /mnt/redhat73/repodata/repomd.xml
  2. 部署SCOM2012
  3. RuntimeError: “LayerNormKernelImpl“ not implemented for ‘Long‘
  4. 【考研—密码学】单钥密码体制
  5. 设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒售出一张票。请模拟并打印出售票过程。
  6. SOS。。急救。。严重急救
  7. 蓝桥杯算法训练合集四 1.p0802 2.A的B的C次方次方 3.出现次数最多的整数 4.成绩分级 5.台阶问题
  8. HTML图片热点、网页划区、拼接、表单
  9. 怎样利用Python开发天气预报软件,这份教程查收一下
  10. 神龟对打java_谁知道世嘉游戏忍者神龟对打的出招表!