[
https://issues.apache.org/jira/browse/HDFS-17881?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18106362#comment-18106362
]
Pavel Chuchma commented on HDFS-17881:
--------------------------------------
Hi,
Please, is there any plan to merge prepared MR?
One of our customers is dealing with this issue. And it is pretty hard to ask
them to rename thousands of files bound to some internal process in their ADLS
:(
> 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
> Priority: Critical
> Labels: azure, azureblob, commons, hadoop-common,
> pull-request-available
> 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: [email protected]
For additional commands, e-mail: [email protected]