9 releases

0.3.0 Jul 14, 2023
0.2.0 May 6, 2022
0.1.0 Apr 28, 2022
0.0.5 Apr 27, 2022

#541 in Algorithms

Download history 1565/week @ 2023-07-19 1925/week @ 2023-07-26 2001/week @ 2023-08-02 1411/week @ 2023-08-09 1550/week @ 2023-08-16 1810/week @ 2023-08-23 1309/week @ 2023-08-30 1235/week @ 2023-09-06 2120/week @ 2023-09-13 1539/week @ 2023-09-20 796/week @ 2023-09-27 1404/week @ 2023-10-04 7370/week @ 2023-10-11 6371/week @ 2023-10-18 8541/week @ 2023-10-25 9200/week @ 2023-11-01

31,816 downloads per month
Used in 3 crates (via hdrs)


49K SLoC

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

hdfs-sys   Build Status Latest Version

Bindings to HDFS Native C API.

Work with these bindings directly is boring and error proven, please use hdrs instead if ever possible.

Supported Platforms

  • Linux
  • macOS
  • Windows

Supported Versions

To target a version of libhdfs, enable a Cargo features such as one of the following:

  • hdfs_2_2 : requires hdfs 2.2 or later releases.
  • hdfs_2_3: requires hdfs 2.3 or later releases.
  • hdfs_2_4: requires hdfs 2.4 or later releases.
  • hdfs_2_5: requires hdfs 2.5 or later releases.
  • hdfs_2_6: (default) requires hdfs 2.6 or later releases.
  • hdfs_2_7: requires hdfs 2.7 or later releases.
  • hdfs_2_8: requires hdfs 2.8 or later releases.
  • hdfs_2_9: requires hdfs 2.9 or later releases.
  • hdfs_2_10: requires hdfs 2.10 or later releases.
  • hdfs_3_0: requires hdfs 3.0 or later releases.
  • hdfs_3_1: requires hdfs 3.1 or later releases.
  • hdfs_3_2: requires hdfs 3.2 or later releases.
  • hdfs_3_3: requires hdfs 3.3 or later releases.

Please note:

  • If you do not enable one of these features, the API provided by hdfs_2_6 will be available by default.
  • Enable one feature will also enable all features before it. For example, enable hdfs_2_4 will also enable hdfs_2_3 and hdfs_2_2.
  • Too old version of hdfs could contain bugs or can't compile on your platform.


hdfs-sys supports both dynamic link, static link and vendor:

  • If vnedored feature has been enabled, hdfs-sys will compile and link libhdfs in static.
  • Use HDFS_LIB_DIR to specify the path of libhdfs.so or libhdfs.a
  • Use HDFS_STATIC=1 to choose to switch between dynamic link and static link
  • If HDFS_LIB_DIR is not set, we will try to find ${HADOOP_HOME}/lib/native
  • If all env are empty, we will try to compile libhdfs and link it in static


This crate will link to libjvm dynamically.

To make this crate works correctly, please make sure the following env set correctly:

  • JAVA_HOME: hdfs-sys will search path like ${JAVA_HOME}/lib/server to link libjvm.

NOTE: hdfs-sys will ignore linking if DOCS_RS is set to build docs.


hdfs-sys uses JNI to call functions provided by jars that provided by hadoop releases. Please make sure CLASSPATH is set correctly before calling any functions provided by hdfs-sys:

export JAVA_HOME=/path/to/java
export HADOOP_HOME=/path/to/hadoop
export LD_LIBRARY_PATH=${JAVA_HOME}/lib/server
export CLASSPATH=$(find $HADOOP_HOME -iname "*.jar" | xargs echo | tr ' ' ':')


Check out the CONTRIBUTING.md guide for more details on getting started with contributing to this project.

Getting help

Submit issues for bug report or asking questions in discussion.


This project is highly inspired by clang-sys


Licensed under Apache License, Version 2.0.