2B场景,快速部署贴近实际生产的大数据基础平台探索

简介: 2B场景,快速部署贴近实际生产的大数据基础平台探索 Table of Contents 1. 现状与思考 1.1. 背景介绍 1.2 例子 1.2.1 hdfs docker化 1.

2B场景,快速部署贴近实际生产的大数据基础平台探索

Table of Contents

1. 现状与思考

在实践大数据基础平台docker化,也遇到了一些问题,我通过下面一个比较实际的例子来谈谈。

1.1. 背景介绍

基础服务用docker封装。在docker之上我们用rancher来管理我们的docker集群,所有大数据组件基本用的都是apache community edition。

1.2 例子

1.2.1 hdfs docker化

在对hdfs服务进行docker化中,考虑到生产环境需要引入HA,所以需要引入failover controller node,要保证Namenode与secondary节点的通信需要引入journalnode。出于安全的考虑不能把集群所有主机都暴露出来,需要一个或者若干gateway。考虑到线上的快速恢复,也需要引入backup node。也就是说为了部署一个能够上生产的hdfs基础组件,需要部署namenode,secondary namenode,datanode,journalnode,failovercontraoller node,backup node,gateway node6个服务(完整情况下应该是8个)。借鉴对docker的最佳实践,我们一个container只部署一个服务。我们至少需要编写6个dockerfile。编写完后,我们通过docker-compose结合rancher来管理我们的服务。通过rancher 进行容器的编排。

1.2.2 yarn等资源调度的引入

接下来我真的引入了yarn,yarn 需要引入jobhistory,resourcemanager ,nodemanager 三个服务,对hadoop的hdfs-site,yarn-site等配置文件进行修改,我们需要对前面的dockerfile中配置文件进行一个个更改并且重新build,push,deploy。为了docker中yarn能组合上hdfs,上面过程反复开发测试,这种行为非常低效。所以借鉴IOC的想法。引入动态参数调整,就是为了应对后期大量的且频繁的调优,以及对接可能会对接的组件(eg:yarn)引起的配置参数的变更。为了应对的可能的变化,我们引入了多个shell,定义了常见的大几十个变量。编写了大量的sed替换代码。

1.2.3 代码盘点

后面维护的同学,仅仅俩个基础组件需要维护:6个hdfs的dockerfile,3个yarn的dockerfile,以及若干shell脚本,若干配置文件,另外要保证俩个组件组合共用的配置文件需要在多个image中保持一致

1.2.4 项目上线

我们通过rancher来管理我们的docker并进行服务的编排和调度。所以我们需要对所有的服务器进行针对各个组建一一进行统一的标签化,eg:hdfs定义标签hd.role.namenode=true,hd.role.datanode=true,yarn定义标yarn.role.rm=true,yarn.role.nm=true,etc。确保服务器能够争取的部署到我想要部署的服务器。思考下图dockerfile中的服务如何才能更好在docker中进行管理和部署?如果还有其他的组件呢spark,hive,hbase,kafka,zookeeper?
1

1.3 有待完善的事情

在1.2中我们描述了一个完整组件上生产需要考虑的基础性问题。但远远不够,还需要考虑管理,运营,安全等方面的问题。先蛮罗列下几个点后续在补充

1.3.1 管理问题

  1. 资源的统一管理
  2. 多集群的管理(hadoop,kafka,zookeepr)
  3. 日志统一管理和节点定位
  4. 集群疾病与诊断史

1.3.2 部署

  1. 升级部署,不是推到重来
  2. 统一的配置管理
  3. 管理不同服务的启停备份
  4. 多host管理(vm,物理机,docker)
  5. 配置审计跟踪
  6. 配置版本控制和历史记录

1.3.3 安全与运营

  1. 针对不通组件的软件监控指标
  2. 系统硬件的监控指标
  3. 报警管理
  4. 安全认证
  5. 服务、主机和活动监控

1.4 小结

