将HDFS目录复制到本地节点

时间:2014-08-13 12:59:32

标签: java hadoop hdfs

我正在使用单节点Hadoop 2.4群集。 我可以使用hadoop fs -copyToLocal myDirectory .

从HDFS复制目录及其所有内容

但是,我无法通过此java代码成功执行相同的操作:

public void map Object key, Text value, Context context)
                throws IOException, InterruptedException {
    Configuration conf = new Configuration(true);
    FileSystem hdfs = FileSystem.get(conf);
    hdfs.copyToLocalFile(false, new Path("myDirectory"), 
                         new Path("C:/tmp"));
}

此代码仅复制myDirectory的一部分。我还收到一些错误消息:

14/08/13 14:57:42 INFO mapreduce.Job: Task Id : attempt_1407917640600_0013_m_000001_2, Status : FAILED
Error: java.io.IOException: Target C:/tmp/myDirectory is a directory

我的猜测是映射器的多个实例正在尝试同时将同一个文件复制到同一个节点。但是,我不知道为什么不复制所有内容。

这是我的错误的原因,我怎么能解决它?

1 个答案:

答案 0 :(得分:1)

您可以使用DistributedCachedocumentation)复制所有数据节点上的文件,也可以尝试在映射器的设置中复制文件。