4 个版本
0.1.12 | 2023 年 9 月 7 日 |
---|---|
0.1.11 | 2023 年 4 月 10 日 |
0.1.10 | 2022 年 10 月 26 日 |
0.1.9 | 2022 年 10 月 21 日 |
在 文件系统 中排名 #739
每月下载量 140
用于 5 个 Crates(直接使用 3 个)
240KB
6K SLoC
fs-hdfs3
它基于 http://hyunsik.github.io/hdfs-rs 的 0.0.4
版本,提供 libhdfs 绑定库和安全的 Rust API,该 API 安全地封装了 libhdfs 绑定 API。
当前状态
- 已移植所有 libhdfs FFI API。
- 安全的 Rust 封装 API 覆盖了大多数 libhdfs API,除了与零拷贝读取相关的 API。
- 与 hdfs-rs 相比,它移除了 HdfsFs 中的生命周期,这将使其他人更容易依赖它。
文档
- [API 文档] (https://docs.rs/crate/fs-hdfs3)
需求
- C 相关文件来自 hadoop 仓库的
3.1.4
分支。对于 Rust 使用,也进行了一些更改。 - 无需自己编译 Hadoop 原生库。然而,仍需要 Hadoop jar 依赖项。
使用
将以下内容添加到您的 Cargo.toml 中
[dependencies]
fs-hdfs3 = "0.1.12"
构建
我们需要指定 $JAVA_HOME
以使 Java 共享库在构建时可用。
运行
由于我们编译的 libhdfs 是基于 JNI 的实现,它需要通过 CLASSPATH
获取 Hadoop 相关类。例如,
export CLASSPATH=$CLASSPATH:`hadoop classpath --glob`
此外,我们还需要指定应用程序的 JVM 动态库路径,以便在运行时加载 JVM 共享库。
对于 jdk8 和 macOS,它是
export DYLD_LIBRARY_PATH=$JAVA_HOME/jre/lib/server
对于 jdk11(或更高版本的 JDK)和 macOS,它是
export DYLD_LIBRARY_PATH=$JAVA_HOME/lib/server
对于 jdk8 和 CentOS
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64/server
对于 jdk11(或更高版本的 JDK)和 CentOS
export LD_LIBRARY_PATH=$JAVA_HOME/lib/server
测试
测试还需要配置CLASSPATH
和DYLD_LIBRARY_PATH
(或LD_LIBRARY_PATH
)。如果找不到org.junit.Assert
的Java类,请按照以下方式精简$CLASSPATH
export CLASSPATH=$CLASSPATH:`hadoop classpath --glob`:$HADOOP_HOME/share/hadoop/tools/lib/*
在此,需要指定并导出$HADOOP_HOME
然后你可以运行
cargo test
示例
use std::sync::Arc;
use hdfs::hdfs::{get_hdfs_by_full_path, HdfsFs};
let fs: Arc<HdfsFs> = get_hdfs_by_full_path("hdfs://127.0.0.1:8020/").ok().unwrap();
match fs.mkdir("/data") {
Ok(_) => { println!("/data has been created") },
Err(_) => { panic!("/data creation has failed") }
};
依赖
~1–3.5MB
~91K SLoC