hdfs dfs -ls本地路径与webhdfs路径文件数不一致的原因咨询
可能的原因分析
这是HDFS不同访问方式下很容易碰到的问题,我整理了几个最常见的诱因:
权限身份不一致
本地执行hdfs dfs -ls /data时,默认使用的是你当前登录操作系统的用户身份;而通过WebHDFS访问时,若没有显式指定用户,会默认使用WebHDFS服务进程的运行用户(比如hdfs用户,或者集群配置的匿名用户)。如果缺失的2个文件恰好设置了仅允许你的本地用户访问,WebHDFS用的用户没有权限,自然就看不到。你可以试试在WebHDFS命令里显式指定用户验证:hdfs dfs -ls webhdfs://x.x.x.x:14000/data?user.name=你的本地用户名WebHDFS的配置限制
有些集群管理员会给WebHDFS配置额外的过滤规则或返回限制:比如隐藏某些系统临时文件,或者通过dfs.webhdfs.list.limit参数限制单次返回的文件数量。如果你的/data目录下刚好有超过限制的文件,WebHDFS就会截断结果。另外,也有可能集群配置了WebHDFS仅允许访问特定路径,刚好那2个文件的路径不在允许范围内。NameNode元数据同步延迟(HA场景)
如果你的集群是HA(高可用)模式,要确认WebHDFS指向的是Active还是Standby NameNode。Standby NameNode的元数据是从Active同步过来的,存在一定延迟;如果那2个文件是刚创建的,Standby还没同步到最新元数据,就会出现数量差异。这种情况下,切换到Active的WebHDFS端口访问就能看到完整文件列表。符号链接的处理差异
HDFS的符号链接在不同访问方式下的处理可能不同:hdfs dfs -ls默认会显示符号链接本身,但WebHDFS可能不会解析或展示符号链接(取决于集群配置)。你可以先检查本地hdfs dfs -ls /data的结果里,缺失的2个是不是符号链接。缓存或代理层的干扰
如果WebHDFS请求经过了HTTP代理或者缓存服务,可能拿到的是缓存的旧结果,而本地命令直接访问NameNode拿到的是最新元数据。这种情况可以等几分钟再试WebHDFS命令,或者清空代理缓存后重试。
内容的提问来源于stack exchange,提问作者Bhadresh

