配置Hadoop KMS使用HDFS密钥存储时遇hdfs协议无文件系统错误
这个问题我太熟悉了,之前帮团队部署KMS的时候踩过一模一样的坑!错误提示No FileSystem for scheme "hdfs"本质是KMS进程找不到HDFS客户端的依赖或配置,导致无法识别hdfs://协议。下面是我亲测有效的排查和解决步骤:
检查KMS类路径是否包含HDFS核心依赖
KMS要和HDFS交互,必须依赖HDFS客户端的jar包。你可以到KMS安装目录的lib文件夹下,确认是否存在hadoop-hdfs-*.jar、hadoop-hdfs-client-*.jar这类文件。如果是手动部署的KMS,大概率是漏了这些依赖——直接从Hadoop安装目录的share/hadoop/hdfs目录把对应的jar包复制过来,然后重启KMS服务即可。确保KMS能加载到HDFS的配置文件
KMS需要读取core-site.xml和hdfs-site.xml来初始化HDFS客户端连接。你需要:- 把这两个配置文件复制到KMS的
conf目录下; - 或者在KMS的启动脚本里指定
HADOOP_CONF_DIR环境变量,指向你的Hadoop配置根目录,比如:export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
做完这些后重启KMS,让它能获取到NameNode地址、RPC端口等关键配置。
- 把这两个配置文件复制到KMS的
验证KMS用户对目标HDFS路径的访问权限
在KMS所在节点,切换到KMS进程的运行用户(比如hadoop用户),执行以下命令测试HDFS路径的可访问性:hdfs dfs -ls hdfs://nn1.example.com/kms/如果这个命令报错,说明要么是网络不通(KMS节点连不上NameNode),要么是用户没有该路径的读写权限。先把这个问题解决——比如配置Hosts解析
nn1.example.com,或者用hdfs dfs -chown hadoop:hadoop /kms修改路径权限。尝试调整密钥存储URI的格式
你当前配置的jceks://hdfs@nn1.example.com/kms/test.jceks格式是正确的,但可以临时把域名换成NameNode的IP地址,排除DNS解析的问题。比如改成:<property> <name>hadoop.kms.key.provider.uri</name> <value>jceks://hdfs@192.168.1.100/kms/test.jceks</value> <description>URI of the backing KeyProvider for the KMS.</description> </property>修改后重启KMS,看是否能正常创建
test.jceks文件。
按照这些步骤逐一排查,基本就能解决这个问题了。
内容的提问来源于stack exchange,提问作者pablosjv




