Apache 拟在 Docker 中运行 Hadoop

  • 张天雷

2014 年 9 月 4 日

话题:Apache语言 & 开发架构

Apache 在其 Hadoop wiki 上整理了 Docker 中运行 Hadoop 的优势,以及要完全在 Docker 中运行 Hadoop 所需要完成的工作。在 Docker,或者说其它容器中运行 Hadoop YARN 有很多优势,具体如下:

  1. 软件依赖和配置的隔离:在 Docker 中运行的应用,其软件依赖和配置是与宿主机完全没有关系的,跟其其它行在 Docker 中的应用也没有关系;
  2. 安全性:运行在 Docker 中的应用,在没有主动配置的情况下,基本没有办法访问(即便是 Docker 镜像中的 root 权限)宿主文件系统的内容,这可以很好的保护宿主文件系统、设备等等;
  3. 性能隔离:Docker 可以对应用所需要的资源,如 CPU 计算资源、内存资源、存储资源、带宽等进行调控;
  4. 一致性:只要是源自同一个 Docker 镜像,所有的任务就具有完全一致的软件环境,跟宿主环境无关。比如一个 Ubuntu 镜像可以像使用真正 Ubuntu 系统一样利用其特性,哪怕宿主机器是 RHEL;
  5. 快速部署:Docker 有着强大的镜像存储和分发能力,开发者可以很方便的从镜像中心获取 Hadoop YARN 应用的镜像;
  6. 可编程:通过 Dockerfile,开发者可以非常方便地对 YARN 应用的文件系统、环境配置和运行的脚本进行设置;

虽然容器的优势是明显的,但是目前 Docker 和 YARN 的情况却无法支撑完全在 Docker 中运行 Hadoop YARN 任务,Apache 提出需要对 Docker 和 YARN 进行修改的想法,并给出了一些目前计划的工作:

  1. YARN 的 Docker 执行器;
  2. Docker 需要支持 user namespaces,以便可以将 Docker 镜像中的 root 用户映射到宿主机的普通用户,来控制用户对宿主文件系统的访问;
  3. 容器的网络配置:这项工作主要为了让 YARN 的主节点同其他节点通信,Docker 现有的 NAT IP 地址不允许运行在某个镜像中的任务访问另外一台物理宿主上运行的其他任务;
  4. 动态配置资源限制:目前 Docker 不支持动态对镜像资源进行配置;

感谢郭蕾对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

Apache语言 & 开发架构