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性能分析

Download history 402/week @ 2024-05-02 463/week @ 2024-05-09 514/week @ 2024-05-16 335/week @ 2024-05-23 780/week @ 2024-05-30 651/week @ 2024-06-06 1116/week @ 2024-06-13 949/week @ 2024-06-20 1064/week @ 2024-06-27 866/week @ 2024-07-04 1141/week @ 2024-07-11 1264/week @ 2024-07-18 2548/week @ 2024-07-25 2719/week @ 2024-08-01 2093/week @ 2024-08-08 1215/week @ 2024-08-15

每月 8,758 次下载
用于 5 crate (3 个直接使用)

Apache-2.0

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.xmlhdfs-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