CN109165206B - 基于容器的hdfs高可用实现方法 - Google Patents

基于容器的hdfs高可用实现方法 Download PDF

Info

Publication number
CN109165206B
CN109165206B CN201810980102.2A CN201810980102A CN109165206B CN 109165206 B CN109165206 B CN 109165206B CN 201810980102 A CN201810980102 A CN 201810980102A CN 109165206 B CN109165206 B CN 109165206B
Authority
CN
China
Prior art keywords
hdfs
container
pod
directory
shared directory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810980102.2A
Other languages
English (en)
Other versions
CN109165206A (zh
Inventor
江胡忠
宋怀明
郭庆
谢莹莹
蒋丹东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhongke Shuguang International Information Industry Co ltd
Original Assignee
Zhongke Shuguang International Information Industry Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhongke Shuguang International Information Industry Co ltd filed Critical Zhongke Shuguang International Information Industry Co ltd
Priority to CN201810980102.2A priority Critical patent/CN109165206B/zh
Publication of CN109165206A publication Critical patent/CN109165206A/zh
Application granted granted Critical
Publication of CN109165206B publication Critical patent/CN109165206B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供一种基于容器的HDFS高可用实现方法。所述方法包括:通过HDFS集群系统中的Pod挂载预先分配的远端NFS共享目录;当Kubernetes重新调度HDFS集群中的异常Pod或容器时,通过所述异常Pod或者容器重新挂载所述远端NFS共享目录中的对应数据文件目录,以恢复异常Pod或者容器中的数据,从而实现容器内HDFS的高可用性;其中,所述NFS共享目录用于存放HDFS所有节点的数据文件的保存目录。本发明通过预先分配一个远端NFS共享目录,并将之与容器相对应,通过挂载远端NFS共享目录将HDFS节点的数据文件保存目录存放在远端NFS共享目录中,这样容器被销毁重建之后,通过重新挂载预先分配的远端NFS共享目录就可以恢复容器的用户数据,从而使得HDFS节点数据不会丢失。

Description

基于容器的HDFS高可用实现方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于容器的HDFS高可用实现方法。
背景技术
HDFS(Hadoop Distributed File system,Hadoop分布式文件系统)是一个具有高度容错性的分布式文件系统,能够提供高吞吐量的数据访问,同时具备一定的故障恢复能力,适合在大规模的数据集上使用。HDFS是一个主/从体系结构,包括两类节点:NameNode和DataNode,其中,NameNode负责处理客户端的请求,配置副本策略,管理HDFS的命名空间等;DataNode负责数据块的读写操作等。HDFS更适合于一次写入,多次读取的应用场景,不适宜频繁写入和实时获取的应用场景。NFS(Network File System,网络文件系统)允许计算机通过TCP/IP网络访问远端的计算机上的硬盘目录,提供了一种文件共享的方式,安装NFS客户端的计算机就可以像访问本地磁盘那样读写NFS服务器上共享出来的磁盘目录。
Docker容器技术是基于LXC(Linux Container)技术衍生的一种新型内核虚拟化技术,从2013年诞生之日起便持续得到开发者和企业的关注和青睐。使用Docker技术,开发者可以轻松的在容器上部署和运行应用,并通过配置文件轻松实现应用的自动化安装、部署和升级。Kubernetes是一个全新的基于Docker容器技术的分布式架构领先方案,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。Pod作为集群中最基本操作单元,包含一个或多个紧密相关的容器,这些容器共享存储和网络资源。与传统物理机的部署相比,借助于容器的轻量级和容器编排系统Kubernetes,可以在同等的物理硬件条件下,部署更多的HDFS集群,提供给更多的用户使用,并且这些HDFS相互隔离,不会有影响。
通常情况下,在Kubernetes中的每个Pod上只创建一个容器,并在容器中部署HDFS集群,根据Kubernetes的调度策略,当Pod或容器因未知原因发生异常终止时Kubernetes会删除掉异常终止的Pod,并重新根据yaml文件生成新的Pod,并把它启动起来加入到原HDFS集群中,其中,yaml文件是一种编写配置文件的语言。
在实现本发明的过程中,发明人发现现有技术中至少存在如下技术问题:
虽然按照上述部署方式的确可以为多个用户创建更多的HDFS集群,并且一旦HDFS集群中的某个数据节点DataNode出现异常终止,Kubernetes能够重新调度该数据节点DataNode并将其加入原HDFS集群中。由于重新调度后的DataNode是一个全新的、失去所有用户数据的节点,因此需要借助HDFS文件系统本身的高可用特性保证HDFS上的数据不丢失。
但是一旦在同一个HDFS集群里同时发生调度的容器较多,例如,全部DataNode都发生重新调度,那么HDFS文件系统也无法保证数据的完整,这一点与高可用性是相悖的,也是实际业务场景中用户不能接受的。出现这样的问题与Kubernetes本身重新调度后的pod生成方式是密不可分的。当发现某个Pod出现异常终止,正在运行的Pod副本数低于RC(Replication Controller,Kubernetes管理Pod副本组件)设置的数量时,RC会清理掉终止的Pod,根据定义Pod的yaml文件,读取镜像,生成新的Pod,并将其运行起来。然而新生成的Pod因为是根据镜像仓库或本地预先设置的镜像生成的,因此导致原Pod的容器中用户在该DataNode上保存的数据丢失。
发明内容
本发明提供的基于容器的HDFS高可用实现方法,通过预先分配一个远端NFS共享目录,并将之与容器相对应,通过挂载远端NFS共享目录将HDFS节点的数据文件保存目录存放在远端NFS共享目录中,这样容器被销毁重建之后,通过重新挂载预先分配的远端NFS共享目录就可以恢复容器的用户数据,从而使得HDFS节点数据不会丢失。
本发明提供一种基于容器的HDFS高可用实现方法,包括:
通过HDFS集群系统中的Pod挂载预先分配的远端NFS共享目录;
当Kubernetes重新调度HDFS集群中的异常Pod或容器时,通过所述异常Pod或者容器重新挂载所述远端NFS共享目录中的对应数据文件的保存目录,以恢复异常Pod或者容器中的数据,从而实现容器内HDFS的高可用性;
其中,所述NFS共享目录用于存放HDFS所有节点的数据文件的保存目录。
本发明实施例提供的基于容器的HDFS高可用实现方法,通过预先分配一个远端NFS共享目录,并将之与容器相对应,通过挂载远端NFS共享目录将HDFS节点的数据文件保存目录存放在远端NFS共享目录中,这样容器被销毁重建之后,通过重新挂载预先分配的远端NFS共享目录就可以恢复容器的用户数据,从而使得HDFS节点数据不会丢失。
附图说明
图1为本发明一实施例基于容器的HDFS高可用实现方法的流程图;
图2为本发明一实施例容器挂载NFS共享目录的结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供一种基于容器的HDFS高可用实现方法,如图1所示,包括:
S11、通过HDFS集群系统中的Pod挂载预先分配的远端NFS共享目录。
S12、当Kubernetes重新调度HDFS集群中的异常Pod或容器时,通过所述异常Pod或者容器重新挂载所述远端NFS共享目录中的对应数据文件的保存目录,以恢复异常Pod或者容器中的数据,从而实现容器内HDFS的高可用性。
其中,所述NFS共享目录用于存放HDFS所有节点的数据文件的保存目录。
本发明实施例提供的基于容器的HDFS高可用实现方法,通过预先分配一个远端NFS共享目录,并将之与容器相对应,通过挂载远端NFS共享目录将HDFS节点的数据文件保存目录存放在远端NFS共享目录中,这样容器被销毁重建之后,通过重新挂载预先分配的远端NFS共享目录就可以恢复容器的用户数据,从而使得HDFS节点数据不会丢失。
可选地,步骤S11具体包括:
1、在所述远端NFS共享目录中为每个HDFS集群分配一个父目录;
2、在所述父目录中根据所述HDFS集群中的节点数量为每个HDFS节点分配一个HDFS节点文件夹;
3、定义kubernetes集群中的包括PV组件、PVC组件、RC组件、Pod和容器的资源对象。
进一步地,所述步骤3具体包括如下步骤:
1)创建PV组件,并将所述PV组件挂载所述远端NFS共享目录;
2)创建PVC组件,并建立所述PVC组件与所述PV组件的强绑定;
3)创建所述Pod,并通过yaml文件属性指定资源请求所述PVC组件;
4)创建所述RC组件,并通过yaml文件属性建立所述Pod与其包含的容器的目录挂载对应关系;
5)指定所述容器的挂载目录。
如图2所示,给出了容器挂载NFS共享目录的结构图,通过开源NFS Client API或是编写的程序,在NFS共享目录中根据业务含义为每个HDFS集群分配父目录,并在父目录中根据集群中节点数量为每一个HDFS节点分配一个文件夹,通过Kubernetes的资源定义文件,分别定义PV(Persistent Volume,Kubernetes用以定义存储的组件)、PVC(PersistentVolume Claim,Kubernetes用以定义存储请求的组件)、RC(Replication Controller,Kubernetes管理Pod副本组件)、Pod、Container(容器)等资源对象,其中,PV挂载NFS共享目录中预先分配的HDFS节点文件夹,依次建立:
1)HDFS节点文件夹->PV,创建PV并挂载NFS共享目录,通过Fabric8 API或是直接编写yaml文件,本方案采用Fabric8 API,示例如下:
//创建pv
PersistentVolume pv=new PersistentVolume();
……
//设置labels
meta.setLabels(ImmutableMap.<String,String>builder().put("pv-lable",name).pu t("del_lable",nameSpace).build());
……
//设置spec
PersistentVolumeSpec pvs=new PersistentVolumeSpec();
//设置spec-nfs
NFSVolumeSource nfsVolumeSource=new NFSVolumeSource();
//设置NFS SERVER地址
nfsVolumeSource.setServer("172.16.0.205");
//设置共享目录
nfsVolumeSource.setPath("/home/share");
pvs.setNfs(nfsVolumeSource);
//设置pv的spec
pv.setSpec(pvs);
……
2)创建PVC,并建立PV->PVC的强绑定,通过Kubernetes的label selector;
//创建PVC
PersistentVolumeClaim pvc=new PersistentVolumeClaim();
……
//设置spec
PersistentVolumeClaimSpec pvcs=new PersistentVolumeClaimSpec();
……
//设置spec-selector
LabelSelector labelSelector=new LabelSelector();
labelSelector.setMatchLabels(ImmutableMap.<String,String>builder().put("pv-lable",name).build());
pvcs.setSelector(labelSelector);
//设置pvc-spec
pvc.setSpec(pvcs);
……
3)创建Pod,并通过yaml文件属性指定资源请求PVC,PVC->Pod;
……
//设置pod-container-volumeMounts name和mountPath属性
List<VolumeMount>volumeMounts=new ArrayList<VolumeMount>();
//设置persistent文件夹
VolumeMount persistentVm=new VolumeMount();
persistentVm.setName(name+"-persistent");
persistentVm.setMountPath("/persistent");
volumeMounts.add(persistentVm);
……
4)创建RC,并通过yaml文件属性在建立Pod->Container的目录挂载对应关系。
……
Volume persistentV=new Volume();
persistentV.setName(name+"-persistent");
PersistentVolumeClaimVolumeSource
persistentVolumeClaimVolumeSource=
new PersistentVolumeClaimVolumeSource();
persistentVolumeClaimVolumeSource.setClaimName(pvcName);
persistentV.setPersistentVolumeClaim(persistentVolumeClaimVolumeSource);
volumes.add(persistentV);
……
5)指定Container中的挂载目录(例如/persistent)。修改镜像中HDFS的数据存放目录,如下:
(1)core-site.xml
<property>
<name>hadoop.tmp.dir</name>
<value>/persistent/hadoop/data/tmp</value>
</property>
此参数指定HDFS的数据存放目录,将其放到NFS的共享目录上。
从上述配置可以看出,通过将NFS共享目录映射到容器中,将HDFS所有节点的数据文件目录放到NFS的共享目录上,这样当Pod被Kubernetes重新调度后,Pod、Container本地的磁盘数据会丢失,但是远端NFS上共享目录/persistent中HDFS节点的数据不会丢失,当Pod被重新创建运行起来时,会重新挂载上这个目录,无需重新进行format操作,HDFS节点上的数据,便又可以在集群中使用了。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

