hdfs-sys

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_6will be available by default. - Enable one feature will also enable all features before it. For example, enable
hdfs_2_4will also enablehdfs_2_3andhdfs_2_2. - Too old version of hdfs could contain bugs or can't compile on your platform.
Compile
hdfs-sys supports both dynamic link, static link and vendor:
- If
vnedoredfeature has been enabled,hdfs-syswill compile and linklibhdfsin static. - Use
HDFS_LIB_DIRto specify the path oflibhdfs.soorlibhdfs.a - Use
HDFS_STATIC=1to choose to switch between dynamic link and static link - If
HDFS_LIB_DIRis 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
Dependencies
This crate will link to libjvm dynamically.
To make this crate works correctly, please make sure the following env set correctly:
JAVA_HOME:hdfs-syswill search path like${JAVA_HOME}/lib/serverto linklibjvm.
NOTE: hdfs-sys will ignore linking if DOCS_RS is set to build docs.
Runtime
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 ' ' ':')
Contributing
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.
Related Projects
- hdfs-rs: libhdfs binding and wrapper APIs for Rust, not maintained since 2015.
- fs-hdfs: forks based on hdfs-rs, C files are from hadoop
2.7.3. - dataFusion-hdfs-native: bindings of libhdfs3
Acknowledgment
This project is highly inspired by clang-sys