我正尝试将大量文件(100k +,总大小2 TB)从NFS复制到HDFS。有效的方法是什么?
将其安装到边缘节点后,我尝试了以下选项
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
答案 0 :(得分:1)
为了使distcp
工作,应从群集中的所有工作节点访问本地文件,方法是通过每个节点上的挂载点访问共享的NFS位置,或通过物理方式将其复制到以下位置的本地文件系统中:每个节点。
或者,如果您增加hadoop客户程序的堆大小,hdfs dfs -put
(或-copyFromLocal
)仍然可以工作:
$ export HADOOP_CLIENT_OPTS="-DXmx4096m $HADOOP_CLIENT_OPTS"
但是,正如您所说的,与distcp相比,传输会更慢。
答案 1 :(得分:0)
您可以尝试在core-site.xml中设置属性,以将hdfs路径作为NFS挂载到本地目录,然后将文件从NFS复制到该路径
dfs.nfs3.export.point = [您的hdfs路径]