You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-issues@hadoop.apache.org by "Toan Le (Jira)" <ji...@apache.org> on 2026/02/11 04:46:00 UTC

[jira] [Created] (HDFS-17881) Hadoop file system can not browse the folder that has children folder with colon in Windows

Toan Le created HDFS-17881:
------------------------------

             Summary: Hadoop file system can not browse the folder that has children folder with colon in Windows
                 Key: HDFS-17881
                 URL: https://issues.apache.org/jira/browse/HDFS-17881
             Project: Hadoop HDFS
          Issue Type: Bug
          Components: fs/azure
    Affects Versions: 3.4.2
            Reporter: Toan Le
         Attachments: Screenshot 2026-02-11 at 11.40.36.png, test_hadoop_azure.zip

Hi guys, 
I am facing an issue when browsing the children's folder name with a colon in ADLS.

Here is my case. My root folder in ADLS contains a folder with a name that includes a colon.
When I used the Hadoop file system. I got this error on Windows:
{code:java}
java -cp ".;./*" AbfsListStatusTest.java [main] WARN org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable [main] ERROR org.apache.hadoop.fs.azurebfs.services.AbfsClient - Unable to deserialize list results for Uri abfss://<containerName>@<storeAccountName>.dfs.core.windows.net java.lang.IllegalArgumentException: java.net.URISyntaxException: Illegal character in scheme name at index 0: \FestSpecial:         at org.apache.hadoop.fs.Path.initialize(Path.java:264)         at org.apache.hadoop.fs.Path.<init>(Path.java:222)         at org.apache.hadoop.fs.azurebfs.services.AbfsClient.getVersionedFileStatusFromEntry(AbfsClient.java:1846)         at org.apache.hadoop.fs.azurebfs.services.AbfsDfsClient.parseListPathResults(AbfsDfsClient.java:1373)         at org.apache.hadoop.fs.azurebfs.services.AbfsDfsClient.listPath(AbfsDfsClient.java:347)         at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.listStatus(AzureBlobFileSystemStore.java:1278)         at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.listStatus(AzureBlobFileSystemStore.java:1242)         at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.listStatus(AzureBlobFileSystemStore.java:1224)         at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystem.listStatus(AzureBlobFileSystem.java:713)         at AbfsListStatusOAuthTest.main(AbfsListStatusTest.java:45)         at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)         at java.base/java.lang.reflect.Method.invoke(Method.java:580)         at jdk.compiler/com.sun.tools.javac.launcher.Main.execute(Main.java:484)         at jdk.compiler/com.sun.tools.javac.launcher.Main.run(Main.java:208)         at jdk.compiler/com.sun.tools.javac.launcher.Main.main(Main.java:135) Caused by: java.net.URISyntaxException: Illegal character in scheme name at index 0: \FestSpecial:         
at java.base/java.net.URI$Parser.fail(URI.java:2995)         
at java.base/java.net.URI$Parser.checkChars(URI.java:3166)         
at java.base/java.net.URI$Parser.checkChar(URI.java:3176)         
at java.base/java.net.URI$Parser.parse(URI.java:3191)         
at java.base/java.net.URI.<init>(URI.java:807)         
at org.apache.hadoop.fs.Path.initialize(Path.java:261)         
... 14 more Exception in thread "main" Status code: -1 error code: null error message: Parsing of Json List Response Failed in DfsClient.java.lang.IllegalArgumentException: java.net.URISyntaxException: Illegal character in scheme name at index 0: \FestSpecial:         at org.apache.hadoop.fs.azurebfs.services.AbfsDfsClient.parseListPathResults(AbfsDfsClient.java:1390)         at org.apache.hadoop.fs.azurebfs.services.AbfsDfsClient.listPath(AbfsDfsClient.java:347)         at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.listStatus(AzureBlobFileSystemStore.java:1278)         at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.listStatus(AzureBlobFileSystemStore.java:1242)         at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.listStatus(AzureBlobFileSystemStore.java:1224)         at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystem.listStatus(AzureBlobFileSystem.java:713)         at AbfsListStatusOAuthTest.main(AbfsListStatusTest.java:45) Caused by: java.lang.IllegalArgumentException: java.net.URISyntaxException: Illegal character in scheme name at index 0: \FestSpecial:         at org.apache.hadoop.fs.Path.initialize(Path.java:264)         at org.apache.hadoop.fs.Path.<init>(Path.java:222)         at org.apache.hadoop.fs.azurebfs.services.AbfsClient.getVersionedFileStatusFromEntry(AbfsClient.java:1846)         at org.apache.hadoop.fs.azurebfs.services.AbfsDfsClient.parseListPathResults(AbfsDfsClient.java:1373)         at org.apache.hadoop.fs.azurebfs.services.AbfsDfsClient.listPath(AbfsDfsClient.java:347)         at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.listStatus(AzureBlobFileSystemStore.java:1278)         at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.listStatus(AzureBlobFileSystemStore.java:1242)         at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.listStatus(AzureBlobFileSystemStore.java:1224)         at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystem.listStatus(AzureBlobFileSystem.java:713)         at AbfsListStatusOAuthTest.main(AbfsListStatusTest.java:45)         at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)         at java.base/java.lang.reflect.Method.invoke(Method.java:580)         at jdk.compiler/com.sun.tools.javac.launcher.Main.execute(Main.java:484)         at jdk.compiler/com.sun.tools.javac.launcher.Main.run(Main.java:208)         at jdk.compiler/com.sun.tools.javac.launcher.Main.main(Main.java:135) Caused by: java.net.URISyntaxException: Illegal character in scheme name at index 0: \FestSpecial:         at java.base/java.net.URI$Parser.fail(URI.java:2995)         at java.base/java.net.URI$Parser.checkChars(URI.java:3166)         at java.base/java.net.URI$Parser.checkChar(URI.java:3176)         at java.base/java.net.URI$Parser.parse(URI.java:3191)         at java.base/java.net.URI.<init>(URI.java:807)         at org.apache.hadoop.fs.Path.initialize(Path.java:261)         ... 14 more
 {code}

