16 个版本

0.3.2 2024年3月21日
0.3.1 2023年9月21日
0.3.0 2023年7月11日
0.2.0 2023年1月10日
0.1.4 2022年6月3日

#311命令行工具

Download history 1244/week @ 2024-04-28 1561/week @ 2024-05-05 1846/week @ 2024-05-12 1427/week @ 2024-05-19 1400/week @ 2024-05-26 2006/week @ 2024-06-02 1288/week @ 2024-06-09 1602/week @ 2024-06-16 1682/week @ 2024-06-23 1590/week @ 2024-06-30 1969/week @ 2024-07-07 1293/week @ 2024-07-14 1229/week @ 2024-07-21 1264/week @ 2024-07-28 1769/week @ 2024-08-04 1386/week @ 2024-08-11

5,841 每月下载量
2 个crate中使用(通过opendal

Apache-2.0

2MB
50K SLoC

C 49K SLoC // 0.1% comments Rust 1.5K SLoC // 0.0% comments

hdrs ─ 构建状态 最新版本

基于 hdfs-sys 的 Rust HDFS 原生客户端。

快速入门

use std::io::{Read, Write};

use hdrs::Client;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let fs = Client::connect("hdfs://127.0.0.1:9000")?;

    let mut f = fs.open_file().write(true).create(true).open("/tmp/hello.txt")?;
    let n = f.write("Hello, World!".as_bytes())?;

    let mut f = fs.open_file().read(true).open("/tmp/hello.txt")?;
    let mut buf = vec![0; 1024];
    let n = f.read(&mut buf)?;

    let _ = fs.remove_file("/tmp/hello.txt")?;

    Ok(())
}

编译时间

hdrs 依赖于 hdfs-sys,它将 libjvm 链接到工作。

请确保 JAVA_HOME 设置正确

export JAVA_HOME=/path/to/java
export LD_LIBRARY_PATH=${JAVA_HOME}/lib/server:${LD_LIBRARY_PATH}
  • 启用 vendored 功能以编译 libhdfs 并进行静态链接。
  • 指定 HDFS_LIB_DIRHADOOP_HOME 以从指定路径加载,而不是编译。
  • 指定 HDFS_STATIC=1 以静态链接 libhdfs
  • 最后,我们将回退到编译 libhdfs 并进行静态链接。

运行时

hdrs 依赖于 hdfs-sys,它使用 JNI 调用由 hadoop 发行版提供的 jars 中提供的函数。

请确保在运行时正确设置了 HADOOP_HOMELD_LIBRARY_PATHCLASSPATH

export HADOOP_HOME=/path/to/hadoop
export LD_LIBRARY_PATH=${JAVA_HOME}/lib/server:${LD_LIBRARY_PATH}
export CLASSPATH=$(${HADOOP_HOME}/bin/hadoop classpath --glob)

如果 libhdfs 被配置为动态链接,请也在 LD_LIBRARY_PATH 中添加 ${HADOOP_HOME}/lib/native,以确保链接器可以找到 libhdfs.so

export LD_LIBRARY_PATH=${JAVA_HOME}/lib/server:${HADOOP_HOME}/lib/native:${LD_LIBRARY_PATH}

版本要求

hdrs 至少需要 hadoop 2.3 才能正常工作:hadoop 2.2 无法正确处理 FileNotFound。

hdrs 需要至少 Hadoop 2.6 才能运行:旧版本的 Hadoop 无法正确处理 errno。在旧版本中,如果输入路径是一个空目录,Hadoop 会将 errno 设置为 3

贡献

有关如何开始为此项目做出贡献的更多详细信息,请参阅 CONTRIBUTING.md 指南。

获取帮助

提交 问题 进行错误报告或在 讨论 中提问。

致谢

本项目深受 clang-sys 的启发。

许可证

根据 Apache 许可证 2.0 版本 许可。

依赖

~0–7.5MB
~46K SLoC