资讯详情

资讯详情

Alluxio Python 客户端(alluxio-py)完整使用指南:通过 REST API 代理操作 Alluxio 文件系统

存储分布式文件系统缓存大数据【免费下载链接】alluxioAlluxio, data orchestration for analytics and machine learning in the cloud项目地址https://gitcode.com/gh_mirrors/al/alluxio点击查看免费下载导读本文以 docs/cn/api/Clients-Python.md 为核心系统讲解 Alluxio 官方 Python 客户端alluxio-py的安装、环境准备与文件系统操作实战。该客户端通过 Alluxio 代理Proxy提供的 REST API 与 Alluxio 交互为 Python 生态数据分析、机器学习脚本、运维工具提供了一种不依赖 JVM 的轻量访问方式。读完本文你将掌握如何安装客户端库、如何启动/关闭代理、如何用 Python 完成创建目录、上传、下载、重命名、列目录、删除、存在性检查等核心文件操作并理解其背后的 REST 端点与实现原理。一、Python 客户端与 Alluxio 的交互架构Alluxio 官方 Python 客户端仓库名alluxio-py本身并不直接与 Alluxio Master/Worker 建立 gRPC 连接而是通过Alluxio 代理Proxy对外暴露的 REST API 与 Alluxio 交互代理是一个独立的服务器进程把 HTTP/REST 请求翻译为对底层 Alluxio 文件系统 Java 客户端alluxio.client.file.FileSystem的调用Python 客户端提供的 API 与 Alluxio Java API 保持结构上的类似创建目录、打开文件、重命名、删除等一一对应因此Python 用户无需理解 gRPC 协议也无需在计算侧引入 Alluxio 的 JAR 依赖只需对代理的 HTTP 端点发起请求即可。从本仓库源码可以确认这条调用链的实体代理进程入口为 core/server/proxy/src/main/java/alluxio/proxy/AlluxioProxyProcess.java它启动一个内嵌 Web 服务器ProxyWebServer并通过ProxyMasterSync心跳线程与 Master 保持元数据同步REST 端点由 JAX-RS 处理器暴露元数据类操作集中在 PathsRestServiceHandler.java它内部持有FileSystem实例与StreamCache将create-directory、get-status、list-status、rename、delete、exists、create-file、open-file、download-file等 REST 方法映射为 Java 客户端调用流的读写端点位于 StreamsRestServiceHandler.java提供close、read、write方法REST 前缀统一为/api/v1见 core/common/src/main/java/alluxio/Constants.java例如 Python 客户端实际访问的路径是http://host:39999/api/v1/paths/...与http://host:39999/api/v1/streams/...。需要特别指出的是REST API 与 Java API 在“流”的表示上存在差异。Java API 可以直接使用内存中的流对象而 REST API 将“流的创建”与“流的读写”分离——先通过create/open端点创建或打开流并获得一个流 ID再通过streams资源端点按 ID 执行read/write/close。这也是 Python 客户端中open()上下文管理器在底层要经历“建流 → 读写 → 关闭”多步 HTTP 请求的原因。二、环境准备启动 Alluxio 代理在使用 Python 客户端之前需要先确保 Alluxio 集群Master 与至少一个 Worker处于运行状态并启动代理服务。2.1 启动代理$ ${ALLUXIO_HOME}/bin/alluxio-start.sh proxy从 bin/alluxio-start.sh 的start_proxy()实现可以看到脚本会在本节点后台拉起代理进程日志写入${ALLUXIO_LOGS_DIR}/proxy.out并且默认会在所有 master 与 worker 节点上同步拉起代理alluxio-masters.sh/alluxio-workers.sh配合-a参数。2.2 关闭代理$ ${ALLUXIO_HOME}/bin/alluxio-stop.sh proxy2.3 端口与配置默认情况下REST API 监听在39999端口。该默认值在 core/common/src/main/java/alluxio/conf/PropertyKey.java 中定义为PROXY_WEB_PORT即配置键alluxio.proxy.web.port默认 39999。如需修改可在alluxio-site.properties中设置alluxio.proxy.web.port39999相关配置键还有配置键默认值说明alluxio.proxy.web.port39999代理 Web 服务器即 REST API监听端口alluxio.proxy.web.hostname本机代理 Web UI/API 绑定的主机名alluxio.proxy.audit.logging.enabledfalse是否开启代理审计日志2.4 关于性能的注意事项通过 HTTP 代理访问 Alluxio 存在性能开销数据路径上多了一次额外的“跳跃”应用 → 代理 → Worker。为获得最佳性能官方建议在每个计算节点上部署一个 Alluxio Worker并就近运行代理使数据尽量在本地完成缓存与读写避免跨节点网络传输。三、安装 Python 客户端库在 Python 2.7 / Python 3 环境中通过 pip 直接安装$ pip install alluxio安装完成后即可在代码中导入import alluxio from alluxio import optionalluxio包提供了核心的Client类与各种操作选项option.CreateDirectory、option.Delete等选项对象对应 REST API 中各方法的请求参数在代理端被解析为CreateDirectoryPOptions、DeletePOptions等 gRPC 选项见 PathsRestServiceHandler.java。四、使用示例完整的文件系统操作流程下面这个示例程序与官方alluxio-py仓库的example.py对应演示了 Python 客户端在 Alluxio 上的基本操作创建目录、写入文件、获取状态、重命名、读取文件、列出根目录、删除并验证删除结果。#!/usr/bin/env python # -*- coding: utf-8 -*- import json import sys import alluxio from alluxio import option def colorize(code): def _(text, boldFalse): c code if bold: c 1;%s % c return \033[%sm%s\033[0m % (c, text) return _ green colorize(32) def info(s): print green(s) def pretty_json(obj): return json.dumps(obj, indent2) def main(): py_test_root_dir /py-test-dir py_test_nested_dir /py-test-dir/nested py_test py_test_nested_dir /py-test py_test_renamed py_test_root_dir /py-test-renamed client alluxio.Client(localhost, 39999) info(creating directory %s % py_test_nested_dir) opt option.CreateDirectory(recursiveTrue) client.create_directory(py_test_nested_dir, opt) info(done) info(writing to %s % py_test) with client.open(py_test, w) as f: f.write(Alluxio works with Python!\n) with open(sys.argv[0]) as this_file: f.write(this_file) info(done) info(getting status of %s % py_test) stat client.get_status(py_test) print pretty_json(stat.json()) info(done) info(renaming %s to %s % (py_test, py_test_renamed)) client.rename(py_test, py_test_renamed) info(done) info(getting status of %s % py_test_renamed) stat client.get_status(py_test_renamed) print pretty_json(stat.json()) info(done) info(reading %s % py_test_renamed) with client.open(py_test_renamed, r) as f: print f.read() info(done) info(listing status of paths under /) root_stats client.list_status(/) for stat in root_stats: print pretty_json(stat.json()) info(done) info(deleting %s % py_test_root_dir) opt option.Delete(recursiveTrue) client.delete(py_test_root_dir, opt) info(done) info(asserting that %s is deleted % py_test_root_dir) assert not client.exists(py_test_root_dir) info(done) if __name__ __main__: main()4.1 逐段拆解与要点说明1初始化客户端client alluxio.Client(localhost, 39999)第一个参数是代理所在主机可以是 IP 或域名第二个参数是代理 REST API 端口默认 39999该构造函数会基于代理地址拼接出/api/v1前缀的 REST 端点。2创建目录支持递归opt option.CreateDirectory(recursiveTrue) client.create_directory(py_test_nested_dir, opt)通过option.CreateDirectory(recursiveTrue)允许一次性创建多级目录本例中-dir/nested两级一次创建对应代理端 REST 端点POST /api/v1/paths/{path}/create-directory其中{path}用%2f转义后的路径表示选项参数在代理端解析为CreateDirectoryPOptions见 PathsRestServiceHandler.java。3写入文件上传with client.open(py_test, w) as f: f.write(Alluxio works with Python!\n) with open(sys.argv[0]) as this_file: f.write(this_file)open(path, w)以写模式打开文件返回一个可写文件对象示例同时写入了一段文本和脚本自身的内容底层流程先调用create-file端点创建文件并申请一个流 ID再通过streams/{id}/write分块写入数据最后调用streams/{id}/close关闭流与 StreamsRestServiceHandler.java 的write/close端点一一对应。4获取文件状态stat client.get_status(py_test) print pretty_json(stat.json())返回文件元数据大小、块信息、属主权限、持久化状态等以 JSON 形式输出对应端点POST /api/v1/paths/{path}/get-status。5重命名client.rename(py_test, py_test_renamed)将/py-test-dir/nested/py-test重命名为/py-test-dir/py-test-renamed对应端点POST /api/v1/paths/{path}/rename。6读取文件下载with client.open(py_test_renamed, r) as f: print f.read()以读模式打开并读取全部内容底层通过open-file端点打开流再经streams/{id}/read拉取数据对应 PathsRestServiceHandler.java 与StreamsRestServiceHandler.read。7列出目录状态root_stats client.list_status(/) for stat in root_stats: print pretty_json(stat.json())列出/下所有直接子项的URIStatus列表对应端点POST /api/v1/paths/{path}/list-status。8删除与验证opt option.Delete(recursiveTrue) client.delete(py_test_root_dir, opt) ... assert not client.exists(py_test_root_dir)Delete(recursiveTrue)递归删除整个测试目录树随后用exists断言该路径已不存在对应端点分别为delete与existsexists在 AlluxioProxyProcess.java 中还被用作代理就绪探活检查返回 HTTP 200 即代表代理可用。4.2 运行前提与兼容性说明运行前请确保alluxio.Client指向的代理已启动且端口可达可用curl http://proxy-host:39999/api/v1/proxy/info快速验证示例为 Python 2 风格print语句、str/bytes处理在 Python 3 环境下需按print()函数与字节串语义做适配代理每次请求都会经 HTTP 序列化/反序列化适合对性能不敏感的管理、批处理与脚本场景对吞吐要求极高的场景建议使用 原生文件系统 Java 客户端。五、Python 客户端可用的核心 API 一览综合官方alluxio-py文档与上文 REST 端点的对应关系客户端常用方法如下完整方法清单以alluxio-py在线文档为准方法对应 REST 端点说明create_directory(path, opt)POST /paths/{path}/create-directory创建目录支持递归create_file(path, opt)POST /paths/{path}/create-file创建空文件open(path, mode)open-file/create-filestreams/*打开文件读写流get_status(path)POST /paths/{path}/get-status获取单个路径状态list_status(path)POST /paths/{path}/list-status列出路径下子项状态rename(src, dst)POST /paths/{path}/rename重命名/移动delete(path, opt)POST /paths/{path}/delete删除支持递归exists(path)POST /paths/{path}/exists路径存在性检查free(path, opt)POST /paths/{path}/free释放缓存数据mount(path, ufs, opt)POST /paths/{path}/mount挂载 UFSunmount(path)POST /paths/{path}/unmount卸载 UFSset_attribute(path, opt)POST /paths/{path}/set-attribute设置属性上表中所有paths/*端点的实现均可在本仓库 PathsRestServiceHandler.java 中找到SERVICE_PREFIX pathsREST 前缀/api/v1可作为排查 Python 客户端异常时对照服务端行为的参考。六、常见问题与排查思路连接被拒绝 / ConnectionError优先检查代理是否启动alluxio-start.sh proxy、端口是否为默认 39999、防火墙是否放行若修改过端口需同步修改alluxio.Client(host, port)与alluxio.proxy.web.port配置。代理已启动但exists探活失败可从代理日志${ALLUXIO_LOGS_DIR}/proxy.out查看启动异常代理启动依赖集群 Master 可达Master 未就绪时代理无法完成元数据同步ProxyMasterSync心跳。Python 3 语法报错官方示例为 Python 2 风格迁移到 Python 3 时需处理print语句与字节流读写差异。性能不达预期确认代理与 Worker 是否同机部署跨节点访问会增加一次网络跳跃官方建议每个计算节点就近部署 Worker 与代理。结语Alluxio Python 客户端通过代理的 REST API把 Alluxio 的完整文件系统语义以 HTTP 方式开放给 Python 生态安装pip install alluxio与使用成本都很低。结合本仓库 Clients-Rest.md 与代理源码PathsRestServiceHandler.java、StreamsRestServiceHandler.java开发者可以快速定位客户端行为与代理端点的对应关系在数据分析、机器学习与运维脚本中无缝对接 Alluxio 的统一命名空间。赞分享存储分布式文件系统缓存大数据【免费下载链接】alluxioAlluxio, data orchestration for analytics and machine learning in the cloud项目地址https://gitcode.com/gh_mirrors/al/alluxio点击查看免费下载相关推荐Alluxio Go 客户端开发指南通过 REST API 代理访问 Alluxio 文件系统Alluxio Go 客户端开发指南通过 REST API 代理访问 Alluxio 文件系统 本指南基于 Alluxio 官方文档 docs/cn/api存储分布式文件系统缓存大数据Alluxio Python客户端使用指南Alluxio Python客户端使用指南 概述 Alluxio作为一个开源的虚拟分布式文件系统提供了多种语言的客户端接口。本文将重点介绍Alluxio Py存储分布式文件系统缓存大数据rlm 贡献指南与特性路线图如何参与最小化递归语言模型推理库的开发rlm 贡献指南与特性路线图如何参与最小化递归语言模型推理库的开发 本文基于仓库中的贡献指南 CONTRIBUTING.md https://link.git存储分布式文件系统缓存大数据上一篇ECharts多语言实战从国际化困局到全球化破局下一篇ProseMirror代码块编辑终极指南轻松实现语法高亮与完美格式化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →