下面两个命令是把文件从HDFS上下载到本地的命令。

get

使用方法:Hadoop fs -get [-ignorecrc] [-crc]

复制文件到本地文件系统。可用-ignorecrc选项复制CRC校验失败的文件。使用-crc选项复制文件以及CRC信息。

示例:

hadoop fs -get /user/hadoop/file localfile

hadoop fs -get hdfs://host : port/user/hadoop/file localfile

返回值:

成功返回0,失败返回-1。

copyToLocal

使用方法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI

除了限定目标路径是一个本地文件外,和get命令类似。

也可以用如下的程序可实现将HDFS上的文件下载到本地。

import java.net.URI;
 import java.io.OutputStream;
 import java.io.BufferedInputStream;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.FSDataInputStream;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.IOUtils;
 public class FileCopy2Local
 {
 public static void main(String[] args) throws Exception
 {
   String dest = "hdfs://localhost:9000/user/laozhao0/cite2.txt";
   String local = "/home/laozhao0/cite2.txt";
   Configuration conf = new Configuration();
   FileSystem fs = FileSystem.get(URI.create(dest),conf);
   FSDataInputStream fsdi = fs.open(new Path(dest));
   OutputStream output = new FileOutputStream(local);
   IOUtils.copyBytes(fsdi,output,4096,true);
 }
 }




以下代码实现将本地文件拷到HDFS集群中
 
package com.njupt.Hadoop;
 

import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 

public class CopyToHDFS {
 

public static void main(String[] args) throws Exception{
 


Configuration conf = new Configuration();
 FileSystem fs = FileSystem.get(conf);
 Path source = new Path("/home/hadoop/word.txt");
 Path dst = new Path("/user/root/njupt/");
 fs.copyFromLocalFile(source,dst);
 }
 }



使用HDFS java api 下载文件到本地的代码如下:
 
  String file="hdfs://localhost:9000/user/Administrator/fooo/j-spatial.zip";//hdfs文件 地址
  Configuration config=new Configuration();
  FileSystem fs=FileSystem.get(URI.create(file),config);//构建FileSystem
  InputStream is=fs.open(new Path(file));//读取文件
  IOUtils.copyBytes(is, new FileOutputStream(new File("c:\\likehua.zip")),2048, true);//保存到本地  最后 关闭输入输出流linux


//将本地文件上传到hdfs。
  String target="hdfs://localhost:9000/user/Administrator/geoway_portal/tes2.dmp";
  FileInputStream fis=new FileInputStream(new File("C:\\tes2.dmp"));//读取本地文件
  Configuration config=new Configuration();
  FileSystem fs=FileSystem.get(URI.create(target), config);
  OutputStream os=fs.create(new Path(target));
  //copy
  IOUtils.copyBytes(fis, os, 4096, true);
  System.out.println("拷贝完成...");