Claims (2)

1.一种基于容器的HDFS高可用实现方法,其特征在于,包括:
通过HDFS集群系统中的Pod挂载预先分配的远端NFS共享目录;
当Kubernetes重新调度HDFS集群中的异常Pod或容器时,通过所述异常Pod或者容器重新挂载所述远端NFS共享目录中的对应数据文件的保存目录,以恢复异常Pod或者容器中的数据,从而实现容器内HDFS的高可用性;
其中,所述NFS共享目录用于存放HDFS所有节点的数据文件的保存目录;
所述通过HDFS集群系统中的Pod挂载预先分配的远端NFS共享目录包括:在所述远端NFS共享目录中为每个HDFS集群分配一个父目录;在所述父目录中根据所述HDFS集群中的节点数量为每个HDFS节点分配一个HDFS节点文件夹;定义kubernetes集群中的包括PV组件、PVC组件、RC组件、Pod和容器的资源对象。
2.根据权利要求1所述的方法,其特征在于,所述定义kubernetes集群中的包括PV组件、PVC组件、RC组件、Pod和容器的资源对象包括:
创建PV组件,并将所述PV组件挂载所述远端NFS共享目录;
创建PVC组件,并建立所述PVC组件与所述PV组件的强绑定;
创建所述Pod,并通过yaml文件属性指定资源请求所述PVC组件;
创建所述RC组件,并通过yaml文件属性建立所述Pod与其包含的容器的目录挂载对应关系;
指定所述容器的挂载目录。
CN201810980102.2A 2018-08-27 2018-08-27 基于容器的hdfs高可用实现方法 Active CN109165206B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810980102.2A CN109165206B (zh) 2018-08-27 2018-08-27 基于容器的hdfs高可用实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810980102.2A CN109165206B (zh) 2018-08-27 2018-08-27 基于容器的hdfs高可用实现方法

