Windows Server 2012中Pentaho「Get File Names」自2019年7月起失效
解决Windows Server 2012上Pentaho「Get File Names」步骤报错问题
这种问题我之前在处理Windows Server环境下的Pentaho任务时也碰到过,结合你提供的错误日志(提示org.apache.commons.vfs.FileNotFolderException: 无法列出"file:///Y:/20190728"的内容,因为它不是一个文件夹),大概率是Windows Server的权限配置、映射盘符的服务上下文兼容性,或者旧版本Pentaho的VFS库兼容性导致的,给你几个实用的排查和解决方向:
1. 检查共享文件夹的权限配置
- 确保运行Pentaho的账户(如果是服务运行就是服务账户,手动运行就是当前登录账户)对
Y:\20190728这个共享文件夹拥有读取、列出文件夹内容的权限。Windows Server的权限管控比Windows 7严格很多,哪怕你能在资源管理器正常访问,服务账户可能没有对应的权限。 - 可以尝试用Pentaho的运行账户直接登录Windows Server,手动访问Y盘的目标文件夹,确认能正常查看里面的文件。
2. 替换映射盘符为UNC路径
Windows Server上的映射盘符(比如Y:\)在服务运行的上下文里经常会失效,建议把路径改成UNC格式,比如:
\\你的服务器主机名\共享文件夹名\20190728
Pentaho的VFS(虚拟文件系统)对UNC路径的兼容性更好,能避免映射盘符在服务环境下的识别问题。如果是跨域共享,还要确保运行账户有对应的域权限。
3. 升级Pentaho或更新VFS库
你使用的是Pentaho 5.3.0.0版本,这个版本比较老旧(2015年构建),其依赖的commons-vfs库对Windows Server 2012的文件系统支持存在兼容性bug:
- 优先考虑升级Pentaho到较新的稳定版本(比如8.x或9.x系列),新版本修复了不少VFS相关的兼容性问题。
- 如果暂时无法升级,可以尝试手动替换Pentaho安装目录
lib文件夹下的commons-vfs*.jar文件为更新的稳定版本(注意要选择与Pentaho版本兼容的VFS版本,避免依赖冲突)。
4. 提前验证路径有效性
可以在「Modified Java Script Value」步骤里添加代码,提前验证目标路径是否存在且为文件夹:
var folder = new java.io.File(folderrow); if (!folder.exists()) { logError("路径不存在: " + folderrow); } else if (!folder.isDirectory()) { logError("路径不是文件夹: " + folderrow); }
这样能提前排查路径是否存在识别错误,也能帮助你确认Pentaho是否真的能访问到目标文件夹。
附错误日志详情
Transformation 2 - 从XML文件[file:///D:/Pentaho/CN-EAI-PentahoTool/sourceCode/BSCReadFilesInFolder.ktr]加载转换 2019/07/28 23:45:04 - readFilesInFolder - 转换[readFilesInFolder]的调度已启动 2019/07/28 23:45:04 - Get rows from result.0 - 处理完成(I=0, O=0, R=1, W=2, U=0, E=0) 2019/07/28 23:45:04 - Write to log.0 - 2019/07/28 23:45:04 - Write to log.0 - ------------> 第1行------------------------------ 2019/07/28 23:45:04 - Write to log.0 - folderrow = Y:\20190728 2019/07/28 23:45:04 - Write to log.0 - 2019/07/28 23:45:04 - Write to log.0 - ==================== 2019/07/28 23:45:04 - Modified Java Script Value.0 - 优化级别设置为9。 2019/07/28 23:45:04 - Write to log.0 - 处理完成(I=0, O=0, R=1, W=1, U=0, E=0) 2019/07/28 23:45:04 - FileInputList - 错误(版本5.3.0.0-213,构建版本1,构建于2015-02-02_12-17-08,构建者buildguy) : org.apache.commons.vfs.FileNotFolderException: 无法列出"file:///Y:/20190728"的内容,因为它不是一个文件夹。 2019/07/28 23:45:04 - FileInputList - at org.apache.commons.vfs.provider.AbstractFileObject.getChildren(Unknown Source) 2019/07/28 23:45:04 - FileInputList - at org.pentaho.di.core.fileinput.FileInputList.createFileList(FileInputList.java:243) 2019/07/28 23:45:04 - FileInputList - at org.pentaho.di.trans.steps.getfilenames.GetFileNamesMeta.getDynamicFileList(GetFileNamesMeta.java:679) 2019/07/28 23:45:04 - FileInputList - at org.pentaho.di.trans.steps.getfilenames.GetFileNames.processRow(GetFileNames.java:176) 2019/07/28 23:45:04 - FileInputList - at org.pentaho.di.trans.step.RunThread.run(RunThread.java:62) 2019/07/28 23:45:04 - FileInputList - at java.lang.Thread.run(Thread.java:745) 2019/07/28 23:45:04 - Modified Java Script Value.0 - 处理完成(I=0, O=0, R=1, W=1, U=0, E=0)
内容的提问来源于stack exchange,提问作者santhosh
相关产品推荐
相关产品推荐

