天天看點

HDFS——如何将檔案從HDFS複制到本地

下面兩個指令是把檔案從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);

 }

}