14 个版本 (9 个破坏性更新)
0.10.0 | 2024年6月19日 |
---|---|
0.9.3 | 2024年5月31日 |
0.8.0 | 2024年3月21日 |
0.4.0 | 2023年12月6日 |
0.3.0 | 2023年10月3日 |
#53 在 性能分析
每月 8,758 次下载
用于 5 个 crate (3 个直接使用)
520KB
12K SLoC
原生Rust HDFS客户端
这是一个用Rust原生编写的HDFS客户端的验证性实现。我找到的其他语言的客户端都是围绕libhdfs的包装,需要所有的Java依赖项,所以我想要看看是否可以从零开始编写一个,考虑到HDFS并没有改变很多。尽管一些基本功能正在运行,但它远不如真正的HDFS客户端健壮。
本实现并不是尝试实现所有HDFS客户端/FileSystem接口,只是涉及读取和写入数据的部分。
支持的HDFS功能
以下是目前支持的和可能未来支持的功能列表。
HDFS操作
- 列出
- 读取
- 写入
- 重命名
- 删除
HDFS功能
- 名称服务
- 观察者读取(支持状态ID跟踪,但需要在跟踪观察者/活动名称节点方面进行改进)
- ViewFS
- 基于路由器的联邦
- 纠删码读取和写入
- 仅支持RS模式,不支持RS-Legacy或XOR
安全功能
- Kerberos身份验证(GSSAPI SASL支持)(需要libgssapi_krb5,见下文)
- 令牌身份验证(DIGEST-MD5 SASL支持)
- 名称节点SASL连接
- 数据节点SASL连接
- 数据节点数据传输加密
- 静态加密(KMS支持)
Kerberos支持
Kerberos(SASL GSSAPI)机制通过到libgssapi_krb5
的运行时动态链接支持。这必须单独安装,但可能已经安装在你的系统上。如果没有,你可以通过以下方式安装它:
基于Debian的系统
apt-get install libgssapi-krb5-2
基于RHEL的系统
yum install krb5-libs
MacOS
brew install krb5
支持的HDFS设置
客户端将尝试读取位于目录 $HADOOP_CONF_DIR
中的 core-site.xml
和 hdfs-site.xml
配置文件,如果该目录不存在,则读取 $HADOOP_HOME/etc/hadoop
目录下的配置文件。当前支持的配置包括:
fs.defaultFS
- 支持Client::default()方法dfs.ha.namenodes
- 支持名称服务dfs.namenode.rpc-address.*
- 支持名称服务fs.viewfs.mounttable.*.link.*
- ViewFS链接fs.viewfs.mounttable.*.linkFallback
- ViewFS链接回退
其他设置通常假定是默认值。例如,假设已启用安全性和SASL协商,但在不安全的集群中,这只会进行SIMPLE身份验证。任何需要其他自定义Hadoop客户端设置的配置可能无法正确工作。
构建
cargo build
对象存储实现
HDFS的对象存储实现包含在 hdfs-native-object-store 中。
运行测试
测试主要是集成测试,它使用位于 rust/mindifs/
的一个小的Java应用程序运行自定义的 MiniDFSCluster
。要运行测试,您需要Java、Maven、Hadoop二进制文件和Kerberos工具,并且它们需要在您的路径中。任何8到17之间的Java版本都应该可以工作。
cargo test -p hdfs-native --features intergation-test
Python测试
请参阅 Python README
运行基准测试
一些基准测试通过fs-hdfs3 crate通过libhdfs与基于JVM的客户进行比较。因此,运行基准测试需要一些额外的设置
export HADOOP_CONF_DIR=$(pwd)/rust/target/test
export CLASSPATH=$(hadoop classpath)
然后您可以使用以下命令运行基准测试
cargo bench -p hdfs-native --features benchmark
需要 benchmark
特性来公开 minidfs
和内部纠删码函数以进行基准测试。
运行示例
示例使用 minidfs
模块来创建一个简单的HDFS集群以运行示例。这需要包含 integration-test
特性以启用 minidfs
模块。或者,如果您想针对现有的HDFS集群运行示例,您可以排除 integration-test
特性,并确保您的 HADOOP_CONF_DIR
指向包含与集群通信的HDFS配置的目录。
cargo run --example simple --features integration-test
依赖关系
~10–23MB
~362K SLoC