以源码为基础,Myriad使用初探:构建、启动和使用过程
Myriad是由MapR主导并且由eBay、Mesosphere参与的项目,关于Myriad项目的起源与架构在部分文章之中都有了阐述,目前还没有分享Myriad相关实际研究成果的文章。本文将会展示Linker Networks最近对于Myriad项目的研究,并结合实际研究阐述Myriad项目的具体工作原理。首先本文会简单介绍一下Myriad项目的研究背景与意义;之后介绍Myriad的构建、启动和使用过程;最后将以源码为基础解释Myriad的启动和使用原理。
1研究背景与意义
1.1 Yarn
YARN(Yet Another Resource Negotiator)是一种通用的资源管理系统,旨在克服MRv1的缺陷为了更加大规模的数据处理而诞生。它包含四个主要的组件:
- ResourceManager,管理全局资源
- NodeManager,作为ResourceManager的代理管理节点资源
- ApplicationMaster代替MRv1里的JobTracker
- Container作为资源载体在NodeManager的监控之中执行ApplicationMaster的任务
1.2 Mesos
Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。它包含四个主要的组件:
- Mesos-master:管理Framework与Slave,分配和管理Slave的资源给Framework
- Mesos-slave:管理Task,给Executor分配资源
- Framework:利用MesosSchedulerDiver接入到Mesos的框架
- Executor:执行器,启动计算框架中的task。
1.3与Mesos的不同
Mesos与Yarn的不同主要表现在:
- scheduler:mesos让framework决定mesos提供的这个资源是否适合该job,从而接受或者拒绝这个资源。而对于yarn来说,决定权在于yarn,所以从scaling的角度来说,mesos更scalable。
- 其次yarn只为hadoop jobs提供了一个static partitioning。而mesos的设计目标是为各个框架(hadoop、spark、web services等)提供dynamical partitioning,让各个集群框架共用数据中心机器。虽然yarn有发展,但是改变不了其为了hadoop而设计的初衷(MR2)。
- 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的运行需要以下条件:
- JDK 1.7+ (Java 编译与运行环境)
- Gradle (编译工具)
- Hadoop 2.7.0 (实测CDH的版本也可以运行,具体会在下一章中解释)
- Hadoop HDFS (用于share runtime data和运行文件)
- Zookeeper (管理Mesos集群)
- Mesos with Marathon (也可以没有Marathon)
- 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解释
这里首先介绍两个概念:
- AuxiliaryService,一个nodemanager的定制化组件,有点像mapreduce中的shuffle,可以自己根据需求定制。
- 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使用初探:构建、启动和使用过程相关推荐
- 【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 ...
- 源码级剖析了 Naive UI 的 Button 完整过程
注意:为了让篇幅尽可能简洁一丢丢,在有些地方贴源码时,我尽可能贴最能反映要讲解内容的源码,其他重复性的代码就略去了,所以如果你自己尝试去阅读源码时,可能会发现和文章里的代码有出入.文章跑通 Naive ...
- vue源码分析系列一:new Vue的初始化过程
import Vue from 'vue'(作者用的vue-cli一键生成) node环境下import Vue from 'vue'的作用是什么意思? 在 NPM 包的 dist/ 目录你将会找到很 ...
- 老李推荐:第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用 1...
老李推荐:第5章5节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 获取系统服务引用 上一节我们描述了monkey的命令处理入口函数run是如何调用optionPro ...
- Netty源码分析第1章(Netty启动流程)----第4节: 注册多路复用
Netty源码分析第1章(Netty启动流程)---->第4节: 注册多路复用 Netty源码分析第一章:Netty启动流程 第四节:注册多路复用 回顾下以上的小节, 我们知道了channe ...
- Spring源码剖析——Bean的配置与启动
IOC介绍 相信大多数人在学习Spring时 IOC 和 Bean 算得上是最常听到的两个名词,IOC在学习Spring当中出现频率如此之高必然有其原因.如果我们做一个比喻的话,把Bean说成Sp ...
- spring源码阅读(3)-- 容器启动之BeanFactoryPostProcessor
接着上文<spring源码阅读(2)-- 容器启动之加载BeanDefinition>,当spring加载完所有BeanDefinition时,并不会马上去创建bean,而是先配置bean ...
- linux io映射,【原创】Linux 文件系统移植全解密以linux-2.6.35内核源码为例说明一下IO静态映射的过程...
最近不断有人跟我说起静态映射的问题,今天就以linux-2.6.35内核源码为例说明一下IO静态映射的过程(ARM平台). //init/main.c asmlinkage void __init s ...
- 【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 ...
最新文章
- python获取数据类型_python数据类型详解
- Yahoo! 的数据仓库: 世界上最大最忙
- 图神经网络三剑客:GCN、GAT与GraphSAGE
- 【复现】CVE-2015-1635-HTTP.SYS远程执行代码漏洞(ms15-034)
- 大航海商务助理更新1.24
- Using Python with Oracle
- Redis 会遇到的「坑」,你踩过几个?
- 微信小程序隐藏菜单栏目下转发按钮的几个方法
- 在html中frame标签的作用,HTML框架标签frameset、frame、iframe、noframes
- Latex入门----从提纲开始
- 三大有限元分析软件(ABAQUS、ANSYS、MSC)的优缺点是什么?应如何选择?
- Web Api Token验证
- zk kafka常识
- html5如何引用百度地图api,WebApp如何调用百度地图API
- linux+暂停运行,如何暂停和继续运行Linux程序
- 简单图片木马的生成与利用
- 关于中台,你要想明白这几点(上)(转载)
- mysql 图片路径用什么类型_mysql数据库怎么存图片路径
- 云计算运维工程师是做什么的?需要经常加班吗?
- JS + 递归实现细胞分裂
热门文章
- Centos yum 报错:Couldn't open file /mnt/redhat73/repodata/repomd.xml
- 部署SCOM2012
- RuntimeError: “LayerNormKernelImpl“ not implemented for ‘Long‘
- 【考研—密码学】单钥密码体制
- 设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒售出一张票。请模拟并打印出售票过程。
- SOS。。急救。。严重急救
- 蓝桥杯算法训练合集四 1.p0802 2.A的B的C次方次方 3.出现次数最多的整数 4.成绩分级 5.台阶问题
- HTML图片热点、网页划区、拼接、表单
- 怎样利用Python开发天气预报软件,这份教程查收一下
- 神龟对打java_谁知道世嘉游戏忍者神龟对打的出招表!