HDFS copyToLocalFile抛出java.io.IOException:Mkdirs无法创建文件

时间:2016-01-13 14:31:19

标签: java hdfs

我正在尝试使用Hadoop FileSystem类将文件从HDFS复制到本地linux文件系统。

我可以在我尝试复制的路径中创建文件夹,我使用mkdir命令进行了检查。

我也尝试使用shell命令hadoop fs -copyToLocal hdfsFilePath localFilepath它正在运行。

我在YARN Cluster上运行它。 我尝试了以下方法,但我收到java.io.IOException: Mkdirs failed to create file:/home/user错误。

错误日志:

16/01/14 01:09:36 ERROR util.FileUtil: 
java.io.IOException: Mkdirs failed to create /home/user (exists=false, cwd=file:/hdfs4/yarn/nm/usercache/user/appcache/application_1452126203792_8862/container_e2457_1452126203792_8862_01_000001)
    at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:442)
    at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:428)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:908)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:889)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:786)
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:365)
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:338)
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:289)
    at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1970)
    at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1939)
    at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1915)
    at com.batch.util.FileUtil.copyToLocalFileSystem(FileUtil.java:66)
    at com.batch.dao.impl.DaoImpl.writeFile(DaoImpl.java:108)
    at com.batch.JobDriver.runJob(JobDriver.java:79)
    at com.batch.JobDriver.main(JobDriver.java:54)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:480)

实际上我将localFilePath作为/home/user/test传递,但我收到的错误如failed to create file:/home/user

fs.copyToLocalFile(hdfsFilePath, localFilePath);
fs.copyToLocalFile(false, hdfsFilePath, localFilePath, true);

2 个答案:

答案 0 :(得分:2)

对于任何正在寻找此确切错误的人,但可能不是来自YARN的人:

尝试在使用org.apache.hadoop.fs.FileSystem.copyToLocalFile属性配置的本地FS的本地(Mac)计算机上运行job.local.dir时出现此确切错误。

这是一个例外:

java.io.IOException: Mkdirs failed to create file:/User/yossiv/algo-resources/AWS/QuerySearchEngine.blacklistVersionFile (exists=false, cwd=file:/Users/yossiv/git/c2s-algo)
    at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:456)
    at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:441)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:928)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:909)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:806)
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:368)
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:341)
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:292)
    at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:2066)
    at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:2035)
    at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:2011)

job.local.dir更改为当前目录下的 的解决方法,该目录在cwd=之后的异常文本中列出,在我的情况下为{{1} }。

为此,我摔了两天,希望能对某人有所帮助。

答案 1 :(得分:1)

本周我面临同样的问题,问题是我正在集群模式部署作业,因此作业将要运行的机器没有创建该目录。您是否可以在群集模式中部署作业?如果是,请尝试在客户端模式中部署它(输出目录必须存在)