guo20082200

Results 1 comments of guo20082200

> > 我也有同样的问题,感觉是ide状态下获取父级路径出现了问题 > > 原因: > > 1. HdfsWriter类下面的buildTmpFilePath()方法拼接临时目录时方法读取当前运行环境的路径分隔符并拼接到临时路径中(例: > `[hdfs://10.80.7.18:8020/home/hdfs/input/temp__e250c7ab_8228_4932_bf34_ac3ecd5617a6\student_hive__082ea874_a42b_4e87_9028_82d6b59ea801)`,你会发现student_hive(配置文件中的fileName)前面的分隔符是Windows系统下的’\‘而不是unix系统下的’/‘; > 2. 在作业处理完后HdfsWriter类的post方法会调用执行HdfsHelper类的renameFile()方法,该方法完成重命名和删除临时文件的步骤。renameFile()方法读取srcFilePath(即第一步生成的临时文件路径)的父级路径用于删除操作的临时路径,这时由于路径分隔符不同,此时导致提取的父路径直接到达配置文件中属性path中的父路径级别,所以delete操作会把整个同步数据包括原来的数据库文件都删除了 > `if(tmpFilesParent == null){ tmpFilesParent = srcFilePah.getParent(); }` > 3. 拼接路径分隔符应该以写入端的系统路径分隔符为准,而不是服务运行所在的系统为准。 感谢老哥