I tested my script, and it worked on Linux.
Could you please help me check it?
I compressed all my scripts ({_}AbfsListStatusTest.java{_}) and library into the ticket ({_}test_hadoop_azure.zip{_}).

Here is the _AbfsListStatusTest.java:_
{code:java}

{code}
_import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.net.URI;

public class AbfsListStatusOAuthTest \{

    public static void main(String[] args) throws Exception {
        // Inputs (use env vars or hardcode)
        String accountName   = System.getenv("ADLS_STORAGE_ACCOUNT_NAME");
        String containerName = System.getenv("ADLS_CONTAINER_NAME");
        String tenantId      = System.getenv("ADLS_TENANT_ID");
        String clientId      = System.getenv("ADLS_CLIENT_ID");
        String clientSecret  = System.getenv("ADLS_CLIENT_SECRET");

        String dirPath = (args.length > 0) ? args[0] : "/";

        // Use abfss for OAuth
        String fsUri = String.format("abfss://%s@%s.dfs.core.windows.net", containerName, accountName);
        String accountFqdn = accountName + ".dfs.core.windows.net";

        Configuration conf = new Configuration(false);

        // Ensure ABFS impls are known
        conf.set("fs.abfss.impl", "org.apache.hadoop.fs.azurebfs.SecureAzureBlobFileSystem");
        conf.set("fs.abfs.impl",  "org.apache.hadoop.fs.azurebfs.AzureBlobFileSystem");

        // --- OAuth configs (scoped to the account host) ---
        conf.set("fs.azure.account.auth.type." + accountFqdn, "OAuth");
        conf.set("fs.azure.account.oauth.provider.type." + accountFqdn,
                "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider");

        conf.set("fs.azure.account.oauth2.client.id." + accountFqdn, clientId);
        conf.set("fs.azure.account.oauth2.client.secret." + accountFqdn, clientSecret);

        // Token endpoint (try v1 first — Hadoop ABFS commonly uses this)
        conf.set("fs.azure.account.oauth2.client.endpoint." + accountFqdn,
                "https://login.microsoftonline.com/" + tenantId + "/oauth2/token");

        // Create FS and call listStatus
        FileSystem fs = FileSystem.get(new URI(fsUri), conf);

        FileStatus[] statuses = fs.listStatus(new Path(dirPath));
        System.out.println("Found " + statuses.length + " entries under " + dirPath);

        for (FileStatus st : statuses) {
            System.out.printf("%s  isDir=%s  len=%d%n",
                    st.getPath(), st.isDirectory(), st.getLen());
        }

        fs.close();
    }
}_ 

 

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-help@hadoop.apache.org