Publications (2)

Publication Number Publication Date
CN109165206A CN109165206A (zh) 2019-01-08
CN109165206B true CN109165206B (zh) 2022-02-22

Family

ID=64896666

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810980102.2A Active CN109165206B (zh) 2018-08-27 2018-08-27 基于容器的hdfs高可用实现方法

Country Status (1)

Country Link
CN (1) CN109165206B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110362384A (zh) * 2019-07-16 2019-10-22 北京奇艺世纪科技有限公司 一种资源分配方法、装置、电子设备及存储介质
CN111400271B (zh) * 2020-03-18 2023-09-19 北京东方金信科技股份有限公司 一种在hdfs插件中集成nfs的方法
CN111752759B (zh) * 2020-06-30 2022-07-08 重庆紫光华山智安科技有限公司 Kafka集群故障恢复方法、装置、设备及介质
CN112181317B (zh) * 2020-11-10 2022-08-19 新华三大数据技术有限公司 一种基于容器云的业务数据分级存储方法及装置
CN114064594B (zh) * 2021-11-22 2023-09-22 马上消费金融股份有限公司 数据处理方法和装置
CN114691357B (zh) * 2022-03-16 2022-12-27 东云睿连(武汉)计算技术有限公司 Hdfs容器化服务系统、方法、装置、设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101378411A (zh) * 2008-09-28 2009-03-04 深圳华为通信技术有限公司 移动终端、服务器及数据访问方法
CN102567442A (zh) * 2011-10-25 2012-07-11 曙光信息产业(北京)有限公司 一种分布式文件系统中元数据磁盘同步的方法
CN105554130A (zh) * 2015-12-18 2016-05-04 深圳中兴网信科技有限公司 基于分布式存储系统的NameNode切换方法和切换装置
CN106503158A (zh) * 2016-10-31 2017-03-15 深圳中兴网信科技有限公司 数据同步方法及装置
CN106790660A (zh) * 2017-01-18 2017-05-31 咪咕视讯科技有限公司 一种实现分布式存储系统的部署方法及装置
CN107070972A (zh) * 2016-12-30 2017-08-18 中国银联股份有限公司 一种分布式文件处理方法及装置
CN107193504A (zh) * 2017-06-02 2017-09-22 郑州云海信息技术有限公司 一种基于Kubernetes的自动化分配和创建应用存储的方法和系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10027546B1 (en) * 2014-12-29 2018-07-17 EMC IP Holding Company LLC Method and system for virtual storage array mobility and live migration using locator-identifier separation protocol
US11494447B2 (en) * 2015-01-13 2022-11-08 Google Llc Distributed file system for virtualized computing clusters
CA2923068C (en) * 2015-03-06 2022-07-19 Superna Business Consulting Inc. Method and system for metadata synchronization
CN105468476B (zh) * 2015-11-18 2019-03-08 盛趣信息技术(上海)有限公司 基于hdfs的数据灾备系统
CN107870734A (zh) * 2016-09-27 2018-04-03 苏宁云商集团股份有限公司 一种分布式文件系统的交互方法及装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101378411A (zh) * 2008-09-28 2009-03-04 深圳华为通信技术有限公司 移动终端、服务器及数据访问方法
CN102567442A (zh) * 2011-10-25 2012-07-11 曙光信息产业(北京)有限公司 一种分布式文件系统中元数据磁盘同步的方法
CN105554130A (zh) * 2015-12-18 2016-05-04 深圳中兴网信科技有限公司 基于分布式存储系统的NameNode切换方法和切换装置
CN106503158A (zh) * 2016-10-31 2017-03-15 深圳中兴网信科技有限公司 数据同步方法及装置
CN107070972A (zh) * 2016-12-30 2017-08-18 中国银联股份有限公司 一种分布式文件处理方法及装置
CN106790660A (zh) * 2017-01-18 2017-05-31 咪咕视讯科技有限公司 一种实现分布式存储系统的部署方法及装置
CN107193504A (zh) * 2017-06-02 2017-09-22 郑州云海信息技术有限公司 一种基于Kubernetes的自动化分配和创建应用存储的方法和系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
HPC-ABDS High Performance Computing Enhanced Apache Big Data Stack;G. C 等;《2015 15th IEEE/ACM International Symposium on Cluster, Cloud and Grid Computing》;20150709;第1057-1066页 *
Java EE企业级应用向Hadoop平台迁移的技术研究;郭庆;《自动化与信息工程》;20131215;第34卷(第6期);第15-20页 *

