<commit_before>---
layout: global
title: FUSE-based POSIX API
nickname: POSIX API
group: Client APIs
priority: 3
---

* Table of Contents
{:toc}

The Alluxio POSIX API is a feature that allows mounting an Alluxio File System as a standard file system
on most flavors of Unix.
By using this feature, standard tools (for example, `ls`, `cat` or `mkdir`) will have basic access
to the Alluxio namespace.
More importantly, with the POSIX API integration applications can interact with the Alluxio no
matter what language (C, C++, Python, Ruby, Perl, or Java) they are written in without any Alluxio
library integrations.

Note that Alluxio-FUSE is different from projects like [s3fs](https://s3fs.readthedocs.io/en/latest/),
[mountableHdfs](https://cwiki.apache.org/confluence/display/HADOOP2/MountableHDFS) which mount
specific storage services like S3 or HDFS to the local filesystem.
The Alluxio POSIX API is a generic solution for the many storage systems supported by Alluxio.
Data orchestration and caching features from Alluxio speed up I/O access to frequently used data.

<p align="center">
<img src="{{ '/img/stack-posix.png' | relativize_url }}" alt="Alluxio stack with its POSIX API"/>
</p>

The Alluxio POSIX API is based on the [Filesystem in Userspace](http://fuse.sourceforge.net/)
(FUSE) project.
Most basic file system operations are supported.
However, given the intrinsic characteristics of Alluxio, like its write-once/read-many-times file
data model, the mounted file system does not have full POSIX semantics and contains some
limitations.
Please read the [section of limitations](#assumptions-and-limitations) for details.

## Choose POSIX API Implementation

The Alluxio POSIX API has two implementations for users to choose from:
* Alluxio JNR-Fuse
Alluxio's default Fuse implementation that uses [JNR-Fuse](https://github.com/SerCeMan/jnr-fuse) for FUSE on Java.
JNR-Fuse targets for low concurrency scenarios and has some known limitations in performance.
* Alluxio JNI-Fuse (Experimental)
Alluxio JNI-Fuse is a new in-house FUSE implementation based on JNI (Java Native Interface) which targets for challenging AI scenarios, initiated by Nanjing University and Alibaba.
JNI-Fuse is still experimental but it is under active development by Alluxio community to solve the compatibility issues and improve stability and performance.

To choose between the default JNR-Fuse and JNI-Fuse, here are some aspects to consider:

* Platforms: JNR-Fuse support both Linux and MacOS while JNI-Fuse is only supported in Linux environment currently.
* Ease of usage: JNR-Fuse is enabled by default while JNI-Fuse has more dependencies.
* Workload: JNR-Fuse supports both read and write workloads. JNI-Fuse supports read only during experimental stage.
Alluxio JNI-Fuse generally provides better performance in high concurrency deep learning workloads.<commit_msg>[DOCFIX] Update POSIX-API.md<commit_after>---
layout: global
title: FUSE-based POSIX API
nickname: POSIX API
group: Client APIs
priority: 3
---

* Table of Contents
{:toc}

The Alluxio POSIX API is a feature that allows mounting an Alluxio File System as a standard file system
on most flavors of Unix.
By using this feature, standard tools (for example, `ls`, `cat` or `mkdir`) will have basic access
to the Alluxio namespace.
More importantly, with the POSIX API integration applications can interact with the Alluxio no
matter what language (C, C++, Python, Ruby, Perl, or Java) they are written in without any Alluxio
library integrations.

Note that Alluxio-FUSE is different from projects like [s3fs](https://s3fs.readthedocs.io/en/latest/),
[mountableHdfs](https://cwiki.apache.org/confluence/display/HADOOP2/MountableHDFS) which mount
specific storage services like S3 or HDFS to the local filesystem.
The Alluxio POSIX API is a generic solution for the many storage systems supported by Alluxio.
Data orchestration and caching features from Alluxio speed up I/O access to frequently used data.

<p align="center">
<img src="{{ '/img/stack-posix.png' | relativize_url }}" alt="Alluxio stack with its POSIX API"/>
</p>

The Alluxio POSIX API is based on the [Filesystem in Userspace](http://fuse.sourceforge.net/)
(FUSE) project.
Most basic file system operations are supported.
However, given the intrinsic characteristics of Alluxio, like its write-once/read-many-times file
data model, the mounted file system does not have full POSIX semantics and contains some
limitations.
Please read the [section of limitations](#assumptions-and-limitations) for details.

## Choose POSIX API Implementation

The Alluxio POSIX API has two implementations for users to choose from:
* Alluxio JNR-Fuse
Alluxio's default Fuse implementation that uses [JNR-Fuse](https://github.com/SerCeMan/jnr-fuse) for FUSE on Java.
JNR-Fuse targets for low concurrency scenarios and has some known limitations in performance.
* Alluxio JNI-Fuse (Experimental)
Alluxio JNI-Fuse is a new in-house FUSE implementation based on JNI (Java Native Interface) which targets for challenging AI scenarios, initiated by Nanjing University and Alibaba.
JNI-Fuse is still experimental but it is under active development by Alluxio community to solve the compatibility issues and improve stability and performance.

To choose between the default JNR-Fuse and JNI-Fuse, here are some aspects to consider:

* Platforms: JNR-Fuse support both Linux and MacOS while JNI-Fuse is only supported in Linux environment currently.
* Ease of usage: JNR-Fuse is enabled by default while JNI-Fuse has more dependencies.
{'fraction_non_alphanumeric': 0.06670272219217595, 'fraction_numerical': 0.0018027762754642149, 'mean_word_length': 4.933689839572192, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 6, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6240115', 'n_tokens_mistral': 1602, 'n_tokens_neox': 1518, 'n_words': 738}