使用JCEKS文件创建Hadoop凭证时遇UnsupportedFileSystemException错误
Hadoop凭证创建报错:UnsupportedFileSystemException 解决方法
问题场景
尝试创建Hadoop凭证时,初始计划执行的命令:
hadoop credential create mysql.password -provider jceks://file/home/mahadev.duary/credential.jceks
实际执行的命令:
[mahadev.duary@ip-10-0-20-183 ~]$ hadoop credential create mysql.banking.password -provider jceks://home/mahadev.duary/credential.jceks
执行后抛出核心错误:
org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "home" at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:3273) at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3293) at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:120) at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3344) at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3312) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:478) at org.apache.hadoop.fs.Path.getFileSystem(Path.java:361) at org.apache.hadoop.security.alias.JavaKeyStoreProvider.initFileSystem(JavaKeyStoreProvider.java:89) at org.apache.hadoop.security.alias.AbstractJavaKeyStoreProvider.<init>(AbstractJavaKeyStoreProvider.java:85) at org.apache.hadoop.security.alias.JavaKeyStoreProvider.<init>(JavaKeyStoreProvider.java:49) at org.apache.hadoop.security.alias.JavaKeyStoreProvider.<init>(JavaKeyStoreProvider.java:41) at org.apache.hadoop.security.alias.JavaKeyStoreProvider$Factory.createProvider(JavaKeyStoreProvider.java:100) at org.apache.hadoop.security.alias.CredentialProviderFactory.getProviders(CredentialProviderFactory.java:73) at org.apache.hadoop.security.alias.CredentialShell$Command.getCredentialProvider(CredentialShell.java:193) at org.apache.hadoop.security.alias.CredentialShell$CreateCommand.validate(CredentialShell.java:357) at org.apache.hadoop.security.alias.CredentialShell.run(CredentialShell.java:81) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76) at org.apache.hadoop.security.alias.CredentialShell.main(CredentialShell.java:472)
错误原因
实际执行的命令中,-provider参数的路径格式错误:缺少file协议标识,导致Hadoop将路径开头的home识别为文件系统协议(scheme),但Hadoop并没有实现名为home的文件系统,因此抛出该异常。
解决方法
修正-provider参数的路径格式,添加file协议标识,正确的命令如下:
hadoop credential create mysql.banking.password -provider jceks://file/home/mahadev.duary/credential.jceks
若目标路径是当前用户的家目录,也可以使用完整绝对路径写法(需确保路径存在且有读写权限):
hadoop credential create mysql.banking.password -provider jceks://file///home/mahadev.duary/credential.jceks
补充说明
执行时出现的SLF4J类路径多绑定提示属于警告,不影响凭证创建功能。若要消除该警告,可清理Hadoop类路径中重复的SLF4J相关依赖包。
内容的提问来源于stack exchange,提问作者Mahadev Duary
相关产品推荐
相关产品推荐

