按:本文的程序,不但能复制文件,也能复制目录。
pom.xml 和《Hadoop Java 程序1:复制本地文件到 HDFS》相同,代码更简单,如下:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;
public class DirectoryCopyWithProgress {
public static void main(String[] args) throws Exception{
String localSrc = args[0];
String dst = args[1];
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(dst), conf);
fs.copyFromLocalFile(false,true, new Path(localSrc), new Path(dst));
}
}
设置 classpath:
export HADOOP_CLASSPATH=/home/hadoop/sandbox
将编译后的 class 文件复制 namenode 的 /home/hadoop/sandbox 目录中,执行:
$ hadoop DirectoryCopyWithProgress testdata/ /
这条命令的完整形式是:
$ hadoop DirectoryCopyWithProgress testdata/ hdfs://192.168.1.150:9000/
以上指令用到的测试数据 testdata 目录及其中的数据,请事先准备。
验证,去 http://namenode_ip:50070/explorer.html 查看,在 / 已经有相关数据。