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

来源:互联网 发布:安全课 防火知多少 编辑:程序博客网 时间:2024/05/01 02:18
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:

  
  1. ./gradlew build
复制代码


  scheduler jars

  
  1. $PROJECT_HOME/myriad-scheduler/build/libs/
复制代码


  executor jars

 
  1.  $PROJECT_HOME/myriad-executor/build/libs/
复制代码


  2.3 拷贝jar文件

 
  1.  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

  示例:

  1. <configuration>
  2.     <property>
  3.         <name>mapreduce.shuffle.port</name>
  4.         <value>${myriad.mapreduce.shuffle.port}</value>
  5.     </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目录

  
  1. ./sbin/yarn-daemon.sh start resourcemanagerlog文件:${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请求方式uriPUT/api/cluster/flexupPUT/api/cluster/flexdown
  2. run mapreduce job:

 
  1.  hadoop jar

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

  3.   hadoop jar

  4.   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当中的一个配置项:

  1. <property>
  2.     <name>yarn.resourcemanager.scheduler.class</name>
  3.     <value>org.apache.myriad.scheduler.yarn.MyriadFairScheduler</value>
  4. </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之中也有一些相关的配置项:

  1. <property>
  2.         <name>yarn.nodemanager.aux-services</name>
  3.         <value>mapreduce_shuffle,myriad_executor</value>
  4.         <!-- If using MapR distro, please use the following value:<value>mapreduce_shuffle,mapr_direct_shuffle,myriad_executor</value> -->
  5.     </property>
  6.     <property>
  7.         <name>yarn.nodemanager.aux-services.myriad_executor.class</name>
  8.        <value>org.apache.myriad.executor.MyriadExecutorAuxService</value>
  9.     </property>
复制代码


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