13 个版本
0.1.12 | 2023 年 9 月 7 日 |
---|---|
0.1.11 | 2023 年 4 月 10 日 |
0.1.10 | 2022 年 10 月 26 日 |
0.1.9 | 2022 年 7 月 12 日 |
0.1.2 | 2021 年 9 月 27 日 |
#262 in 文件系统
每月 48 次下载
在 4 个 Crates 中使用 (直接使用 2 个)
225KB
5.5K SLoC
fs-hdfs
它基于 http://hyunsik.github.io/hdfs-rs 的版本 0.0.4
,提供 libhdfs 绑定库和 Rust API,安全地封装 libhdfs 绑定 API。
当前状态
- 所有 libhdfs FFI API 都已移植。
- 安全 Rust 封装 API 覆盖了大多数 libhdfs API,除了与零拷贝读取相关的 API。
- 与 hdfs-rs 相比,它移除了 HdfsFs 中的生命周期,这将使其他依赖更加友好。
文档
- [API 文档] (https://docs.rs/crate/fs-hdfs)
要求
- 与 C 相关的文件来自 hadoop 仓库的分支
2.7.3
。对于 Rust 使用,也进行了一些修改。 - 不需要自己编译 Hadoop 本地库。然而,仍需要 Hadoop jar 依赖项。
使用
将此添加到您的 Cargo.toml
[dependencies]
fs-hdfs = "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