This is an automated email from the ASF dual-hosted git repository.

jojochuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone-site.git


The following commit(s) were added to refs/heads/master by this push:
     new f880ef4742 HDDS-14082. Add Hue integration guide and verification 
compose stack (#203)
f880ef4742 is described below

commit f880ef4742683f35dd656c0e81eed836b81bea0c
Author: Jitendra Shukla <[email protected]>
AuthorDate: Thu Jul 16 01:11:54 2026 +0530

    HDDS-14082. Add Hue integration guide and verification compose stack (#203)
    
    Co-authored-by: Wei-Chiu Chuang <[email protected]>
    Generated-by: Cursor <[email protected]>
---
 cspell.yaml                                        |   1 +
 docs/04-user-guide/02-integrations/02-hue.md       | 245 ++++++++++++++++++++-
 src/components/AskQuestionForm/index.jsx           |   2 +-
 src/pages/index.jsx                                |   2 +-
 .../compose/hue-ozone/docker-compose.hue-only.yaml |  62 ++++++
 static/compose/hue-ozone/docker-compose.yaml       | 148 +++++++++++++
 static/compose/hue-ozone/hue.ini                   |  44 ++++
 static/compose/hue-ozone/init-demo-data.sh         |  43 ++++
 8 files changed, 542 insertions(+), 5 deletions(-)

diff --git a/cspell.yaml b/cspell.yaml
index 6a3113a168..9ca2c02994 100644
--- a/cspell.yaml
+++ b/cspell.yaml
@@ -198,6 +198,7 @@ words:
 - lakehouse
 - lakehouses
 - Flink
+- filepicker
 - rebalancing
 - JDK
 - CMDB
diff --git a/docs/04-user-guide/02-integrations/02-hue.md 
b/docs/04-user-guide/02-integrations/02-hue.md
index 68a5672570..b3adafeafc 100644
--- a/docs/04-user-guide/02-integrations/02-hue.md
+++ b/docs/04-user-guide/02-integrations/02-hue.md
@@ -1,8 +1,247 @@
 ---
-draft: true
+sidebar_label: Hue
 ---
 
 # Hue
 
-**TODO:** File a subtask under 
[HDDS-9858](https://issues.apache.org/jira/browse/HDDS-9858) and complete this 
page or section.
-**TODO:** Uncomment link to this page in src/pages/index.js
+[Cloudera Hue](https://docs.gethue.com/) provides a web interface for browsing 
files, running SQL, and working with data across many storage and query 
engines. Hue's **File Browser** can browse Apache Ozone volumes, buckets, and 
paths when Ozone is exposed through the **Ozone HttpFS gateway** and its 
WebHDFS-compatible REST API.
+
+Hue does **not** browse Ozone through the Ozone Manager (OM) HTTP endpoint or 
through the Ozone S3 Gateway. HttpFS is a separate Ozone role; see the [HttpFS 
Gateway](../client-interfaces/httpfs) documentation.
+
+## Architecture
+
+```text
+Cloudera Hue (File Browser) --WebHDFS REST--> Ozone HttpFS gateway --Ozone 
RPC--> Ozone Manager
+```
+
+## Prerequisites
+
+- A running Ozone cluster with the **HttpFS** role enabled.
+- Network connectivity from the Hue server to the HttpFS host and port (Docker 
Compose exposes HttpFS on port **14000** by default).
+- For secure clusters: Kerberos (SPNEGO) on HttpFS and TLS as required by your 
deployment.
+
+To try the steps locally, start an Ozone cluster with Docker Compose as 
described in the [Docker quick start](../../quick-start/installation/docker) or 
[developer Docker Compose guide](../../developer-guide/run/docker-compose). The 
default stack includes an `httpfs` service on `localhost:14000`.
+
+For an all-in-one **Hue + Ozone** verification stack (HttpFS, Hue, and a 
Postgres database for Hue users), use the compose files under 
[`static/compose/hue-ozone/`](https://github.com/apache/ozone-site/tree/master/static/compose/hue-ozone)
 in this repository:
+
+```bash
+cd static/compose/hue-ozone
+docker compose up -d --scale datanode=3
+./init-demo-data.sh
+```
+
+Hue listens on `http://localhost:8888` (default login: `admin` / `admin`). The 
stack includes a **Postgres** service so Hue persists users and avoids 
embedded-DB issues during local testing.
+
+Run `./init-demo-data.sh` after the cluster starts. It creates `huevol` / 
`huevol/huebucket` owned by `admin` so the default Hue login can see them at 
`ofs://om`. WebHDFS `MKDIRS` alone creates volumes owned by the WebHDFS user 
(`hue`, `hdfs`, etc.); other Hue users see an empty Ozone root until they have 
**LIST** access on those volumes.
+
+In the Hue sidebar, open **Ozone** (not **Files**). **Files** is the HDFS 
browser and is disabled in this stack because there is no NameNode.
+
+## Configure HttpFS
+
+Ensure the HttpFS gateway is running and reachable at 
`http(s)://<httpfs-host>:<port>/webhdfs/v1`.
+
+### Proxy user for Hue
+
+Hue runs as a service user (for example `hue`) and performs File Browser 
operations on behalf of the logged-in Hue user. Configure HttpFS proxy-user 
settings in **`httpfs-site.xml`**, not in OM `core-site.xml`. See [Proxy User 
Configuration](../client-interfaces/httpfs#proxy-user-configuration) and 
[apache/ozone#9596](https://github.com/apache/ozone/pull/9596) (HDDS-14352).
+
+Replace `hue` with the OS user that runs the Hue process:
+
+```xml
+<property>
+  <name>httpfs.proxyuser.hue.hosts</name>
+  <value>*</value>
+</property>
+<property>
+  <name>httpfs.proxyuser.hue.groups</name>
+  <value>*</value>
+</property>
+```
+
+Hue also issues proxied Ozone RPC calls through HttpFS. Configure matching 
`hadoop.proxyuser.hue.hosts` and `hadoop.proxyuser.hue.groups` in OM 
`core-site.xml` (not only in HttpFS `httpfs-site.xml`).
+
+Restrict `hosts` and `groups` in production instead of using `*`. Restart 
HttpFS after changing `httpfs-site.xml`.
+
+On Docker Compose, set proxy-user properties on the **HttpFS** container with 
the `HTTPFS-SITE.XML_` prefix (they belong in `httpfs-site.xml`, not 
`core-site.xml`):
+
+```bash
+HTTPFS-SITE.XML_httpfs.proxyuser.hue.hosts=*
+HTTPFS-SITE.XML_httpfs.proxyuser.hue.groups=*
+```
+
+HttpFS runs as the `hadoop` OS user. WebHDFS curl checks that pass 
`user.name=hadoop` (or another proxy user) also require:
+
+- `HTTPFS-SITE.XML_httpfs.proxyuser.hadoop.hosts` and 
`HTTPFS-SITE.XML_httpfs.proxyuser.hadoop.groups` on the HttpFS container
+- `CORE-SITE.XML_hadoop.proxyuser.hadoop.hosts` and 
`CORE-SITE.XML_hadoop.proxyuser.hadoop.groups` on the OM container so OM 
accepts proxied RPC calls from HttpFS
+
+### Verify HttpFS with curl
+
+Before configuring Hue, confirm WebHDFS works against your HttpFS gateway:
+
+```bash
+# After ./init-demo-data.sh in static/compose/hue-ozone (creates admin-owned 
paths)
+curl -i "http://localhost:14000/webhdfs/v1/?op=LISTSTATUS&user.name=admin";
+curl -i 
"http://localhost:14000/webhdfs/v1/huevol?op=LISTSTATUS&user.name=admin";
+curl -i 
"http://localhost:14000/webhdfs/v1/huevol/huebucket?op=LISTSTATUS&user.name=admin";
+```
+
+To create paths manually with the Ozone shell (recommended so you control 
volume owner and bucket layout):
+
+```bash
+docker compose exec om ozone sh volume create /huevol -u admin
+docker compose exec om ozone sh bucket create /huevol/huebucket --layout fso
+```
+
+WebHDFS `MKDIRS` can also create volumes and buckets, but the volume owner is 
the `user.name` in the request. Hue impersonates the logged-in user, so a 
volume created as `user.name=hue` is not listed at `ofs://om` for the `admin` 
Hue account unless `admin` has **LIST** ACLs on that volume.
+
+Additional examples are in [HttpFS 
Gateway](../client-interfaces/httpfs#getting-started).
+
+## Configure Hue (`hue.ini`)
+
+Add an Ozone filesystem definition under `[[ozone]]` / `[[[default]]]`. Put 
`fs_defaultfs` in that nested block, not under `[desktop]`. The `webhdfs_url` 
must point at the **HttpFS gateway**, not the OM HTTP port (`9874`).
+
+Non-secure cluster example:
+
+```ini
+[desktop]
+# Ozone does not support the /append WebHDFS API; disable chunked uploads.
+enable_chunked_file_uploader=false
+
+# Local compose only: Postgres backing store for Hue users (see 
static/compose/hue-ozone).
+[[database]]
+engine=postgresql_psycopg2
+host=postgres
+port=5432
+user=hue
+password=hue
+name=hue
+
+[[ozone]]
+[[[default]]]
+fs_defaultfs=ofs://om
+webhdfs_url=http://httpfs:14000/webhdfs/v1
+nice_name=Ozone
+
+[hadoop]
+# Disable HDFS/YARN defaults; this stack uses Ozone only.
+[[hdfs_clusters]]
+[[[default]]]
+is_enabled=false
+
+[[yarn_clusters]]
+[[[default]]]
+is_enabled=false
+```
+
+- **`[[database]]`**: Optional for production CDP deployments; required in the 
bundled `hue-ozone` compose stack so Hue persists users in Postgres instead of 
an embedded database.
+
+- **`fs_defaultfs`**: Use `ofs://<service-id>` for HA (`ozone.service.id`) or 
`ofs://<om-host>` for a single OM. Docker Compose uses `ofs://om`.
+- **`webhdfs_url`**: HttpFS WebHDFS base URL, for example 
`http://localhost:14000/webhdfs/v1` from the host or 
`http://httpfs:14000/webhdfs/v1` on the Docker network.
+
+Secure cluster additions:
+
+```ini
+[[ozone]]
+[[[default]]]
+fs_defaultfs=ofs://ozonecluster
+webhdfs_url=https://httpfs-host.example.com:14000/webhdfs/v1
+security_enabled=true
+ssl_cert_ca_verify=true
+```
+
+Optional settings from the [Cloudera Hue Ozone 
guide](https://docs.cloudera.com/cdp-private-cloud-base/7.1.9/administering-hue/topics/hue-browse-ozone-fs.html):
+
+- **`upload_chunk_size`**: Increase the upload chunk size (in bytes) for large 
files. Default is 64 MB.
+- **`[[[default]]]` `nice_name`**: Display name for the Ozone filesystem in 
Hue.
+
+Restart Hue after editing `hue.ini`.
+
+## Hue user permissions
+
+After Ozone is configured in `hue.ini`, grant users access to the Ozone File 
Browser. Log in to Hue as an administrator, open **Administer Users**, go to 
the **Groups** tab, select the target group, and enable:
+
+`filebrowser.ofs_access` — Access to OFS from filebrowser and filepicker
+
+Click **Update group** to save. Non-admin users cannot browse Ozone until this 
permission is granted to their group. See the [Cloudera Hue Ozone 
guide](https://docs.cloudera.com/cdp-private-cloud-base/7.1.9/administering-hue/topics/hue-browse-ozone-fs.html).
+
+## Using Hue with Ozone
+
+After HttpFS, `hue.ini`, and permissions are configured:
+
+1. Sign in to Hue and open **File Browser**.
+2. Select the **Ozone** filesystem in the left navigation.
+3. Browse volumes, buckets, and directories (especially in **FSO** buckets).
+4. Upload, download, create directories, and perform other supported file 
operations subject to Ozone ACLs and Hue limitations below.
+
+Query engines integrated with Hue (for example Hive or Impala) can reference 
`ofs://` paths in table `LOCATION` values when `fs_defaultfs` is set correctly. 
See [Hive](./hive) for Ozone table examples.
+
+## Limitations
+
+Hue supports browsing Ozone through HttpFS, but some operations are limited. 
See the [Cloudera limitations 
documentation](https://docs-archive.cloudera.com/cdw-runtime/1.5.1/administering-hue/topics/hue-browse-ozone-fs-limitations.html).
+
+- **Copy size**: Hue skips files larger than the upload chunk size (default 64 
MB) when copying directories recursively. Increase `upload_chunk_size` in 
`hue.ini` if needed.
+- **Append / chunked upload**: Ozone does not implement WebHDFS `/append`. Set 
`enable_chunked_file_uploader=false` so Hue uploads each file as a single chunk.
+- **User home**: Users default to the `ofs://` root when opening Ozone in File 
Browser.
+- **Volumes and buckets**: Hue can create the default volume and bucket only; 
other volume/bucket management uses the Ozone CLI or Recon.
+- **Erasure Coding**: Hue cannot create EC-enabled buckets. Create EC buckets 
with the Ozone CLI and browse them from Hue.
+
+## Bucket layout
+
+- **FSO (recommended)**: File System Optimized buckets provide hierarchical 
directories and work best with Hue File Browser over HttpFS/WebHDFS.
+- **OBS**: Object Store buckets use a flat key namespace. Hue File Browser is 
intended for filesystem semantics over HttpFS; use FSO buckets for 
directory-oriented browsing.
+
+## Troubleshooting
+
+### HDFS "Files" shows `/user/admin` or port 50070 errors
+
+Hue ships with a default **HDFS** File Browser that points at 
`localhost:50070`. In an Ozone-only deployment there is no NameNode, so 
**Files** fails with connection refused. Use the **Ozone** entry in the left 
sidebar instead, or disable HDFS in `hue.ini`:
+
+```ini
+[hadoop]
+[[hdfs_clusters]]
+[[[default]]]
+is_enabled=false
+```
+
+The bundled `static/compose/hue-ozone/hue.ini` already disables HDFS and YARN 
for this reason.
+
+### Cannot connect / "Could not connect to WebHDFS"
+
+- Confirm `webhdfs_url` points to the **HttpFS** gateway (`/webhdfs/v1`), not 
OM port `9874`.
+- Check network connectivity and firewalls between Hue and HttpFS.
+- Verify HttpFS is running and responds to curl `LISTSTATUS` (see [Configure 
HttpFS](#configure-httpfs)).
+- Review HttpFS logs for errors.
+
+### Authentication errors (secure clusters)
+
+- Verify HttpFS Kerberos principal and keytab configuration.
+- Set `security_enabled=true` in the `[[[default]]]` Ozone block when HttpFS 
uses SPNEGO.
+- For TLS, set `ssl_cert_ca_verify` and provide CA certificates as required.
+
+### Ozone File Browser is empty at `ofs://om`
+
+- Hue lists volumes visible to the **logged-in Hue user** (HttpFS `doas`). 
Volumes created with `user.name=hue` or `user.name=hdfs` are owned by that user 
and do not appear at the root for `admin` unless `admin` has **LIST** ACLs on 
the volume.
+- In `static/compose/hue-ozone`, run `./init-demo-data.sh` after `docker 
compose up` to recreate `huevol` / `huebucket` owned by `admin`.
+- Grant the Hue user **LIST** (or **ALL**) on the volume with `ozone sh volume 
setacl`, or create the volume with `ozone sh volume create /vol -u <hue-user>`.
+
+### Permission denied / impersonation errors
+
+- Verify `httpfs.proxyuser.<hue_user>.hosts` and 
`httpfs.proxyuser.<hue_user>.groups` in **`httpfs-site.xml`** (on Docker 
Compose, use `HTTPFS-SITE.XML_httpfs.proxyuser.<hue_user>.*` on the HttpFS 
container — not `CORE-SITE.XML_`).
+- If Hue reports `User: hue is not allowed to impersonate admin`, HttpFS is 
missing or not reading the Hue proxy-user settings; recreate the HttpFS 
container after fixing `httpfs-site.xml`.
+- Ensure the **end user** (not only the Hue service user) has Ozone ACLs on 
the target path.
+- Confirm the user's Hue group has `filebrowser.ofs_access`.
+
+### File operations fail
+
+- Check Ozone ACLs and Ranger policies for the impersonated user.
+- Prefer **FSO** buckets for directory create, rename, and delete operations.
+- Check HttpFS and OM logs for the specific WebHDFS operation that failed.
+- On Docker Compose dev clusters, the default SCM block size (256 MB) can 
prevent small file uploads because datanodes cannot satisfy the reserved space. 
Lower `ozone.scm.block.size` and `ozone.scm.container.size` in `ozone-site.xml` 
for local testing, as described in the [Docker Compose 
guide](../../developer-guide/run/docker-compose#step-3-configure-your-deployment-optional).
+
+### Hue login or user errors (local Docker)
+
+- Ensure the `postgres` service is healthy before Hue starts (`docker compose 
ps`).
+- Confirm `hue.ini` includes the `[[database]]` block with 
`engine=postgresql_psycopg2` and host `postgres`, matching the compose 
environment variables.
+
+### Volume or bucket already exists (curl verification)
+
+Re-running the HttpFS `MKDIRS` curl examples against the same volume or bucket 
name returns HTTP 500 with `Volume already exists` or a similar error. Use new 
names, or treat the response as confirmation that the path is already present.
diff --git a/src/components/AskQuestionForm/index.jsx 
b/src/components/AskQuestionForm/index.jsx
index 77d85a386a..b7dbb2ea3c 100644
--- a/src/components/AskQuestionForm/index.jsx
+++ b/src/components/AskQuestionForm/index.jsx
@@ -17,8 +17,8 @@
  * under the License.
  */
 
-import { useState } from 'react';
 import Heading from '@theme/Heading';
+import { useState } from 'react';
 import styles from './styles.module.css';
 
 export default function AskQuestionForm() {
diff --git a/src/pages/index.jsx b/src/pages/index.jsx
index cd7c8ba91e..7f5ad90aa2 100644
--- a/src/pages/index.jsx
+++ b/src/pages/index.jsx
@@ -381,7 +381,7 @@ function Integrations() {
           }}
         />
       ),
-      // link: '/docs/user-guide/integrations/hue'
+      link: '/docs/user-guide/integrations/hue'
     },
     {
       name: "HBase",
diff --git a/static/compose/hue-ozone/docker-compose.hue-only.yaml 
b/static/compose/hue-ozone/docker-compose.hue-only.yaml
new file mode 100644
index 0000000000..5a08736cca
--- /dev/null
+++ b/static/compose/hue-ozone/docker-compose.hue-only.yaml
@@ -0,0 +1,62 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Connect Hue to an existing Ozone Docker network (HttpFS already running).
+#
+# Usage (example with knox-ozone_default network):
+#   docker network ls | grep ozone
+#   OZONE_NETWORK=knox-ozone_default docker compose -f 
docker-compose.hue-only.yaml up -d
+#
+# Ensure HttpFS has proxy-user settings for the Hue service user (hue):
+#   CORE-SITE.XML_httpfs.proxyuser.hue.hosts=*
+#   CORE-SITE.XML_httpfs.proxyuser.hue.groups=*
+
+services:
+  postgres:
+    image: postgres:15-alpine
+    hostname: postgres
+    environment:
+      POSTGRES_USER: hue
+      POSTGRES_PASSWORD: hue
+      POSTGRES_DB: hue
+    healthcheck:
+      test: [ CMD-SHELL, pg_isready -U hue -d hue ]
+      interval: 5s
+      timeout: 5s
+      retries: 5
+
+  hue:
+    # 4.11.0 lacks Ozone File Browser; latest segfaults on Apple Silicon QEMU.
+    image: gethue/hue:20250101-140101
+    platform: linux/amd64
+    hostname: hue
+    ports:
+    - 8888:8888
+    environment:
+      POLARS_SKIP_CPU_CHECK: "1"
+    volumes:
+    - ./hue.ini:/usr/share/hue/desktop/conf/z-hue.ini
+    depends_on:
+      postgres:
+        condition: service_healthy
+    networks:
+    - ozone
+
+networks:
+  ozone:
+    external: true
+    name: ${OZONE_NETWORK:-knox-ozone_default}
diff --git a/static/compose/hue-ozone/docker-compose.yaml 
b/static/compose/hue-ozone/docker-compose.yaml
new file mode 100644
index 0000000000..8b40bdc7b1
--- /dev/null
+++ b/static/compose/hue-ozone/docker-compose.yaml
@@ -0,0 +1,148 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Hue + Ozone verification stack
+#
+# Starts a non-secure Ozone cluster with HttpFS (port 14000), Postgres (Hue 
DB),
+# and Cloudera Hue (port 8888). HttpFS is configured with proxy-user settings
+# for the Hue service user.
+#
+# Usage:
+#   docker compose up -d --scale datanode=3
+#   ./init-demo-data.sh
+#   open http://localhost:8888  (default login: admin / admin)
+#
+# init-demo-data.sh creates huevol/huebucket owned by admin so the default
+# Hue login can list them at ofs://om. WebHDFS MKDIRS alone creates volumes
+# owned by the request user, which other Hue users cannot see at the root.
+#
+# Verify HttpFS before Hue:
+#   curl -i "http://localhost:14000/webhdfs/v1/?op=LISTSTATUS&user.name=admin";
+#   curl -i 
"http://localhost:14000/webhdfs/v1/huevol?op=LISTSTATUS&user.name=admin";
+
+x-image:
+  &image
+  image: 
${OZONE_IMAGE:-apache/ozone}:${OZONE_IMAGE_VERSION:-2.1.1}${OZONE_IMAGE_FLAVOR:-}
+
+x-common-config:
+  &common-config
+  OZONE-SITE.XML_hdds.datanode.dir: /data/hdds
+  OZONE-SITE.XML_ozone.metadata.dirs: /data/metadata
+  OZONE-SITE.XML_ozone.om.address: om
+  OZONE-SITE.XML_ozone.om.http-address: om:9874
+  OZONE-SITE.XML_ozone.recon.address: recon:9891
+  OZONE-SITE.XML_ozone.recon.db.dir: /data/metadata/recon
+  OZONE-SITE.XML_ozone.replication: "1"
+  OZONE-SITE.XML_ozone.scm.block.size: 1MB
+  OZONE-SITE.XML_ozone.scm.container.size: 1GB
+  OZONE-SITE.XML_ozone.scm.block.client.address: scm
+  OZONE-SITE.XML_ozone.scm.client.address: scm
+  OZONE-SITE.XML_ozone.scm.datanode.id.dir: /data/metadata
+  OZONE-SITE.XML_ozone.scm.names: scm
+  no_proxy: om,recon,scm,s3g,httpfs,hue,postgres,localhost,127.0.0.1
+
+services:
+  datanode:
+    <<: *image
+    command: [ ozone, datanode ]
+    environment:
+      <<: *common-config
+
+  om:
+    <<: *image
+    ports:
+    - 9874:9874
+    command: [ ozone, om ]
+    environment:
+      <<: *common-config
+      CORE-SITE.XML_hadoop.proxyuser.hadoop.hosts: "*"
+      CORE-SITE.XML_hadoop.proxyuser.hadoop.groups: "*"
+      CORE-SITE.XML_hadoop.proxyuser.hue.hosts: "*"
+      CORE-SITE.XML_hadoop.proxyuser.hue.groups: "*"
+      ENSURE_OM_INITIALIZED: /data/metadata/om/current/VERSION
+      WAITFOR: scm:9876
+    depends_on:
+    - scm
+
+  scm:
+    <<: *image
+    ports:
+    - 9876:9876
+    command: [ ozone, scm ]
+    environment:
+      <<: *common-config
+      ENSURE_SCM_INITIALIZED: /data/metadata/scm/current/VERSION
+
+  recon:
+    <<: *image
+    ports:
+    - 9888:9888
+    command: [ ozone, recon ]
+    environment:
+      <<: *common-config
+
+  s3g:
+    <<: *image
+    ports:
+    - 9878:9878
+    command: [ ozone, s3g ]
+    environment:
+      <<: *common-config
+
+  httpfs:
+    <<: *image
+    ports:
+    - 14000:14000
+    command: [ ozone, httpfs ]
+    environment:
+      <<: *common-config
+      CORE-SITE.XML_fs.defaultFS: ofs://om
+      HTTPFS-SITE.XML_httpfs.proxyuser.hadoop.hosts: "*"
+      HTTPFS-SITE.XML_httpfs.proxyuser.hadoop.groups: "*"
+      HTTPFS-SITE.XML_httpfs.proxyuser.hue.hosts: "*"
+      HTTPFS-SITE.XML_httpfs.proxyuser.hue.groups: "*"
+
+  postgres:
+    image: postgres:15-alpine
+    hostname: postgres
+    environment:
+      POSTGRES_USER: hue
+      POSTGRES_PASSWORD: hue
+      POSTGRES_DB: hue
+    healthcheck:
+      test: [ CMD-SHELL, pg_isready -U hue -d hue ]
+      interval: 5s
+      timeout: 5s
+      retries: 5
+
+  hue:
+    # 4.11.0 lacks Ozone File Browser; latest segfaults on Apple Silicon QEMU.
+    # This tag has ofs_access/Ozone support without the Polars crash.
+    image: gethue/hue:20250101-140101
+    platform: linux/amd64
+    hostname: hue
+    ports:
+    - 8888:8888
+    environment:
+      POLARS_SKIP_CPU_CHECK: "1"
+    volumes:
+    - ./hue.ini:/usr/share/hue/desktop/conf/z-hue.ini
+    depends_on:
+      postgres:
+        condition: service_healthy
+      httpfs:
+        condition: service_started
diff --git a/static/compose/hue-ozone/hue.ini b/static/compose/hue-ozone/hue.ini
new file mode 100644
index 0000000000..5fec429441
--- /dev/null
+++ b/static/compose/hue-ozone/hue.ini
@@ -0,0 +1,44 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+[desktop]
+secret_key=hue-ozone-dev-secret-key
+enable_chunked_file_uploader=false
+
+[[database]]
+engine=postgresql_psycopg2
+host=postgres
+port=5432
+user=hue
+password=hue
+name=hue
+
+[[ozone]]
+[[[default]]]
+fs_defaultfs=ofs://om
+webhdfs_url=http://httpfs:14000/webhdfs/v1
+nice_name=Ozone
+
+[hadoop]
+# Ozone-only stack: disable default HDFS File Browser (localhost:50070).
+[[hdfs_clusters]]
+[[[default]]]
+is_enabled=false
+
+[[yarn_clusters]]
+[[[default]]]
+is_enabled=false
diff --git a/static/compose/hue-ozone/init-demo-data.sh 
b/static/compose/hue-ozone/init-demo-data.sh
new file mode 100755
index 0000000000..aeceaa2813
--- /dev/null
+++ b/static/compose/hue-ozone/init-demo-data.sh
@@ -0,0 +1,43 @@
+#!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+set -euo pipefail
+
+OM_HOST="${OM_HOST:-om}"
+VOLUME="${DEMO_VOLUME:-huevol}"
+BUCKET="${DEMO_BUCKET:-huebucket}"
+OWNER="${DEMO_OWNER:-admin}"
+
+exec_om() {
+  docker compose exec -T "$OM_HOST" "$@"
+}
+
+wait_for_om() {
+  exec_om ozone admin safemode wait
+}
+
+recreate_demo_paths() {
+  exec_om ozone sh bucket delete "/${VOLUME}/${BUCKET}" 2>/dev/null || true
+  exec_om ozone sh volume delete "/${VOLUME}" 2>/dev/null || true
+  exec_om ozone sh volume create "/${VOLUME}" -u "${OWNER}"
+  exec_om ozone sh bucket create "/${VOLUME}/${BUCKET}" --layout fso
+}
+
+wait_for_om
+recreate_demo_paths
+echo "Demo Ozone paths ready for Hue user '${OWNER}': /${VOLUME}/${BUCKET}"


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to