Ozone Shell
Ozone shell 是从命令行与 Ozone 交互的主要接口。它在底层使用 Java API。
有些功能只能通过 ozone sh 命令才能使用。例如:
- 创建带配额的卷
- 管理内部 ACL
- 创建带加密密钥的桶
这些都是一次性的管理任务。应用程序可以不使用此 CLI,而通过其他接口(如 Hadoop 兼容文件系统(o3fs 或 ofs)或 S3 接口)来使用 Ozone。
Ozone shell 的帮助可以在 对象(object) 级别或 操作(action) 级别调用。
例如:
ozone sh volume --help将会显示卷的所有可用操作。
也可以调用它来解释某个特定的操作,例如:
ozone sh volume create --help它将打印卷 create 命令的命令行选项。
通用命令格式
Ozone shell 命令采用以下形式:
ozone sh object action url
ozone 脚本用于调用所有 Ozone 子命令。Ozone shell 通过 sh 命令调用。
对象可以是卷、桶或键。动作则是 create、list、delete 等各种动词。
根据所执行的动作,Ozone URL 可以指向卷、桶或键,格式如下:
[schema][server:port]/volume/bucket/key其中,
- 协议(Schema) - 应为
o3,它是访问 Ozone API 的原生 RPC 协议。该协议为可选项。 - 服务器:端口 - 这是 Ozone Manager 的地址。如果省略端口,则使用
ozone-site.xml中配置的默认端口。
有关更多详情,请参阅卷命令、桶命令和键命令章节。
卷操作
卷是该层级结构中的顶层元素,仅由管理员管理。可以另外指定配额和属主用户。
命令示例:
ozone sh volume create /vol1$ ozone sh volume info /vol1
{
"metadata" : { },
"name" : "vol1",
"admin" : "hadoop",
"owner" : "hadoop",
"creationTime" : "2020-07-28T12:31:50.112Z",
"modificationTime" : "2020-07-28T12:31:50.112Z",
"acls" : [ {
"type" : "USER",
"name" : "hadoop",
"aclScope" : "ACCESS",
"aclList" : [ "ALL" ]
}, {
"type" : "GROUP",
"name" : "users",
"aclScope" : "ACCESS",
"aclList" : [ "ALL" ]
} ],
"quota" : 1152921504606846976
}$ ozone sh volume list /
[ {
"metadata" : { },
"name" : "s3v",
"admin" : "hadoop",
"owner" : "hadoop",
"creationTime" : "2020-07-27T11:32:22.314Z",
"modificationTime" : "2020-07-27T11:32:22.314Z",
"acls" : [ {
"type" : "USER",
"name" : "hadoop",
"aclScope" : "ACCESS",
"aclList" : [ "ALL" ]
}, {
"type" : "GROUP",
"name" : "users",
"aclScope" : "ACCESS",
"aclList" : [ "ALL" ]
} ],
"quota" : 1152921504606846976
}, {
....
} ]如果卷为空,我们可以使用下面的命令删除该卷。
$ ozone sh volume delete /vol1
Volume vol1 is deleted如果卷中包含任何存储桶或键,我们可以递归删除该卷。这将删除卷内的所有键和存储桶,然后删除卷本身。运行此命令后,被删除的内容无法恢复。
$ ozone sh volume delete -r /vol1
This command will delete volume recursively.
There is no recovery option after using this command, and no trash for FSO buckets.
Delay is expected running this command.
Enter 'yes' to proceed': yes
Volume vol1 is deleted存储桶操作
存储桶是对象层级结构的第二层,类似于 AWS S3 的存储桶。用户如果拥有相应权限,便可以在卷中创建存储桶。
命令示例:
ozone sh bucket create /vol1/bucket1$ ozone sh bucket info /vol1/bucket1
{
"metadata" : { },
"volumeName" : "vol1",
"name" : "bucket1",
"storageType" : "DISK",
"versioning" : false,
"creationTime" : "2020-07-28T13:14:45.091Z",
"modificationTime" : "2020-07-28T13:14:45.091Z",
"encryptionKeyName" : null,
"sourceVolume" : null,
"sourceBucket" : null
}如果存储桶为空,可以使用以下命令删除该存储桶。
$ ozone sh bucket delete /vol1/bucket1
Bucket bucket1 is deleted如果存储桶中包含任意键,我们可以递归删除该存储桶。此操作会先删除存储桶内的所有键,然后删除存储桶本身。运行该命令后,被删除的内容将无法恢复。
$ ozone sh bucket delete -r /vol1/bucket1
This command will delete bucket recursively.
There is no recovery option after using this command, and deleted keys won't move to trash.
Enter 'yes' to proceed': yes
Bucket bucket1 is deleted透明数据加密可以在桶级别启用。
密钥操作
密钥是可以存储数据的对象。
ozone sh key put /vol1/bucket1/README.md README.mdwarning
在本例中,标准的 ozone sh <object_type> <action> <url> 模式一开始可能会有些令人困惑,因为它产生的语法是 ozone sh key put <destination> <source>,而不是通常更符合直觉的 <source> <destination> 顺序。
$ ozone sh key info /vol1/bucket1/README.md
{
"volumeName" : "vol1",
"bucketName" : "bucket1",
"name" : "README.md",
"dataSize" : 3841,
"creationTime" : "2020-07-28T13:17:20.749Z",
"modificationTime" : "2020-07-28T13:17:21.979Z",
"replicationType" : "RATIS",
"replicationFactor" : 1,
"ozoneKeyLocations" : [ {
"containerID" : 1,
"localID" : 104591670688743424,
"length" : 3841,
"offset" : 0
} ],
"metadata" : { },
"fileEncryptionInfo" : null
}ozone sh key get /vol1/bucket1/README.md /tmp/ozone sh key delete /vol1/bucket1/key1如果该 key 位于 FSO 桶中,删除时会被移入回收站。回收站的位置如下:
/<volume>/<bucket>/.Trash/<user>如果该键位于 OBS 桶中,它将被永久删除。
查询 CLI 结果
Ozone CLI 返回 JSON 响应。jq 是一个命令行 JSON 处理器,可用于从 CLI 输出中筛选出所需信息。
例如:
- 列出不是链接的 FSO 桶。
$ ozone sh bucket list /s3v | jq '.[] | select(.link==false and .bucketLayout=="FILE_SYSTEM_OPTIMIZED")'
{
"metadata": {},
"volumeName": "s3v",
"name": "fso-bucket",
"storageType": "DISK",
"versioning": false,
"usedBytes": 0,
"usedNamespace": 0,
"creationTime": "2023-02-01T05:18:46.974Z",
"modificationTime": "2023-02-01T05:18:46.974Z",
"quotaInBytes": -1,
"quotaInNamespace": -1,
"bucketLayout": "FILE_SYSTEM_OPTIMIZED",
"owner": "om",
"link": false
}- 列出 EC 桶及其复制配置。
$ ozone sh bucket list /vol1 | jq -r '.[] | select(.replicationConfig.replicationType == "EC") | {"name": .name, "replicationConfig": .replicationConfig}'
{
"name": "ec5",
"replicationConfig": {
"data": 3,
"parity": 2,
"ecChunkSize": 1048576,
"codec": "RS",
"replicationType": "EC",
"requiredNodes": 5
}
}
{
"name": "ec9",
"replicationConfig": {
"data": 6,
"parity": 3,
"ecChunkSize": 1048576,
"codec": "RS",
"replicationType": "EC",
"requiredNodes": 9
}
}- 以制表符分隔值格式列出加密存储桶的名称及其加密密钥名称。
$ ozone sh bucket list /vol1 | jq -r '.[] | select(.encryptionKeyName != null) | [.name, .encryptionKeyName] | @tsv'
ec5 key1
encrypted-bucket key1评论
登录后参与评论
KnowForge