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 个)

Apache-2.0

225KB
5.5K SLoC

C 4K SLoC // 0.1% comments Rust 1.5K SLoC // 0.1% comments

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 中的生命周期,这将使其他依赖更加友好。

文档

要求

  • 与 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

测试

测试还要求配置 CLASSPATHDYLD_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