共计 2625 个字符,预计需要花费 7 分钟才能阅读完成。
问题
JuiceFS 是一个基于对象存储的分布式文件系统,在之前跟对象存储比拟的文章中曾经介绍了 JuiceFS 可能保证数据的强一致性和极高的读写性能,因而齐全能够用来代替 HDFS。然而数据平台整体迁徙通常是一个费时费力的大工程,须要做到迁徙超大规模数据的同时尽量不影响下层业务。上面将会介绍如何通过 JuiceFS 的迁徙工具来实现平滑迁徙 HDFS 中的海量数据到 JuiceFS。
平滑迁徙计划
数据平台除了咱们在 HDFS 上理论看到的文件以外,其实还有一些同样重要的信息,也就是所谓的「元数据」,这些元数据存储在相似 Hive Metastore 这样的零碎里。因而当咱们议论数据迁徙时不能把这两种数据拆分开来,必须同时思考,迁徙完数据当前须要同时更新 Hive 表或者分区的地位(LOCATION)信息,如果任何一种数据出了问题都会对业务方造成影响。
为了保证数据和元数据的一致性,通常的做法是在迁徙完数据当前同步更新元数据中的地位信息,但当数据规模比拟大,并且业务又可能更新数据时,很难保证数据拷贝和更新地位信息是个原子操作,迁徙过程中可能导致数据失落,影响整体迁徙的可靠性。甚至须要以暂停业务为代价来实现,或者在业务中采纳双写等机制来实现在线迁徙,侵入业务逻辑,费时费力。
如果可能在迁徙过程中为数据拜访提供对立的门路来屏蔽理论的数据地位,实现元数据和实在数据地位的解耦,将会大大降低整体迁徙的危险。文件系统的符号链接就能够达到这个成果,JuiceFS 也反对符号链接,并且反对跨文件系统的符号链接,借助它能够为多个文件系统提供对立的拜访入口,造成对立命名空间。
符号链接是操作系统中广泛应用的概念,你能够通过符号链接实现在一个目录树中治理扩散在各个中央的数据。对应的,咱们也能够通过 JuiceFS 的符号链接个性实现在一个文件系统中治理多个存储系统。其实符号链接这个性能早在 2013 年 Hadoop 社区就曾经想要在 HDFS 上实现(HADOOP-10019),但遗憾的是目前为止还没残缺反对。借助符号链接即可在 JuiceFS 上治理包含但不限于 HDFS、对象存储在内的各种存储系统,外表上看起来拜访的是 JuiceFS,但理论拜访的是底层实在的存储。
同时,JuiceFS 的原子重命名(rename)操作也能在数据迁徙过程中施展关键作用。JuiceFS 通过符号链接来跳转回原始数据,但当数据齐全拷贝过去当前须要笼罩这个符号链接,这个时候原子重命名就能保证数据的安全性和可靠性,避免出现数据失落和损坏。
此外,JuiceFS 还能够通过配置文件和非凡的标记文件来动静感知到迁徙过程,并在新增和删除文件时进行额定的查看,确保新创建的文件也会呈现在迁徙后的目录中,并且确保要删除的文件也能从新零碎中删掉。对于更简单的重命名操作,也有相似的机制来保障正确性。
有了方才介绍的 JuiceFS 的这些个性,就能够实现在数据迁徙时别离迁徙数据和元数据,同时整个迁徙过程对于业务是齐全通明的。上面解说具体的迁徙操作步骤。
操作步骤
步骤一:将 JuiceFS 作为 HDFS 的拜访入口
在 JuiceFS 上给 HDFS 的所有第一级目录(或文件)创立对应的符号链接(假设不会再在 HDFS 根目录创立内容),之后通过 jfs://name/<path>
就能残缺拜访 HDFS 外面的内容,两者是齐全等价的。如下图所示。
步骤二:应用 JuiceFS 来拜访 HDFS 中的数据
这一步有两种实现办法。第一种是批改 Hive Metastore 中表或者分区的 LOCATION 为对应的 JuiceFS 门路,例如之前是 hdfs://ns/user/test.db/table_a
,新门路则为 jfs://name/user/test.db/table_a
。第二种办法是将 fs.hdfs.impl
批改为 com.juicefs.MigratingFileSystem
,这样能够维持 LOCATION 不变。
这两种办法的目标都是为了将所有拜访 HDFS 的入口改成拜访 JuiceFS,因为步骤一曾经创立了指向 HDFS 的符号链接,所以不会影响现有业务拜访 HDFS。
步骤三:迁徙目录构造
从这一步开始咱们会正式进行迁徙工作,不过先不焦急把数据拷贝过去,咱们须要先把目录构造从 HDFS 中映射过去。你能够抉择你想要迁徙的表或目录,而后通过 JuiceFS 提供的工具疾速将 HDFS 上的目录构造迁徙到 JuiceFS 上。以迁徙 hdfs://ns/user/test.db/table_a 为例,这个目录中的所有子目录将会逐级在 JuiceFS 中创立。因为这一步仅波及元数据操作,没有数据拷贝,因而能够以极快的速度将历史数据的目录构造从 HDFS 迁徙到 JuiceFS 上。同时须要留神的是,所有文件依然通过符号链接的形式指向 HDFS 中的门路。如下图所示,红色局部即示意在 JuiceFS 上新创建的目录。
同样的,实现这一步当前不会影响现有业务拜访 HDFS,然而新写入的数据将会间接存储到 JuiceFS 中。
步骤四:迁徙数据
这一步将会真正开始拷贝数据,通过 JuiceFS 的迁徙工具并发地将上一步遗留的指向 HDFS 中一般文件的符号链接替换为实在的数据。最终迁徙目录中将不再会有符号链接,也就示意这个目录曾经迁徙实现。如下图所示,红色局部曾经从符号链接变成了一般文件。
反向迁徙
在数据迁徙过程中也能够通过反向迁徙随时回滚,来撤销迁徙操作。如果曾经批改了元数据中的地位信息,JuiceFS 迁徙工具能确保反向迁徙时复原回原来的状态。如果曾经有新增的数据写入到 JuiceFS 中,也能把这些新增数据拷贝回原始的存储系统。
总结
通过后面的操作步骤介绍,能够看到整个迁徙过程齐全不会影响现有业务持续拜访 HDFS,从开始到完结对于业务来说都是无感知的。JuiceFS 提供了欠缺的工具来简化迁徙流程,具体的操作指南请参考 JuiceFS 官网文档。
本篇文章以将 HDFS 迁徙到 JuiceFS 为例阐明了 JuiceFS 的符号链接个性,其实你齐全能够施展脑洞,把 JuiceFS 的符号链接利用在更多更广的场景,例如在不同 HDFS 集群之间进行数据迁徙、跨云跨区的数据迁徙等。正是因为有了弱小的符号链接个性,通过 JuiceFS 来提供对立的数据拜访层和视图,才使得很多时候无奈平滑操作的事件成为了可能。
举荐浏览: 知乎 x JuiceFS:利用 JuiceFS 给 Flink 容器启动减速
如有帮忙的话欢送关注咱们我的项目 Juicedata/JuiceFS 哟!(0ᴗ0✿)