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 在 命令行工具
5,841 每月下载量
在 2 个crate中使用(通过opendal)
2MB
50K SLoC
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_DIR
或HADOOP_HOME
以从指定路径加载,而不是编译。 - 指定
HDFS_STATIC=1
以静态链接libhdfs
。 - 最后,我们将回退到编译
libhdfs
并进行静态链接。
运行时
hdrs
依赖于 hdfs-sys,它使用 JNI 调用由 hadoop 发行版提供的 jars 中提供的函数。
请确保在运行时正确设置了 HADOOP_HOME
、LD_LIBRARY_PATH
和 CLASSPATH
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