Hadoop Yarn on Docker
一、概览
Docker基于Linux Container技术整合了一堆易用的接口用于构建非常轻量级的虚拟机。Docker Container Executor(DCE)使得Yarn NodeManager服务可以将其container进程运行在Docker容器中。用户可以自定义运行Yarn container的Docker镜像。这些container提供了自定义的、与外部NodeManger隔离的运行环境,还可以指定安装与NodeManager不同版本的软件包,如Perl、Python、Java等,甚至可以运行与NodeManager不同的Linux发行版本。为了实现这些,Yarn container必须指定运行作业所需要的环境和依赖库,NodeManager之间不会共享这些信息。
二、集群配置
Docker Container Executor只能在非kerberos(安全)模式的Yarn和HDFS中运行,一旦DCE检测到运行在安全模式下,服务会立刻退出。
DCE需要NodeManager节点上运行着docker服务和docker client用于启动docker container。为了避免超时,作业依赖的docker镜像必须在NodeManager启动前预先下载好,运行以下命令下载Hadoop docker镜像:
- sudo docker pull sequenceiq/hadoop-docker:2.4.1
- <property>
- <name>yarn.nodemanager.docker-container-executor.exec-name</name>
- <value>/usr/bin/docker</value>
- <description>
- Name or path to the Docker client. This is a required parameter. If this is empty,
- user must pass an image name as part of the job invocation(see below).
- </description>
- </property>
- <property>
- <name>yarn.nodemanager.container-executor.class</name>
- <value>org.apache.hadoop.yarn.server.nodemanager.DockerContainerExecutor</value>
- <description>
- This is the container executor setting that ensures that all
- jobs are started with the DockerContainerExecutor.
- </description>
- </property>
三、连接安全docker repository技巧
默认情况下,docker从docker官方公共repository下载镜像。docker镜像的url格式为username/image_name,比如说sequenceiq/hadoop-docker:2.4.1是公共镜像仓库中的一个镜像,其中包括java和hadoop软件。
如果用户希望使用私人仓库,需要提供repository url替换username部分,因此镜像url变成private_repo_url/image_name,比如说私人仓库地址是localhost:8080,那镜像URL就是 localhost:8080/hadoop-docker。
登录公共docker repository,执行:
- docker login [OPTIONS] [SERVER]
- Register or log in to a Docker registry server, if no server is specified
- "https://index.docker.io/v1/" is the default.
- -e, --email="" Email
- -p, --password="" Password
- -u, --username="" Username
- docker login <private_repo_url>
以上这些需要作为NodeManager启动的一部分,建议作为一个crontab任务来避免登录session超时。用户可以在同一台NodeManager上同时登录多个docker repository,但是这会导致集群中所有用户都可以访问所有的repository,目前DCE不支持为每个job指定docker login
四、作业配置
目前用户无法在job配置中指定docker配置,用户可以提供Mapper、Reducer和ApplicationMaster环境去覆盖docker镜像中的环境,分别使用以下三个JVM参数:
mapreduce.map.env: You can override the mapper’s image by passing yarn.nodemanager.docker-container-executor.image-name=your_image_name to this JVM property.
mapreduce.reduce.env: You can override the reducer’s image by passing yarn.nodemanager.docker-container-executor.image-name=your_image_name to this JVM property.
yarn.app.mapreduce.am.env: You can override the ApplicationMaster’s image by passing yarn.nodemanager.docker-container-executor.image-name=your_image_name to this JVM property.
Yarn container使用的docker镜像有以下要求:
Docker镜像系统的发行版和版本可以和Nodemanager不同,然而,如果你在使用MapReduce计算框架,那么你的镜像需要配置可以运行hadoop,必须安装java以及定义以下环境变量JAVA_HOME, HADOOP_COMMON_PATH, HADOOP_HDFS_HOME, HADOOP_MAPRED_HOME, HADOOP_YARN_HOME, and HADOOP_CONF_DIR。
六、示例实战
示例说明如何使用DockerContainerExecutor运行作业
Step1:确保yarn-site.xml已经配置完成
Step2:选择一个docker镜像,在这个例子中,我们使用公共仓库中的sequenceiq/hadoop-docker:2.4.1镜像,其中预装了JDK、Hadoop以及上述的环境变量。
Step3:运行
- hadoop jar $HADOOP_PREFIX/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar \
- teragen \
- -Dmapreduce.map.env="yarn.nodemanager.docker-container-executor.image-name=sequenceiq/hadoop-docker:2.4.1" \
- -Dyarn.app.mapreduce.am.env="yarn.nodemanager.docker-container-executor.image-name=sequenceiq/hadoop-docker:2.4.1" \
- 1000 \
- teragen_out_dir
执行成功后,可以在yarn的日志中验证docker启动的containers
Hadoop Yarn on Docker的更多相关文章
- 传统应用迁移到kubernetes(Hadoop YARN)
spark-on-yarn-with-kubernetes 该例子仅用来说明具体的步骤划分和复杂性,在生产环境应用还有待验证,请谨慎使用. 过程中可能用到的概念和术语初步整理如下: 整个迁移过程分为如 ...
- YARN分析系列之二 -- Hadoop YARN各个自模块说明
先做如下声明,本代码版本是基于 3.1.2 版本. 其实,我们自己在写代码的时候,会有意识地将比较大的功能项独立成包,独立成module, 独立成项目,项目之间的关系既容易阅读理解,又便于管理. 如下 ...
- Hadoop YARN 100-1知识点
0 YARN中实体 资源管理者(resource manager, RM) 长时间运行的守护进程,负责管理集群上资源的使用 节点管理者(node manager, NM) 长时间运行的守护进程,在集群 ...
- hadoop yarn running beyond physical memory used
老是报物理内存越界,kill container,然后把yarn.scheduler.minimum-allocation-mb设成2048就好了 跟这个yarn.nodemanager.pmem-c ...
- Hadoop YARN配置参数剖析—RM与NM相关参数
注意,配置这些参数前,应充分理解这几个参数的含义,以防止误配给集群带来的隐患.另外,这些参数均需要在yarn-site.xml中配置. 1. ResourceManager相关配置参数 (1) ...
- Hadoop Yarn内存资源隔离实现原理——基于线程监控的内存隔离方案
注:本文以hadoop-2.5.0-cdh5.3.2为例进行说明. Hadoop Yarn的资源隔离是指为运行着不同任务的“Container”提供可独立使用的计算资源,以避免它们之间相互干扰.目 ...
- hadoop错误org.apache.hadoop.yarn.exceptions.YarnException Unauthorized request to start container
错误: 14/04/29 02:45:07 INFO mapreduce.Job: Job job_1398704073313_0021 failed with state FAILED due to ...
- hadoop Yarn 编程API
客户端编程库: 所在jar包: org.apache.hadoop.yarn.client.YarnClient 使用方法: 1 定义一个YarnClient实例: private YarnClien ...
- MapReduce扩展:应用程序如何运行于Hadoop Yarn之上
1. 背景 “应用程序运行于Hadoop Yarn之上”的需求来源于微博运维数据平台中的调度系统,即调度系统中的任务需要运行于Hadoop Yarn之上.这里的应用程序可以简单理解为一个普通的进程 ...
随机推荐
- 汇编:将指定的内存中连续N个字节填写成指定的内容
1.loop指令实现 ;=============================== ;循环程序设计 ;将制定内存中连续count个字节填写成指定内容(te) ;loop指令实现 DATAS SEG ...
- ctf题目writeup(7)
2019.2.10 过年休息归来,继续做题. bugku的web题,地址:https://ctf.bugku.com/challenges 1. http://123.206.87.240:8002/ ...
- 001---Python简介
编程语言: 机器语言 最底层,更容易被计算机识别,执行速度最快 复杂,开发效率低 汇编语言 比较底层,执行速度较快 同样复杂 高级语言 编译型语言:先编译,后执行.生成独立的可执行文件.是计算机可以理 ...
- POJ-2421-Constructing Roads(最小生成树 普利姆)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 26694 Accepted: 11720 Description The ...
- 贪心算法之Prim
Prim与Dijistra算法有异曲同工之妙,只不过Dijistra是求最短路径,每次添加到集合中的是到固定起始点的最短距离,而Prim是求最小生成树,是整个图所有权重的最小和,每次添加到集合中的是到 ...
- Linux 之vi与vim
vi 三种模式: 『一般模式』: 光标 『编辑模式』:i,o,a,r 『指令列命令模式』「:/ ?」 例子: 1. 请在/tmp 这个目录下建立一个名为vitest 的目录: 2. 将/etc/man ...
- P1107 最大整数
P1107 最大整数 题目描述 设有n个正整数 (n<=20), 将它们连接成一排, 组成一个最大的多位整数. 例如: n=3时, 3个整数13, 312, 343连接成的最大整数为: 3433 ...
- 关于 spring-aop理解
对于Aop 一直理解很是不到位 谈谈自己理解! Aop : Aspect: 切面 joinpoint 连接点 pointCut 切点 Advice 增强 targert 目标对象 w ...
- CentOS修改网卡名称
转 一.问题说明 测试环境中出现的小问题,因为虚拟机之间经常复制来复制去,导致网卡配置这块的不一致现象. 配置文件的信息: [root@ora10g network-scripts]# catifcf ...
- jenkins使用Role Strategy管理用户权限
下载插件地址:https://wiki.jenkins.io/display/JENKINS/Role+Strategy+Plugin 1. 安装好插件后,进入jenkins系统管理的Configur ...