Also Published As

Publication number Publication date
CN109165206A (zh) 2019-01-08

Similar Documents

Publication Publication Date Title
CN109165206B (zh) 基于容器的hdfs高可用实现方法
US12019650B2 (en) Linking of content between installations of a content management system
US10831720B2 (en) Cloud storage distributed file system
CN109117425B (zh) 用于数字资产同步的方法、系统和介质
US11966414B2 (en) Synchronization of components of digital assets during live co-editing
US20190370362A1 (en) Multi-protocol cloud storage for big data and analytics
US20190370365A1 (en) Distributed transactions in cloud storage with hierarchical namespace
CN104615606B (zh) 一种Hadoop分布式文件系统及其管理方法
US20130218934A1 (en) Method for directory entries split and merge in distributed file system
CN111290826A (zh) 分布式文件系统、计算机系统和介质
CN112654978A (zh) 分布式异构存储系统中数据一致性实时检查的方法、设备和系统
CN110022338B (zh) 文件读取方法、系统、元数据服务器和用户设备
US12032847B2 (en) Cross-platform replication of logical units
CN111459619A (zh) 一种基于云平台实现服务的方法和装置
CN107566341B (zh) 一种基于联邦分布式文件存储系统的数据持久化存储方法及系统
CN105022779A (zh) 一种利用Filesystem API实现HDFS文件存取方法
US10587685B2 (en) Cross-platform replication of logical units
CN111522688B (zh) 分布式系统的数据备份方法及装置
US20120005162A1 (en) Managing Copies of Data Structures in File Systems
CN115964353B (zh) 一种分布式文件系统及其访问计量方法
CN116541365B (zh) 文件存储方法、装置、存储介质及客户端
CN116991815B (zh) 一种分布式存储系统的日志收集方法、装置、设备及介质
CN117459385A (zh) 一种Redis哨兵模式上云的实现方法
CN114676095A (zh) 基于流处理框架文件管理方法以及系统
CN116955488A (zh) 一种中间件集中管理方法、系统、电子设备及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant