文/李晓炀
大数据时代,随着存储与计算集群规模的不断扩大,气象部门业务系统的分布式环境也已普遍。然而现在的分布式系统不仅限于解决性能、可靠、可扩展性等层面上,更重要的是具有易操作性和内部数据共享性等。传统的数据共享方式在多用户、高并发的情况下已经出现了较大的局限性,需要综合考虑性能、安全以及容错的分布式文件系统为现代数据处理提供极大的资源灵活性。
大规模的气象数据被分散存储在不同的设备上,传统使用数据湖的方式需要很高的永久数据拷贝并且在数据创建和分析之间造成了延迟,无法满足要求较高的场景,并且在越来越多的应用都是在私有云、混合云的情况下,特别是数据和计算资源分离的场景,异构的数据存储带来的系统耦合,都可以通过Alluxio来解耦。结合Docker技术的应用,使环境搭建、移植、弹性收缩变得简单易用,极大的降低运维难度。
Alluxio(之前名为Tachyon)是第一个以内存为中心的虚拟的分布式系统。它统一了数据访问的方式,为上层计算框架和底层存储系统构建了桥梁。 应用只需要连接Alluxio即可访问存储在底层任意存储系统中的数据。此外,Alluxio的以内存为中心的架构使得数据的访问速度能比现有常规方案快几个数量级。
在大数据生态系统中,Alluxio位于计算和存储中间。它可以为生态系统带来显著的性能提升,尤其是跨数据中心和可用性区域。Alluxio是Hadoop和对象存储兼容的,并且支持对底层存储进行读写。现有的数据分析应用程序,如Hive、HBASE和Spark SQL,可以在不更改任何代码的情况下运行在Alluxio上。
容器技术是实现操作系统虚拟化的一种途径,可以让资源受到隔离的进程中运行应用程序及其依赖关系。通过使用容器,可以轻松打包应用程序的代码、配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标。容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。容器还赋予对资源更多的精细化控制能力,让基础设施效率更高。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。相比传统的虚拟化方式,Docker具有启动秒级、需要的资源更少、更轻量、高可用等优势。
Alluxio由master、worker组 成, 其中master如果有多个,只有一个是leading master,其他为standby master,leading master负责管理所有的元数据,包括文件系统元数据、block元数据和worker元数据;worker会定期向leading master发送心跳;leading master会记录所有的文件操作到日志中;worker负责管理资源,比如内存、ssd等,负责将数据存储为block同时响应client的读写请求;实际的file和block的映射关系保存在master中。
Alluxio由于均在Docker容器中,相互通信需要实现容器的跨主机通信。Docker默认的网络环境下,单台主机上的Docker容器可以通过docker0网桥直接通信,而不同主机上的Docker容器之间只能通过在主机上做端口映射进行通信。这种端口映射方式对很多集群应用来说操作较为繁复。Docker跨主机容器间网络通信实现的工具有Flannel、Weave、Open vSwitch等,可根据实际需求进行选择部署。Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。Weave通过创建虚拟网络使Docker容器能够跨主机通信并能够自动相互发现,部署相对简易。分布式文件系统框架如图1所示。
4.2.1 Docker环境搭建
Docker安装所需的依赖及安装包均可通过yum等工具安装,安装成功后启动服务。按照需求配置Docker跨主机容器间网络通信,并确认容器间可以相互通信。如有需要可在本地搭建Docker仓库,对后续的镜像管理实现本地化。
4.2.2 Alluxio部署应用
在Docker环境中,Alluxio镜像可直接通过Docker Hub互联网获取或者本地Docker仓库获取。启动Alluxio容器时,使用Docker命令指定Docker容器的网络环境及共享的存储,指定Alluxio的master及worker并设置虚拟内存等相关参数即可。在启动的worker Docker容器中,可通过alluxio runTests测试该集群是否安装成功,随后测试访问Alluxio页面或查看alluxio/logs文件夹下的日志。
图1:分布式文件系统框架
图2:Docker中的Alluxio集群跨存储系统数据共享
Alluxio 中的挂载功能允许用户挂载不同的存储系统到 Alluxio 命名空间中并且通过 Alluxio 命名空间无缝地跨存储系统访问文件,并加速数据访问。如图2所示为通过Docker中的Alluxio集群做跨存储系统的数据共享。
大数据时代的高可用数据访问方式有着重要的意义,高效易用的基础架构对数据访问的性能以及运维人员的维护成本均有极大的促进作用。本文提出了基于Alluxio+Docker的分布式文件系统,针对大量、多样的气象数据,提供灵活的文件读取方式,使任何应用以内存级速度进行文件系统上的数据交换,以高性能和成本有效的方式在这些系统中提供统一的、聚合的数据视图,解决大数据访问性能的难题,支撑气象数据的应用。