Hello :wave:. I am trying to ingest parquet data s...
# troubleshooting
k
Hello 👋. I am trying to ingest parquet data stored in GCS to druid using native parallel ingestion but running into hadoop related errors. Is it not possible to natively ingest parquet from gcs without hadoop dataproc cluster dependency? Or something missing in my config?
Copy code
2026-02-18T23:40:12,199 WARN [task-runner-0-priority-0] org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FileSystem
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:290) ~[?:?]
	at org.apache.druid.data.input.parquet.ParquetInputFormat.initialize(ParquetInputFormat.java:68) ~[?:?]
	at org.apache.druid.data.input.parquet.ParquetInputFormat.createReader(ParquetInputFormat.java:98) ~[?:?]at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:290) ~[?:?]
	at org.apache.druid.indexing.common.task.batch.parallel.SinglePhaseSubTask.generateAndPushSegments(SinglePhaseSubTask.java:432) ~[druid-indexing-service-27.0.0.jar:27.0.0]
	at org.apache.druid.indexing.common.task.AbstractTask.run(AbstractTask.java:173) ~[druid-indexing-service-27.0.0.jar:27.0.0]
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.FileSystem
	at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[?:?]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[?:?]
From the task logs i am loading all the extensions.
Copy code
2026-02-18T23:40:08,513 INFO [main] org.apache.druid.guice.ExtensionsLoader - Loading extension [druid-google-extensions], jars: druid-google-extensions-27.0.0.jar, google-api-services-storage-v1-rev20190523-1.26.0.jar
2026-02-18T23:40:10,406 INFO [main] org.apache.druid.cli.CliPeon - * druid.extensions.loadList: ["druid-histogram", "druid-datasketches", "druid-lookups-cached-global", "postgresql-metadata-storage", "druid-google-extensions", "druid-avro-extensions", "druid-kafka-indexing-service", "druid-parquet-extensions"]
And also in classpath it seems to have hadoop
Copy code
org.apache.druid.cli.CliPeon - * java.class.path:lib/druid-gcp-common-27.0.0.jar:lib/guice-servlet-4.1.0.jar:lib/aws-java-sdk-ec2-1.12.497.jar:lib/gcs-connector-hadoop3-latest.jar
Here is my sample ingestion spec.
Copy code
{
    "type": "index_parallel",
    "spec": {
        "dataSchema": {
            "dataSource": "test_parquet_gcs",
            "timestampSpec": {.....},
            "dimensionsSpec": {.....},
            "metricsSpec": [....],
            "granularitySpec": {
                "type": "uniform",
                "segmentGranularity": "HOUR",
                "queryGranularity": "HOUR",
            }
        },
        "ioConfig": {
            "type": "index_parallel",
            "inputSource": {
                "type": "google",
                "prefixes": [
                    "gs://<bucket>/date_key=2026-02-17/hour=22"
                ]
            },
            "inputFormat": {
                "type": "parquet"
            },
            "appendToExisting": false
        },
        "tuningConfig": {
            "type": "index_parallel",
            "maxRowsPerSegment": 1000000,
            "maxRowsInMemory": 1000000,
            "maxNumConcurrentSubTasks": 8,
            "partitionsSpec": {
                "type": "dynamic",
                "partitionDimensions": []
            },
            "forceGuaranteedRollup": false
        }
    }
}
✅ 1
b
Can you check the for the hadoop-common and hadoop-client jars in the classpath? They are required for the parquet extensions. I thought the extension bundled them, but you may need to add the
druid-hadoop-compatibility
to the extension load list.
k
Posting my solution which worked as a reference for others.
Copy code
# Copy the GCS-Hadoop connector JAR to the google extensions directory
`gcs-connector-hadoop3-latest.jar` -> /opt/druid/extensions/druid-google-extensions/

and remove the same JAR from `/opt/druid/lib/` if it is present there.