hdfs-s3-gateway (Python)
Python bindings for the HDFS → S3 read-only gateway. This package wraps the Rust gateway so it can be driven from Python either as a foreground blocking call or as an in-process background server.
Usage
from hdfs_s3_gateway import Gateway
# Background server (no subprocess — runs on its own native thread + tokio runtime).
gw = Gateway(namenode_uri="hdfs://localhost:8020", hdfs_root="/data", bucket_name="hdfs")
gw.start()
print(gw.address) # e.g. "127.0.0.1:8080"
# ... point any S3 client at the endpoint ...
gw.stop() # graceful shutdown
# Or as a context manager:
with Gateway(config_path="gateway.toml") as gw:
print(gw.address)
# ... use the endpoint ...
The gateway performs no authentication by default — it must run behind network-level
access control. See the top-level project README for the full security posture. You can
optionally enable SigV4 auth by passing auth_secret="..." to Gateway(...) (or the
--auth-secret CLI flag / auth_secret TOML key). When set, a valid signature is required
(unsigned requests are rejected, wrong secret → 403 SignatureDoesNotMatch), so clients use
normal signing (any access-key id + that secret) instead of anonymous / aws_skip_signature.
When unset (the default), the gateway accepts both anonymous and signed requests.
Reading data through the gateway
Once the gateway is running, point any S3 client at its endpoint. The examples below
assume the gateway was started with hdfs_root="/data" and bucket_name="hdfs", exposing
a hive-partitioned table at s3://hdfs/seed_parquet/country=us/year=2021/data.parquet.
By default all clients use anonymous / unsigned access (the gateway has no auth). The
endpoint is http://<gw.address> — e.g. http://127.0.0.1:39111. If you started the
gateway with auth_secret, drop the anonymous / aws_skip_signature flags and pass any
access-key id plus that secret instead.
polars
import polars as pl
ep = f"http://{gw.address}"
so = {
"aws_skip_signature": "true",
"aws_endpoint_url": ep,
"aws_allow_http": "true",
}
# Whole directory tree (hive partition columns are recovered automatically):
df = pl.read_parquet(f"s3://hdfs/seed_parquet/", storage_options=so)
# Or a recursive glob (polars expands it client-side into S3 listings):
df = pl.read_parquet(f"s3://hdfs/seed_parquet/country=*/year=*/*.parquet", storage_options=so)
DuckDB
import duckdb
ep = f"http://{gw.address}"
host = ep.replace("http://", "")
duckdb.sql("INSTALL httpfs; LOAD httpfs;")
duckdb.sql(f"SET s3_endpoint='{host}';")
duckdb.sql("SET s3_use_ssl=false;")
duckdb.sql("SET s3_access_key_id='';")
duckdb.sql("SET s3_secret_access_key='';")
duckdb.sql("SET s3_session_token='';")
duckdb.sql("SET s3_url_style='path';")
# DuckDB's httpfs reads a directory tree via a recursive glob:
df = duckdb.sql("SELECT * FROM read_parquet('s3://hdfs/seed_parquet/**')").df()
pandas (pyarrow engine)
import pandas as pd
ep = f"http://{gw.address}"
so = {
"anon": "true",
"endpoint_url": ep,
"client_kwargs": {"endpoint_url": ep},
}
# pandas delegates s3:// URIs to fsspec/s3fs, not pyarrow's native S3 filesystem.
df = pd.read_parquet("s3://hdfs/seed_parquet/", storage_options=so)
pandas (s3fs / fsspec engine)
import pandas as pd
ep = f"http://{gw.address}"
so = {
"anon": "true",
"endpoint_url": ep,
"client_kwargs": {"endpoint_url": ep},
}
df = pd.read_parquet("s3://hdfs/seed_parquet/", storage_options=so)
pyarrow (native S3FileSystem)
import pyarrow.dataset as ds
import pyarrow.fs as pafs
ep = f"http://{gw.address}"
host = ep.replace("http://", "")
s3 = pafs.S3FileSystem(anonymous=True, endpoint_override=host, scheme="http")
# pyarrow wants a "bucket/key" path, not a full s3:// URI.
dataset = ds.dataset("hdfs/seed_parquet", format="parquet", filesystem=s3, partitioning="hive")
table = dataset.to_table()
Note on path forms. Only polars and DuckDB expand glob patterns (
country=*/year=*) client-side into real S3 listings; the other engines pass the glob literally to the gateway, which cannot match it. For a whole partitioned table, use the directory form (s3://hdfs/seed_parquet/).
Release files for hdfs-s3-gateway 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hdfs_s3_gateway-0.2.0.tar.gz | 215.6 kB | Details |
Built distributions (wheels)
Total release size: 36.0 MB
Release files / hdfs_s3_gateway-0.2.0.tar.gz
| Download URL | hdfs_s3_gateway-0.2.0.tar.gz |
|---|---|
| Size | 215.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
32ac3ca5ac129d2a78cccbda8143de00f393657d306aa5a4b8dddd7fb329d686
|
|
BLAKE2b-256 checksum How to use checksums |
14e0ab69541addf6c2697df117f566832da0a88314859c3d7eb0bd6cd787a16e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / hdfs_s3_gateway-0.2.0-cp314-cp314t-win_amd64.whl
| Download URL | hdfs_s3_gateway-0.2.0-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 4.3 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
fcfdb54e97a2af29cf8d11371425cf47b5d1aa8d4ae8220358910fac10c2874e
|
|
BLAKE2b-256 checksum How to use checksums |
3ae6e712cefbe4b9940d7bd0fde601f15055ad868a8a683ec49d682e55deb620
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / hdfs_s3_gateway-0.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | hdfs_s3_gateway-0.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
8969319621d50707718a3940e9678c08bc5f26a00a5baa62f0d206c7a0a3a3fc
|
|
BLAKE2b-256 checksum How to use checksums |
36cdb66d4d39354adc23eef92f498a8e3f253236d10dc39c580b4fc62aedbb58
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / hdfs_s3_gateway-0.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | hdfs_s3_gateway-0.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
0242227ebb2eb0557b5645e1f175ced8047a22a58b2605a80f87abe1b4304650
|
|
BLAKE2b-256 checksum How to use checksums |
b7ecb6b3240ec8e32818701436b1473feaecf3cd678c472aaacd000780bed0c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / hdfs_s3_gateway-0.2.0-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | hdfs_s3_gateway-0.2.0-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8a5546879d8a463e4297541fc5e77e3f4b65aaadad8d62468938a6319421322e
|
|
BLAKE2b-256 checksum How to use checksums |
1d4dc86892ed706a935b28e9b61bfea7343bf09914b9c629007627180205b6e2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / hdfs_s3_gateway-0.2.0-cp310-abi3-win_amd64.whl
| Download URL | hdfs_s3_gateway-0.2.0-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 4.3 MB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
b1f8444cb487bc16745a17c067fe4af306dedfb792dcc2fd41fef27d8c210e79
|
|
BLAKE2b-256 checksum How to use checksums |
4e5d2090ae5acdb522ea58ec286bb35c2e7d026882eebeaeabb0061bfd708dd1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / hdfs_s3_gateway-0.2.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | hdfs_s3_gateway-0.2.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
eba51b6332b409233eb0aec2cd7d0cd56e305f39f15b22f7d4838994e3571d29
|
|
BLAKE2b-256 checksum How to use checksums |
dd8a776943e9157b379b30e57367f48cdd3730946015c1eb33e19319593bb163
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / hdfs_s3_gateway-0.2.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | hdfs_s3_gateway-0.2.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
12bfc39e3e10ff07f458042f12d47fdf6446523e80a16839ecd7a899067c3781
|
|
BLAKE2b-256 checksum How to use checksums |
91635d125af302355906c98bcec1e2dea4cb81d814370c88bda7da57c6d7217e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / hdfs_s3_gateway-0.2.0-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | hdfs_s3_gateway-0.2.0-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0878abb29d06931e10b1bd87b8048e5fd3c324edded56e2a96700967ae10ec8e
|
|
BLAKE2b-256 checksum How to use checksums |
30ff3e23f431c18e29a16a7f5a1bbf15478f179ac18e1562bf3c17e85a6176a6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|