Hadoop Yarn on Docker

搭建Hadoop Yarn on Docker

一、概览

Docker基于Linux Container技术整合了一堆易用的接口用于构建非常轻量级的虚拟机。Docker Container Executor(DCE)使得Yarn NodeManager服务可以将其container进程运行在Docker容器中。用户可以自定义运行Yarn container的Docker镜像。这些container提供了自定义的、与外部NodeManger隔离的运行环境,还可以指定安装与NodeManager不同版本的软件包,如Perl、PythonJava等,甚至可以运行与NodeManager不同的Linux发行版本。为了实现这些,Yarn container必须指定运行作业所需要的环境和依赖库,NodeManager之间不会共享这些信息。

二、集群配置

Docker Container Executor只能在非kerberos(安全)模式的Yarn和HDFS中运行,一旦DCE检测到运行在安全模式下,服务会立刻退出。

DCE需要NodeManager节点上运行着docker服务和docker client用于启动docker container。为了避免超时,作业依赖的docker镜像必须在NodeManager启动前预先下载好,运行以下命令下载Hadoop docker镜像:

[java] view plain copy

  1. sudo docker pull sequenceiq/hadoop-docker:2.4.1

同时在yarn-site.xml中增加配置:

[html] view plain copy

  1. <property>
  2. <name>yarn.nodemanager.docker-container-executor.exec-name</name>
  3. <value>/usr/bin/docker</value>
  4. <description>
  5. Name or path to the Docker client. This is a required parameter. If this is empty,
  6. user must pass an image name as part of the job invocation(see below).
  7. </description>
  8. </property>
  9. <property>
  10. <name>yarn.nodemanager.container-executor.class</name>
  11. <value>org.apache.hadoop.yarn.server.nodemanager.DockerContainerExecutor</value>
  12. <description>
  13. This is the container executor setting that ensures that all
  14. jobs are started with the DockerContainerExecutor.
  15. </description>
  16. </property>

需要集群管理员注意目前DCE不提供用户命名空间隔离,这意味着在Yarn container中以root用户运行的程序会获得NodeManager的root权限,换句话说,DCE目前没有提供比Yarn默认的Container Executor更好的安全保证。

三、连接安全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,执行:

[html] view plain copy

  1. docker login [OPTIONS] [SERVER]
  2. Register or log in to a Docker registry server, if no server is specified
  3. "https://index.docker.io/v1/" is the default.
  4. -e, --email=""       Email
  5. -p, --password=""    Password
  6. -u, --username=""    Username

登录私人repository

[html] view plain copy

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

五、docker镜像要求

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:运行

[java] view plain copy

  1. hadoop jar $HADOOP_PREFIX/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar \
  2. teragen \
  3. -Dmapreduce.map.env="yarn.nodemanager.docker-container-executor.image-name=sequenceiq/hadoop-docker:2.4.1" \
  4. -Dyarn.app.mapreduce.am.env="yarn.nodemanager.docker-container-executor.image-name=sequenceiq/hadoop-docker:2.4.1" \
  5. 1000 \
  6. teragen_out_dir

执行成功后,可以在yarn的日志中验证docker启动的containers

时间: 2024-08-08 17:51:55

Hadoop Yarn on Docker的相关文章

YARN分析系列之二 -- Hadoop YARN各个自模块说明

先做如下声明,本代码版本是基于 3.1.2 版本. 其实,我们自己在写代码的时候,会有意识地将比较大的功能项独立成包,独立成module, 独立成项目,项目之间的关系既容易阅读理解,又便于管理. 如下,是hadoop-yarn-project的module截图: Hadoop YARN 的大部分功能在 hadoop-yarn-project module 下,现将该module下各个module 的功能做一个大致的说明[顺序按上面截图自上而下]: hadoop-yarn-api:YARN的跨平台

决胜大数据时代:Hadoop&amp;Yarn&amp;Spark企业级最佳实践(8天完整版脱产式培训版本)

Hadoop.Yarn.Spark是企业构建生产环境下大数据中心的关键技术,也是大数据处理的核心技术,是每个云计算大数据工程师必修课. 课程简介 大数据时代的精髓技术在于Hadoop.Yarn.Spark,是大数据时代公司和个人必须掌握和使用的核心内容. Hadoop.Yarn.Spark是Yahoo!.阿里淘宝等公司公认的大数据时代的三大核心技术,是大数据处理的灵魂,是云计算大数据时代的技术命脉之所在,以Hadoop.Yarn.Spark为基石构建起来云计算大数据中心广泛运行于Yahoo!.阿

Hadoop YARN资源隔离技术

YARN对内存资源和CPU资源采用了不同的资源隔离方案.对于内存资源,它是一种限制性资源,它的量的大小直接决定应用程序的死活,因为应用程序到达内存限制,会发生OOM,就会被杀死.CPU资源一般用Cgroups进行资源控制,Cgroups控制资源测试可以参见这篇博文Cgroups控制cpu,内存,io示例,内存资源隔离除Cgroups之外提供了另外一个更灵活的方案,就是线程监控方案. 默认情况下YARN采用线程监控的方案控制内存使用,采用这种机制的原因有两点: 1.Java创建子进程采用了"for

Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/util/Apps Hadoop2.6.0编程问题与解决

从hadoop 1.2.1升级到 Hadoop2.6.0,调试写代码,还是遇到一些问题的.这里记录一下,后续如果自己再遇到类似问题,那也好找原因了. 在eclipse里编译运行 WordCount,出现以下错误. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/util/Apps at java.lang.ClassLoader.defineClass1(Native M

hadoop yarn 运行wordcount时执行完成,但是返回错误

错误信息如下: 15/09/05 03:48:02 INFO mapreduce.Job: Job job_1441395011668_0001 failed with state FAILED due to: Application application_1441395011668_0001 failed 2 times due to AM Container for appattempt_1441395011668_0001_000002 exited with exitCode: 1 F

Apache Hadoop YARN: Moving beyond MapReduce and Batch Processing with Apache Hadoop 2

Apache Hadoop YARN: Moving beyond MapReduce and Batch Processing with Apache Hadoop 2 .mobi: http://www.t00y.com/file/79497801 Apache Hadoop YARN: Moving beyond MapReduce and Batch Processing with Apache Hadoop 2.pdf: http://www.t00y.com/file/8034244

Apache Hadoop YARN: 背景及概述

从2012年8月开始Apache Hadoop YARN(YARN = Yet Another Resource Negotiator)成了Apache Hadoop的一项子工程.自此Apache Hadoop由下面四个子工程组成: Hadoop Comon:核心库,为其他部分服务 Hadoop HDFS:分布式存储系统 Hadoop MapReduce:MapReduce模型的开源实现 Hadoop YARN:新一代Hadoop数据处理框架 概括来说,Hadoop YARN的目的是使得Hado

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: Application application_1398704073313_0021 failed 2 times due to Error launching appattempt_1398704073313_0021_000002. Got exception:     org.apache

Hadoop YARN: 1/1 local-dirs are bad: /var/lib/hadoop-yarn/cache/yarn/nm-local-dir; 1/1 log-dirs are bad: /var/log/hadoop-yarn/containers hdfs硬盘90% yarn unhealthy

1/1 local-dirs are bad: /var/lib/hadoop-yarn/cache/yarn/nm-local-dir; 1/1 log-dirs are bad: /var/log/hadoop-yarn/containers Node Manager logs 1 2 3 yarn.server.nodemanager.DirectoryCollection: Directory /var/lib/hadoop-yarn/cache/yarn/nm-local-dir er