【问题标题】:Copy Files from NFS or Local FS to HDFS将文件从 NFS 或本地 FS 复制到 HDFS
【发布时间】:2019-11-21 20:27:34
【问题描述】:

我正在尝试将大量文件(100k+,总大小 2 TB)从 NFS 复制到 HDFS。什么是有效的方法。

在将其安装到边缘节点后,我尝试了以下选项

  1. hdfs dfs -put : 因内存错误而失败,传输也很慢
  2. distcp : 出现错误原因:

    org.apache.hadoop.tools.mapred.RetriableFileCopyCommand$CopyReadException: java.io.FileNotFoundException:

但是文件存在。

我在本地文件上尝试了相同的操作,但没有使用 NFS 安装位置。 我知道 distcp 的警告之一是,必须分发目的地。它也适用于来源吗?或者它是一个错误并有解决方法?

distcp 命令:

hadoop distcp file:/home/<user>/t1/f1.dat hdfs://<hdfs-ip>:8020/user/<user>/t1

错误:

Error: java.io.IOException: org.apache.hadoop.tools.mapred.RetriableFileCopyCommand$CopyReadException: java.io.FileNotFoundException: File file:/home/<user>/t1/f1.dat does not exist
        at org.apache.hadoop.tools.mapred.CopyMapper.map(CopyMapper.java:224)
        at org.apache.hadoop.tools.mapred.CopyMapper.map(CopyMapper.java:50)
        at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:796)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:342)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:175)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1844)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:169)
Caused by: org.apache.hadoop.tools.mapred.RetriableFileCopyCommand$CopyReadException: java.io.FileNotFoundException: File file:/home/<user>/t1/f1.dat does not exist
        ... 10 more

【问题讨论】:

  • 您是否尝试过正确指定文件系统,即“file:///home//...”?
  • @mazaneicha 是的,同样的错误
  • 我假设你检查了权限?
  • @mazaneicha 是的,为了确保我在获得完全许可后重试,但没有运气
  • 您是否可以从所有集群节点访问此本地文件?

标签: hadoop hdfs nfs distributed-system distcp


【解决方案1】:

为了使distcp 工作,本地文件应该可以从集群内的所有工作节点访问,或者通过每个节点上的挂载点来访问共享 NFS 位置,或者通过将其物理复制到每个节点的本地文件系统.

或者,如果您增加 hadoop 客户端的堆大小,hdfs dfs -put(或-copyFromLocal)仍然可以工作:

$ export HADOOP_CLIENT_OPTS="-DXmx4096m $HADOOP_CLIENT_OPTS"  

但正如你所说,传输会比 distcp 慢。

【讨论】:

    【解决方案2】:

    您可以尝试在 core-site.xml 中设置属性以将 hdfs 路径作为 NFS 挂载到本地目录,然后将文件从 NFS 复制到此路径

    dfs.nfs3.export.point=[你的 hdfs 路径]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多