更新时间:2023-09-14 GMT+08:00

Alluxio常用操作

前期准备

  1. 创建安装Alluxio组件的集群。
  2. 以root用户登录集群的主Master节点,密码为用户创建集群时设置的root密码。
  3. 执行如下命令,配置环境变量。

    source /opt/client/bigdata_env

使用Alluxio Shell

Alluxio shell包含多种与Alluxio交互的命令行操作。

  • 要查看文件系统操作命令列表。

    alluxio fs

  • 使用ls命令列出Alluxio里的文件。例如列出根目录下所有文件。

    alluxio fs ls /

  • 使用copyFromLocal命令可以复制本地文件到Alluxio中。

    alluxio fs copyFromLocal /home/test_input.txt /test_input.txt

    命令执行后回显:
    Copied file:///home/test_input.txt to /test_input.txt
  • 再次使用ls命令列出Alluxio中的文件,可以看到刚刚拷贝的test_input.txt文件。

    alluxio fs ls /

    命令执行后回显:
    12       PERSISTED 11-28-2019 17:10:17:449 100% /test_input.txt

    输出显示test_input.txt文件在Alluxio中,各参数含义为文件的大小、是否被持久化、创建日期、Alluxio中这个文件的缓存占比、文件名。

  • 使用cat命令打印文件的内容。

    alluxio fs cat /test_input.txt

    命令执行后回显:
    Test Alluxio

Alluxio中的挂载功能

Alluxio通过统一命名空间的特性统一了对存储系统的访问。详情请参考:https://docs.alluxio.io/os/user/2.0/cn/advanced/Namespace-Management.html

这个特性允许用户挂载不同的存储系统到Alluxio命名空间中并且通过Alluxio命名空间无缝地跨存储系统访问文件。

  1. 在Alluxio中创建一个目录作为挂载点。
    alluxio fs mkdir /mnt
    Successfully created directory /mnt
  2. 挂载一个已有的OBS文件系统到Alluxio(前提:给集群配置有OBS OperateAccess权限的委托,具体请参见配置存算分离集群(委托方式))。此处以obs-mrstest文件系统为例,请根据实际情况替换文件系统名。
    alluxio fs mount /mnt/obs obs://obs-mrstest/data
    Mounted obs://obs-mrstest/data at /mnt/obs
  3. 通过Alluxio命名空间列出OBS文件系统中的文件。使用ls命令列出OBS挂载目录下的文件。
    alluxio fs ls /mnt/obs
    38       PERSISTED 11-28-2019 17:42:54:554   0% /mnt/obs/hive_load.txt
    12       PERSISTED 11-28-2019 17:43:07:743   0% /mnt/obs/test_input.txt

    新挂载的文件和目录也可以通过Alluxio WebUI查看。

  4. 挂载完成后,通过Alluxio统一命名空间,可以无缝地从不同存储系统中交互数据。例如,使用ls -R命令,递归地列举出一个目录下的所有文件。
    alluxio fs ls -R /
            0       PERSISTED 11-28-2019 11:15:19:719  DIR /app-logs
            1       PERSISTED 11-28-2019 11:18:36:885  DIR /apps
            1       PERSISTED 11-28-2019 11:18:40:209  DIR /apps/templeton
    239440292       PERSISTED 11-28-2019 11:18:40:209   0% /apps/templeton/hive.tar.gz
    .....
            1       PERSISTED 11-28-2019 19:00:23:879  DIR /mnt
            2       PERSISTED 11-28-2019 19:00:23:879  DIR /mnt/obs
           38       PERSISTED 11-28-2019 17:42:54:554   0% /mnt/obs/hive_load.txt
           12       PERSISTED 11-28-2019 17:43:07:743   0% /mnt/obs/test_input.txt
    .....

    输出显示了Alluxio文件系统根目录(默认值是HDFS的根目录,即hdfs://hacluster/)中来源于挂载存储系统的所有文件。/app-logs和/apps目录在HDFS文件系统中,/mnt/obs/目录在OBS中。

用Alluxio加速数据访问

由于Alluxio利用内存存储数据,它可以加速数据的访问。例如:

  1. 上传一个文件test_data.csv(文件是一份记录了食谱的样本)到obs-mrstest文件系统的/data目录下。通过ls命令显示文件状态:
    alluxio fs ls /mnt/obs/test_data.csv
    294520189       PERSISTED 11-28-2019 19:38:55:000   0% /mnt/obs/test_data.csv

    输出显示了该文件在Alluxio中缓存占比为0%,即不在Alluxio内存中。

  2. 统计该文件中单词"milk"出现的次数,并计算耗时。
    time alluxio fs cat /mnt/obs/test_data.csv | grep -c milk
    52180
    
    real    0m10.765s
    user    0m5.540s
    sys     0m0.696s
  3. 第一次读取数据后会将数据放在内存中,Alluxio再次读取时可以提高访问该数据的速度。例如:在通过cat命令获取文件后,用ls命令再查看文件的状态。
    alluxio fs ls /mnt/obs/test_data.csv
    294520189       PERSISTED 11-28-2019 19:38:55:000 100% /mnt/obs/test_data.csv

    输出显示文件已经100%被加载到Alluxio中。

  4. 再次访问该文件,统计单词“eggs”出现的次数,并计算耗时。
    time alluxio fs cat /mnt/obs/test_data.csv | grep -c eggs
    59510
    
    real    0m5.777s
    user    0m5.992s
    sys     0m0.592s

    对比两次耗时可以看出存储在Alluxio内存中的数据,数据访问耗时明显缩短。