如何评价让大数据组件运行在Kubernetes、Docker中这件事?

大数据组件包括Hadoop(HDFS、YARN)、Hbase、Spark等等。优劣势是什么?生产环境下会存在哪些问题或隐患?什么类型的场景适合使用这种方式?什么类型的公司适合使用这种架构?

勿忘初心提问于 2019-01-02 14:48
1 个回答
  • 活动主持人2019-01-02 14:54

    分享一下大猪厂基于 Kubernetes 和 Docker 构建猛犸大数据平台机器学习模块(内部代号Dolphin )的一些思考。


    Dolphin 基础设施中包括了 GPU 和 CPU 的混合计算服务节点,通过 Docker 对多种机器学习框架、用户开发环境进行实例化和运行,通过 Kubernetes 提供计算集群的部署、维护、 扩展机制等功能,计算框架主要是 Tensorflow。



    Why Tensorflow on Kubernetes?


    如果让数据科学家直接使用 Tensorflow,他们会遇到例如租户隔离、资源隔离、网络隔离、难以指定 GPU 进行任务调度等等一系列软件工程问题。


    1. 资源隔离:Tensorflow 资源无法隔离 ,Kubernetes 提供租户隔离,容器资源隔离和网络隔离等多种机制
    2. GPU 调度:Tensorflow 缺乏 GPU 资源的调度 ,Kubernetes 1.4 开始支持 GPU 调度
    3. 进程管理:Tensorflow 存在进程遗留问题、无法区分正常完成还是故障退出 ,Kubernetes 提供容器生命周期管理,进程和容器共生死
    4. 服务器定位 :Kubernetes 提供 DNS 服务器提供服务器位置,省去了 Tensorflow 的计算集群的服务节点 IP 地址配置
    5. 监控:Tensorflow 不方便日志查看 ,Kubernetes 提供了较为完善的 Monitoring 和 Logging 功能
    6. 存储:Tensorflow 存在训练数据和模型存储问题 ,Kubernetes 支持对接 Cephfs,GlusterFS 等 Read 性能更好的分布式存储系统
    7. 多框架支持 :通过定制化开发 Kubernetes 的 Custom Resource 和 Operator 接口支持 MXNet 等其他机器学习框架


    当然,基于当时两个项目在任务管理方面的实际进展,团队也做了相应的优化:

    • 开发了基于队列的任务调度系统,解决了 Kubernetes 没有队列服务的问题
    • 开发了计算节点的 GPU 监控服务,解决了 Kubernetes 目前无法监控 GPU 的资源使用情况的问题
    • 开发了 Kubernetes 中训练服务的参数服务的生命周期管理模块,解决了 Tensorflow 的参数服务在训练完毕无法自我关闭的问题


    最后,Dolphin 可以根据数据科学家选用的不同的机器学习算法框架,通过 Kubernetes 编排出相应的机器学习计算集群。


    如下图所示,通过 Dolphin 调度起来的 Tensorflow 计算集群,创建出 Parameter Server 和 Work 的 POD 以及 SVC,通过 HDFS Mount 模块将用户数据空间映射到 Docker Container 中,执行用户的算法脚本进行模型训练和服务发布。



    by 刘勋,网易大数据团队攻城狮