上面的所遇到挺多的,我抽象成俩个基本问题。

  1. 通过rancher结合docker更好管理单个组件多个不通类型服务,以及满足线上要求的服务与管理运维(eg:一个hdfs完成的组建有8个(namenode,secondarynamenode,datanode,journalnode,failover controller etc)
  2. 如何通过rancher集合docker更好管理多个组件多个不通类型服务组合和以及满足线上要求的服务与管理运维。

2 尝试的部署架构改进

我们用cloudera manager结合实际场景下对docker使用方式做了姿势上的调整。所以本节分为俩部分 cloudera manager(cdm)以及docker结合cdm的使用方式调整

2.1 cloudera manager

先来看看cdm官网提供的架构图,如下图
2

上面描述了几个组件

  • Agent:安装在每台主机上。该代理负责启动和停止的过程,拆包配置,触发装置和监控主机。
  • Management Service:由一组执行各种监控,警报和报告功能角色的服务。
  • Database:存储配置和监视信息。通常情况下,多个逻辑数据库在一个或多个数据库服务器上运行。
  • Cloudera Repository:cloudera 软件包的公有源
  • client

    • Admin Console - 基于Web的用户界面与管理员管理集群和Cloudera管理。
    • API - 与开发人员创建自定义的Cloudera Manager应用程序的API。

一句话总结下CDM:核心组建是Management Service,该服务承载管理控制台的Web服务器和应用程序逻辑,并负责安装软件,配置,启动和停止服务,以及管理运行群集。cdm管理management service,agent等自带的几个服务,能够完成单个组件对自生多个服务的管理。此外cdm对大数据组件的管理方式,也采用相同的方式。也就是说CDM们管理单个组件的多个服务,管理多个组件之间的服务组合(CDM的功能调研见-wiki《cloudera manager 功能调研和功能展示》。CDM解决第1节我们提到的问题。那docker又能为我们大数据平台带来什么?

2.2 部署架构

借助CDM的有点可以帮助我们快速搭建和管理运维多个集群。但是基础环境比如节点通信的sshd,时钟同步ntpd这些环境的准备和同步是CDM所不能做的,而docker能够保证开发-测试-生产基础环境的一致性,形成开发到上生产的全生命周期。rancher管理docker,可以快速拉起我们所要的docker节点数。来看下我们基础架构图
3

  • rancher,用于管理docker集群,快速拉起多个预先准备好基础环境的docker image
  • docker,有俩个功能

    1. 准备集群所需要的基础环境,需要预先安装ntpd,sshd等服务
    2. 构建cloudera manager的安装镜像(A),cloudera软件包私有源镜像(B)。通过访问A所生成容器的服务,我们可以快速将B中的集群组件安装到第1小点所准备的服务
  • cloudera manager:见2.1
  • cloudera private repo:cloudera软件包私有源镜像
  • VM:虚拟机
  • Physical machine:物理机

是的你没看错,在上面的场景下,我们将docker的使用定位进行改变,提升定位到和VM,物理机一个级别。cloudera manager管理的主机资源中,只要能暴漏sshd的端口都可以是一种主机资源。依据这样的调整我们集合上面的基础架构图,尝试了如下部署架构
4

如图,这边我们启动了8个docker,其中3个cdm-agent,3个用于部署大数据组件,1个cdm-manager安装镜像,1个cloudera软件包私有源镜像。为什么采用上面的部署架构?如果采用微服务对docker的使用方式,我们应该对部署大数据组件的docker服务进行拆分,得到的架构图如下
6

在思考这样的架构图是否合理或者能够落地的时候,我们再去回想下我们在大数据落地第一小结遇到的问题。如果按这样的架构图去落地,我们也许需要做下面的几件事情

  1. 针对不同的组件服务,编写不通类型dockerfile,这里的image只是对应服务可能会用到的基础环境,比如ssh安装。
  2. 针对组件间与组件内部服务通信的需要,开放特定服务所需要的端口,这对组件docker的成员的要求是提高的,需要对编写服务和其他可能存在交互的docker服务有一定了解。但是这实际上相比与1.2.1,需要对服务进行繁琐的配置,有了一定的简化。
  3. 通过rancher进行服务编排,cdm根据一定的规则,将组件安装到对应的docker容器上

通过对上面方案的推演,我们对docker的功能进行一定调整,增加了对不同服务的环境定制,将CDM在进行软件安装所自动初始化的东西,下放到docker上,最典型就是服务端口的管理。综合来说相对1中是简化了不少,相比2.1 增加了困难。

3 遗留的问题

  1. 在第2点,我们根据在部署上的问题,针对性提出了解决方案,解决了部署大数据组件的繁琐,和引入docker所带来的部署难度提升,解决在针对大数据组件的监控,管理等运维上的繁杂,让开发人员从大量的dockerfile中脱离,能够更加专心应对集群上的问题,和业务上的问题。但是项目的成功与否,部署架构的抗压性能是关键,所以结合docker性能优化这块是重中之重,需要进行长期探索。从本地文件系统的选择,内存参数设置,网络方式选择和参数,CPU参数设置。一句话全方面对比docker和vm
  2. hadoop,spark等大数据组件的服务需要常驻。也就是说docker不能运算结束后销毁。eg:client 提交任务yarn,yarn根据docker所占剩余的资源,进行任务的分配。在docker中以若干linux container的形式存在。如果抛去第三点我对docker反常规使用。社区上有人提到docker能给大数据平台带来哪些改变?我们知道,本质上docker是对环境和服务的集成封装,在环境方面,对客户(开发,测试,程序)屏蔽了环境细节,也就说用户在调用使用服务的时候,只需关心服务的接口,而不需要关心服务的所在环境。在服务方面,如果想降低用户使用成本,和后期的维护成本,最好保持一个docker对应一个服务。而且如果想要服务能够在集群中自由伸缩最好保持单个docker内部服务配置是完整的(或者所需的参数能够以简单接口形式提供),也即一个服务只需要依赖所在image中的配置,不需要依赖其他image的配置是最好,毕竟打破了docker对服务和环境的封装那就意味者,后续使用管理维护都需要下探到docker内部的服务中去。而在大数据领域,需要对大量docker配置参数进行调整做不到一劳永逸,在组件搭配的时候,需要根据后面选用的组件最前面组件内部的配置进行更改,eghdfs 与yarn,spark 与yarn。组件间存在强依赖,而docker引入对依赖的解耦好像没有什么正向的作用。总结下,如果不打破docker对服务和环境的封装来使用是最好,如果打破了,那意味就必须对环境和服务进行单独管理。这也是第二点架构重构方案的出发点。那到底docker能给大数据平台打来哪些改变,从上面我们理的逻辑来看看数据平台简易业务架构图(见下图),不通的层面应该有不同的回答
    7

附件

git地址:

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
4月前
|
存储 SQL 分布式计算
开源大数据比对平台设计与实践—dataCompare
开源大数据比对平台设计与实践—dataCompare
65 0
|
4月前
|
SQL 存储 大数据
某互联网大厂亿级大数据服务平台的建设和实践
某互联网大厂亿级大数据服务平台的建设和实践
67 0
|
4月前
|
SQL 大数据 关系型数据库
开源大数据比对平台(dataCompare)新版本发布
开源大数据比对平台(dataCompare)新版本发布
68 0
|
4月前
|
SQL 存储 分布式计算
从0到1介绍一下开源大数据比对平台dataCompare
从0到1介绍一下开源大数据比对平台dataCompare
104 0
|
6月前
|
存储 云安全 大数据
【云计算和大数据平台】云计算平台和大数据平台(如阿里云、腾讯云、华为云等)的搭建和使用方法
【云计算和大数据平台】云计算平台和大数据平台(如阿里云、腾讯云、华为云等)的搭建和使用方法
219 0
|
5月前
|
人工智能 Cloud Native 大数据
构建高性能云原生大数据处理平台:融合人工智能优化数据分析流程
构建高性能云原生大数据处理平台:融合人工智能优化数据分析流程
186 0
|
2月前
|
监控 物联网 大数据
智慧工地管理平台系统源码基于物联网、云计算、大数据等技术
智慧工地平台APP通过对施工过程人机料法环的全面感知、互联互通、智能协同,提高施工现场的生产效率、管理水平和决策能力,实现施工管理的数字化、智能化、精益化。
51 0
|
3月前
|
SQL 分布式计算 HIVE
开源湖仓一体平台(二):Arctic(上篇)
开源湖仓一体平台(二):Arctic(上篇)
开源湖仓一体平台(二):Arctic(上篇)
|
3月前
|
SQL 消息中间件 分布式计算
开源湖仓一体平台(一):LakeSoul
开源湖仓一体平台(一):LakeSoul
|
4月前
|
SQL 存储 大数据
从0到1介绍一下开源大数据服务平台dataService
从0到1介绍一下开源大数据服务平台dataService
105 1