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

Download history 1478/week @ 2024-04-05 1701/week @ 2024-04-12 2093/week @ 2024-04-19 593/week @ 2024-04-26 268/week @ 2024-05-03 226/week @ 2024-05-10 203/week @ 2024-05-17 178/week @ 2024-05-24 266/week @ 2024-05-31 281/week @ 2024-06-07 235/week @ 2024-06-14 91/week @ 2024-06-21 9/week @ 2024-06-28 14/week @ 2024-07-05 67/week @ 2024-07-12 48/week @ 2024-07-19

每月下载量 140
用于 5 个 Crates(直接使用 3 个)

Apache-2.0

240KB
6K SLoC

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

fs-hdfs3

它基于 http://hyunsik.github.io/hdfs-rs0.0.4 版本,提供 libhdfs 绑定库和安全的 Rust API,该 API 安全地封装了 libhdfs 绑定 API。

当前状态

  • 已移植所有 libhdfs FFI API。
  • 安全的 Rust 封装 API 覆盖了大多数 libhdfs API,除了与零拷贝读取相关的 API。
  • 与 hdfs-rs 相比,它移除了 HdfsFs 中的生命周期,这将使其他人更容易依赖它。

文档

需求

  • 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

测试

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