上节已在Alluxio集群配置了Master HA容错处理,启动了ZooKeeper对Master进行管理,将HDFS配置为Alluxio的底层文件系统。本节进行命令行接口的案例实战。
Alluxio命令行接口为用户提供了基本的文件系统操作,可以使用以下命令来得到所有子命令:
root@master:~# alluxio fs
ALLUXIO_MASTER_ADDRESS is deprecated since version 1.1and will be remove in version 2.0.
Please use "ALLUXIO_MASTER_HOSTNAME" instead.
Usage: alluxio fs [generic options]
[cat
[checkConsistency [-r]
[checksum
[chgrp[-R]
[chmod[-R]
[chown[-R]
[copyFromLocal
[copyToLocal
[count
[cp [-R]
[createLineage
[deleteLineage
[du
[fileInfo
[free [-f]
[getCapacityBytes]
[getUsedBytes]
[head -c
[help
[leader]
[listLineages]
[load[--local]
[loadMetadata
[location
[ls[-d|-f|-p|-R|-h]
[masterInfo]
[mkdir
[mount[--readonly] [--shared] [--option
[mv
[persist
[pin
[report
[rm [-R][-U] [-alluxioOnly]
[setTtl[-action delete|free]
[stat [-f
[tail -c
[test[-d|-f|-e|-s|-z]
[touch
[unmount
[unpin
[unsetTtl
对于用Alluxio URI(如ls, mkdir)作为参数的fs子命令来说,参数应该要么是完全的AlluxioURI alluxio://
通配符输入,大多数需要路径参数的命令可以使用通配符以便简化使用,例如:
./bin/alluxio fs rm '/data/2014*'
该示例命令会将Data文件夹下以2014为文件名前缀的所有文件删除。
注意有些Shell会尝试自动补全输入路径,从而引起奇怪的错误(注意:以下例子中的数字可能不是21,这取决于你的本地文件系统中匹配文件的个数):
rm takes 1 arguments, not 21
作为一种绕开这个问题的方式,可以禁用自动补全功能(跟具体Shell有关,例如set -f),或者使用转义通配符,例如:
./bin/alluxio fs cat /\\*
注意是两个转义符号,这是因为该Shell脚本最终会调用一个Java程序运行,该Java程序将获取到转义输入参数(cat /\*)。
Alluxio大部分的命令含义可以参考Linux下同名命令,命令及其含义参见表6-5。
操作 |
语法 |
描述 |
cat |
cat "path" |
将Alluxio中的一个文件内容打印在控制台中 |
checkConsistency |
checkConsistency "path" |
检查Alluxio与底层存储系统的元数据一致性 |
checksum |
checksum "path" |
计算一个文件的md5校验码 |
chgrp |
chgrp "group" "path" |
修改Alluxio中的文件或文件夹的所属组 |
chmod |
chmod "permission" "path" |
修改Alluxio中文件或文件夹的访问权限 |
chown |
chown "owner" "path" |
修改Alluxio中文件或文件夹的所有者 |
copyFromLocal |
copyFromLocal "source path" "remote path" |
将“source path”指定的本地文件系统中的文件拷贝到Alluxio中"remote path"指定的路径 如果"remote path"已经存在该命令会失败 |
copyToLocal |
copyToLocal "remote path" "local path" |
将"remote path"指定的Alluxio中的文件复制到本地文件系统中 |
count |
count "path" |
输出"path"中所有名称匹配一个给定前缀的文件及文件夹的总数 |
cp |
cp "src" "dst" |
在Alluxio文件系统中复制一个文件或目录 |
du |
du "path" |
输出一个指定的文件或文件夹的大小 |
fileInfo |
fileInfo "path" |
输出指定的文件的数据块信息 |
free |
free "path" |
将Alluxio中的文件或文件夹移除,如果该文件或文件夹存在于底层存储中,那么仍然可以在那访问 |
getCapacityBytes |
getCapacityBytes |
获取Alluxio文件系统的容量 |
getUsedBytes |
getUsedBytes |
获取Alluxio文件系统已使用的字节数 |
help |
help "cmd" |
打印给定命令的帮助信息,如果没有给定命令,打印所有支持的命令的帮助信息 |
leader |
leader |
打印当前Alluxio leader master节点主机名 |
load |
load "path" |
将底层文件系统的文件或者目录加载到Alluxio中 |
loadMetadata |
loadMetadata "path" |
将底层文件系统的文件或者目录的元数据加载到Alluxio中 |
location |
location "path" |
输出包含某个文件数据的主机 |
ls |
ls "path" |
列出给定路径下的所有直接文件和目录的信息,例如大小 |
masterInfo |
masterInfo |
打印Alluxio master容错相关的信息,例如leader的地址、所有master的地址列表以及配置的Zookeeper地址 |
mkdir |
mkdir "path1" ... "pathn" |
在给定路径下创建文件夹,以及需要的父文件夹,多个路径用空格或者tab分隔,如果其中的任何一个路径已经存在,该命令失败 |
mount |
mount "path" "uri" |
将底层文件系统的"uri"路径挂载到Alluxio命名空间中的"path"路径下,"path"路径事先不能存在并由该命令生成。 没有任何数据或者元数据从底层文件系统加载。当挂载完成后,对该挂载路径下的操作会同时作用于底层文件系统的挂载点。 |
mv |
mv "source" "destination" |
将"source"指定的文件或文件夹移动到"destination"指定的新路径,如果"destination"已经存在该命令失败。 |
persist |
persist "path1" ... "pathn" |
将仅存在于Alluxio中的文件或文件夹持久化到底层文件系统中 |
pin |
pin "path" |
将给定文件锁定到内容中以防止剔除。如果是目录,递归作用于其子文件以及里面新创建的文件 |
report |
report "path" |
向master报告一个文件已经丢失 |
rm |
rm "path" |
删除一个文件,如果输入路径是一个目录该命令失败 |
setTtl |
setTtl "path" "time" |
设置一个文件的TTL时间,单位毫秒 |
stat |
stat "path" |
显示文件和目录指定路径的信息 |
tail |
tail "path" |
将指定文件的最后1KB内容输出到控制台 |
test |
test "path" |
测试路径的属性,如果属性正确,返回0,否则返回1 |
touch |
touch "path" |
在指定路径创建一个空文件 |
unmount |
unmount "path" |
卸载挂载在Alluxio中"path"指定路径上的底层文件路径,Alluxio中该挂载点的所有对象都会被删除,但底层文件系统会将其保留。 |
unpin |
unpin "path" |
将一个文件解除锁定从而可以对其剔除,如果是目录则递归作用 |
unsetTtl |
unsetTtl "path" |
删除文件的ttl值 |
表 6 - 5 Alluxio命令行接口的命令及其含义
下面举例给出一些命令的案例实战。
1) copyFromLocal:将本地文件系统中的文件拷贝到Alluxio中,如果你运行该命令的机器上有Alluxio Worker,那么数据便会存放在这个Worker上,否则,数据将会随机地复制到一个运行Alluxio Worker的远程节点上。如果该命令指定的目标是一个文件夹,那么这个文件夹及其所有内容都会被递归复制到Alluxio中。
首先检查Alluxio的根目录文件。
root@master:/usr/local/alluxio-1.7.0-hadoop-2.6# alluxiofs ls /
drwxr-xr-x root root 0 PERSISTED 02-14-201814:01:34:981 DIR /default_tests_files
drwxr-xr-x root supergroup 2 PERSISTED 02-14-2018 14:01:34:993 DIR /journal
使用copyFromLocal命令将Conf目录从Linux本地文件系统复制到Alluxio系统。
root@master:/usr/local/alluxio-1.7.0-hadoop-2.6# alluxio fs copyFromLocal ./conf /conf
Copied file:///usr/local/alluxio-1.7.0-hadoop-2.6/conf to/conf
检查Alluxio的根目录里面已上传/conf目录。
root@master:/usr/local/alluxio-1.7.0-hadoop-2.6# alluxiofs ls /
drwxr-xr-x root root 0 PERSISTED 02-14-201814:01:34:981 DIR /default_tests_files
drwxr-xr-x root supergroup 2 PERSISTED 02-14-201814:01:34:993 DIR /journal
drwxr-xr-x root root 7 NOT_PERSISTED 02-14-201814:18:40:098 DIR /conf
2) copyToLocal:将Alluxio中的文件复制到本地文件系统中,如果该命令指定的目标是一个文件夹,那么该文件夹及其所有内容都会被递归地复制。
root@master:/usr/local/alluxio-1.7.0-hadoop-2.6#alluxio fs copyToLocal /conf
/usr/local/setup_tools/conf
Create directory: file:///usr/local/setup_tools/conf
Copied /conf/core-site.xml.template tofile:///usr/local/setup_tools/conf/core-site.xml.template
Copied /conf/alluxio-site.properties tofile:///usr/local/setup_tools/conf/alluxio-site.properties
Copied /conf/metrics.properties.template tofile:///usr/local/setup_tools/conf/metrics.properties.template
Copied /conf/alluxio-env.sh.template tofile:///usr/local/setup_tools/conf/alluxio-env.sh.template
Copied /conf/masters tofile:///usr/local/setup_tools/conf/masters
Copied /conf/workers tofile:///usr/local/setup_tools/conf/workers
Copied /conf/log4j.properties tofile:///usr/local/setup_tools/conf/log4j.properties
root@master:/usr/local/alluxio-1.7.0-hadoop-2.6#
Linux的本地文件目录检查已拷贝Conf目录。
root@master:/usr/local/setup_tools# cd conf
root@master:/usr/local/setup_tools/conf# ls
alluxio-env.sh.template alluxio-site.properties core-site.xml.template log4j.properties masters metrics.properties.template workers
root@master:/usr/local/setup_tools/conf#
3) ls 和 lsr
ls命令列出一个文件夹下的所有子文件和子文件夹及文件大小、上次修改时间以
及文件的内存状态。对一个文件使用ls命令仅仅会显示该文件的信息。 如果Alluxio还没有这部分元数据,ls命令将任意文件或者目录下的子目录的元数据从底层存储系统加载到Alluxio命名空间。ls命令查询底层文件系统中匹配给定路径的文件或者目录,然后会在Alluxio中创建一个该文件的镜像文件。只有元数据,比如文件名和大小,会以这种方式加载而不发生数据传输。
选项:
-d 选项将目录作为普通文件列出。例如,ls -d /显示根目录的属性。
-f 选项强制加载目录中的子目录的元数据。默认方式下,只有当目录首次被列出时,才会加载元数据。
-h 选项以可读方式显示文件大小。
-p 选项列出所有固定的文件。
-R选项可以递归的列出输入路径下的所有子文件和子文件夹,并列出从输入路径
开始的所有子树。
使用ls和lsr命令查看Alluxio文件系统下的文件信息。其中lsr命令可以递归地
查看子目录。这里给出了带路径前缀和使用默认前缀的两种path。
root@master:~# alluxio fsls /
drwxr-xr-x root root 0 PERSISTED 02-14-2018 14:01:34:981 DIR /default_tests_files
drwxr-xr-x root supergroup 2 PERSISTED 02-14-2018 14:01:34:993 DIR /journal
drwxr-xr-x root root 7 NOT_PERSISTED 02-14-2018 14:18:40:098 DIR /conf
lsr命令递归地查看子目录。
root@master:~# alluxio fslsr /conf/
WARNING: lsr is deprecated.Please use ls -R instead.
-rw-r--r-- root root 2078 NOT_PERSISTED 02-14-2018 14:18:40:165 100%/conf/alluxio-env.sh.template
-rw-r--r-- root root 3737 NOT_PERSISTED 02-14-2018 14:18:41:280 100%/conf/core-site.xml.template
-rw-r--r-- root root 1318 NOT_PERSISTED 02-14-2018 14:18:41:333 100%/conf/alluxio-site.properties
-rw-r--r-- root root 614 NOT_PERSISTED 02-14-2018 14:18:41:588 100%/conf/workers
-rw-r--r-- root root 7069 NOT_PERSISTED 02-14-2018 14:18:41:838 100%/conf/log4j.properties
-rw-r--r-- root root 1058 NOT_PERSISTED 02-14-2018 14:18:41:891 100%/conf/masters
-rw-r--r-- root root 2966 NOT_PERSISTED 02-14-2018 14:18:41:931 100%/conf/metrics.properties.template
带路径前缀的Path,路径前缀为alluxio://master:19998。
root@master:~# alluxio fs ls alluxio://master:19998/
drwxr-xr-x root root 18 PERSISTED 02-14-2018 14:01:34:981 DIR /default_tests_files
drwxr-xr-x root supergroup 2 PERSISTED 02-14-2018 14:01:34:993 DIR /journal
drwxr-xr-x root root 7 NOT_PERSISTED 02-14-2018 14:18:40:098 DIR /conf
4) count:输出Alluxio中所有名称匹配一个给定前缀的文件及文件夹的总数,以及总的大小,该命令对文件夹中的内容递归处理。当用户对文件有预定义命名习惯时,count命令很有用。例如:若文件是以它们的创建日期命名,使用count命令可以获取任何日期、月份以及年份的所有文件的数目以及它们的总大小。
使用count命令统计当前路径下的目录、文件信息,包括文件数、目录树以及总的大小。
root@master:~# alluxio fs count /
File Count Folder Count TotalBytes
27 8 20316
5) cat 将Alluxio中的一个文件内容全部打印在控制台中,这在用户确认一个文件的内容是否和预想的一致时非常有用。如果你想将文件拷贝到本地文件系统中,使用copyToLocal命令。
使用cat命令查看指定文件的内容。
root@master:~# alluxio fs cat /conf/workers
…….
worker1
worker2
worker3
6) mkdir、rm、rmr和touch
l mkdir:在Alluxio中创建一个新的文件夹。该命令可以递归创建不存在的父目录。注意在该文件夹中的某个文件被持久化到底层文件系统之前,该文件夹不会在底层文件系统中被创建。对一个无效的或者已存在的路径使用mkdir命令会失败。
l rm:删除文件,不能删除目录。rm命令将一个文件从Alluxio以及底层文件系统中删除。该命令返回后该文件便立即不可获取,但实际的数据要过一段时间才被真正删除。加上-R选项可以递归的删除文件夹中所有内容后再删除文件夹自身。加上-U选项将会在尝试删除持久化目录之前不会检查将要删除的UFS内容是否与Alluxio一致。
l rmr:删除目录,支持递归,包含子目录和文件。注意,递归删除根目录是无效的。
l touch:创建文件,不能创建已经存在的文件。touch命令创建一个空文件。由该命令创建的文件不能被覆写,大多数情况是用作标记。例如:使用alluxiofs touch /data/yesterday/_DONE_命令可以创建一个空文件用于标记一个文件夹的分析任务完成了。
使用mkdir创建目录,创建/mydir的目录。
root@master:~# alluxio fs mkdir /mydir
Successfully created directory /mydir
root@master:~# alluxio fs ls /
drwxr-xr-x root root 18 PERSISTED 02-14-201814:01:34:981 DIR /default_tests_files
drwxr-xr-x root supergroup 2 PERSISTED 02-14-201814:01:34:993 DIR /journal
drwxr-xr-x root root 7 NOT_PERSISTED 02-14-201814:18:40:098 DIR /conf
drwxr-xr-x root root 0 NOT_PERSISTED 02-14-201814:45:36:810 DIR /mydir
使用touch命令创建文件,使用alluxio fs lsr递归查询文件。
root@master:~# alluxio fs touch /mydir2/2/2/my.txt
/mydir2/2/2/my.txt has been created
root@master:~# alluxio fs lsr /mydir2
WARNING: lsr is deprecated. Please use ls -R instead.
drwxr-xr-x root root 1 NOT_PERSISTED 02-14-201814:48:05:221 DIR /mydir2/2
drwxr-xr-x root root 1 NOT_PERSISTED 02-14-201814:48:05:221 DIR /mydir2/2/2
-rw-r--r-- root root 0 NOT_PERSISTED 02-14-201814:48:05:221 100% /mydir2/2/2/my.txt
使用alluxio fs rm -R命令删除目录。
root@master:~# alluxio fs rm -R /mydir
/mydir has been removed
使用alluxio fs ls /检查/mydir目录已经删除。
root@master:~# alluxio fs ls /
drwxr-xr-x root root 18 PERSISTED 02-14-201814:01:34:981 DIR /default_tests_files
drwxr-xr-x root supergroup 2 PERSISTED 02-14-201814:01:34:993 DIR /journal
drwxr-xr-x root root 7 NOT_PERSISTED 02-14-201814:18:40:098 DIR /conf
drwxr-xr-x root root 1 NOT_PERSISTED 02-14-2018 14:48:05:221 DIR /mydir2
7) location:返回包含一个给定文件包含的数据块的所有Alluxioworker的地址。 例如:当使用某个计算框架进行作业时,使用location命令可以调试数据局部性。
使用location命令查询当前 /conf/workers文件位于worker1节点。
root@master:~# alluxio fs location /conf/workers
/conf/workers with file id 16877879295 is on nodes:
worker1
8) report:向Alluxio master标记一个文件为丢失状态。该命令应当只对使用LineageAPI创建的文件使用。将一个文件标记为丢失状态将导致Master调度重计算作业从而重新生成该文件。例如:使用report命令可以强制重新计算生成一个文件。
./bin/alluxio fs report /tmp/lineage-file
9) pin:对Alluxio中的文件或文件夹进行标记。该命令只针对元数据进行操作,不会导致任何数据被加载到Alluxio中。如果一个文件在Alluxio中被标记了,该文件的任何数据块都不会从Alluxio Worker中被剔除。如果存在过多的被锁定的文件,Alluxio Worker将会剩余少量存储空间,从而导致无法对其他文件进行缓存。如果管理员对作业运行流程十分清楚,那么可以使用pin命令手动提高性能。
对/conf/alluxio-env.sh.template执行Pin操作之前的界面如图6-19所示。
图 6 - 19 Alluxio文件系统pin操作以前的界面
使用Pin命令对/conf/alluxio-env.sh.template进行标记。
root@master:~# alluxio fs pin/conf/alluxio-env.sh.template
File '/conf/alluxio-env.sh.template' was successfullypinned.
对/conf/alluxio-env.sh.template执行Pin操作之后的界面如图6-20所示。Pin标识为YES。
图 6 - 20 Alluxio文件系统pin操作以后的界面
10) free:请求Alluxio master将一个文件的所有数据块从Alluxio Worker中剔除,如果命令参数为一个文件夹,那么会递归作用于其子文件和子文件夹。该请求不保证会立即产生效果,因为该文件的数据块可能正在被读取。free命令在被Master接收后会立即返回。注意该命令不会删除底层文件系统中的任何数据,而只会影响存储在Alluxio中的数据。另外,该操作也不会影响元数据,这意味着如果运行ls命令,该文件仍然会被显示。例如:使用free命令可以手动管理Alluxio的数据缓存。
对/default_tests_files/BASIC_CACHE_ASYNC_THROUGH执行Free操作之前的界面如图6-21所示。
图 6 - 21 Alluxio文件系统free操作之前的界面
执行free命令将BASIC_CACHE_ASYNC_THROUGH文件的所有数据块从AlluxioWorker中剔除。
root@master:~#alluxio fs free /default_tests_files/BASIC_CACHE_ASYNC_THROUGH
/default_tests_files/BASIC_CACHE_ASYNC_THROUGH wassuccessfully freed from memory.
对/default_tests_files/BASIC_CACHE_ASYNC_THROUGH执行Free操作之后的界面如图6-22所示。
图 6 - 22 Alluxio文件系统free操作以后的界面