文章目录
在多次测试和各种奇奇怪怪的操作之后,我发现我设置的根挂载点 /tmp/ufs
中没有任何文件,但是通过 fs ls /
仍能查出来 Alluxio
空间中是有数据的。一顿凌乱之后,整理了一下目前自己理解的东西,期望能找寻蛛丝马迹。
在使用本地运行项目时,挂载的是 RAMFS文件系统,该系统是使用 RAM 作为文件存储系统,运行速度较快。
因为在本地运行 Alluxio
项目时,Alluxio
的一个 master
节点和一个 worker
节点都在本地,所以可能需要区分一下 worker
的本地缓存路径 /mnt/ramdisk
和存放所有文件元数据的 master
节点的空间(或者路径)。
Alluxio
和底层存储系统是两个独立的东西,底层存储系统是存储设备,可以永久的存放数据,数据需要放在 Alluxio
中,这样 Alluxio
才可以管理底层存储系统中的数据。
0. 底层存储系统和Alluxio
在 Alluxio
中,经常出现底层存储系统 UFS。这两个概念诶,
- 底层存储系统:是实际存放文件(文件)的地方,存放的东西是实实在在的文件,这些文件(数据)是永久存在的,除非我们主动的删除。
Alluxio
:存放的是文件的元数据,也就是文件的信息,并不是文件本身。
举个例子:
1. Alluxio 中 fs ls 命令
ls
命令列出一个文件夹下的所有子文件和子文件夹及文件大小、上次修改时间以及文件的内存状态。对一个文件使用ls
命令仅仅会显示该文件的信息。
ls
命令也将任意文件或者目录下的子目录的元数据从底层存储系统加载到Alluxio命名空间,如果Alluxio还没有这部分元数据的话。
通过命令 fs ls [path]
显示某个文件夹下的所有文件信息。所查询出来的文件均是在 Alluxio 命名空间中的。
需要注意的是,路径 path
是 alluxio
空间中的路径,而不是底层存储系统中实际存放文件的路径。
# 显示Alluxio根目录下的所有文件信息
bin/alluxio fs ls /
2. Alluxio 设置挂载根目录
在项目的配置文件 conf/alluxio-site.properties
中设置 Alluxio 空间(命名空间)的根目录(Alluxio
的根目录是 /
)。
alluxio.master.mount.table.root.ufs=/tmp/ufs
(这个路径是底层存储中的路径,如果是使用默认的配置启动本地运行,就会将该目录挂载到 Alluxio
的根目录)
每个挂载在 Alluxio
中的底层存储系统,有两个命名空间。
在 Alluxio
的命名空间中,有 Alluxio
给所有底层存储系统提供的统一的命名空间,使用统一的路径格式(alluxio://[path]
)就可以访问到不同底层存储系统中的文件。
此外,每个底层存储系统还有一个自己的命名空间,称为 ufs
命名空间。在这个空间中,不同类型的存储系统命名规则不同。
设置完 Alluxio
挂载目录,此时,底层的存储系统和 Alluxio
还是两个独立的个体,他们之间没有任何联系,即使想要使用本地的文件系统作为底层持久性的存储系统。下一步,需要将底层存储系统和 Alluxio
联系起来,联系的方式,就是挂载。
3. 挂载底层存储系统(UFS)
设置完 Alluxio
的根目录后,还没有将底层存储系统和 Alluxio
联系起来。下一步将本地的底层存储系统挂载在 Alluxio
根目录下。
3.1 方案一:bin/alluxio-mount.sh
使用以下命令将 RAMFS文件系统挂载到 Alluxio
空间中:
./bin/alluxio-mount.sh SudoMount
使用以下命令启动项目,运行
bin/alluxio-start.sh local SudoMount
# 该启动方式会使用RAMFS文件系统
bin/alluxio-start.sh local NoMount
# 该启动方式会使用配置文件中设置的路径,比如我设置的是 /tmp/ufs
3.2 方案二:fs mount
fs mount [alluxio 中的路径] [file://本地路径]
将本地存储系统中的路径挂载到 Alluxio
空间中。
注意:
- 2个路径都是目录
- 本地中的文件路径前添加
file://
,是因为本地存储系统的访问路径。不同的存储系统,前面的访问标志不同。
以下例子是把 /tmp/ufs/apache-maven-3.8.4
挂载在 Alluxio
空间的 /apche
中。可以将 /tmp/ufs
挂载到 Alluxio
中的一个目录, 也挂载其他路径(/tmp/ufs
之外)的目录也可以。
挂载成功之后会有提示信息,然后就可以在通过 fs ls /
查询 Alluxio
空间中是否有刚才挂载的路径。
3.3 其他
我试过把文件原件放在配置文件 conf/alluxio-site.properties
中设置的目录 /tmp/ufs
中,或者是 /mnt/ramdisk/alluxioworker/
,并不行。
启动项目之后,就会在/mnt/ramdisk
下生成一个目录 alluxioworker/
,这个目录是本机作为一个 worker
节点的存储路径,所以把文件原件放在这个路径下,不会在 Alluxio
的 master
节点中生成元数据。
我之前使用的方式是
- 命令
fs copyFromLocal
从本地复制数据到Alluxio
中 - 命令
fs load /
将Alluxio
根目录下的文件加载到Alluxio
中
这种方式并不是挂载底层存储系统。使用的场景是将挂载的底层存储系统之外的数据文件(不在底层存储系统中)复制到 Alluxio
的指定目录下,然后加载到 Alluxio
空间中。因为这些数据文件不在底层存储系统中永久存储,所以之后如果想永久保存这些数据文件,需要将这些数据设置持久化。