一段上传和下载HDFS的文件的小代码。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Before;
import org.junit.Test;
/**
* 一个简单的上传文件到hdfs和一个下载hdfs上的文件到本地的例子
* @author gyli
*
*/
public class HDFSClient {
private FileSystem fs = null;
@Before
public void getFs() throws IOException, InterruptedException, URISyntaxException {
// 创建一个配置类
Configuration conf = new Configuration();
// 设置文件系统类型为hdfs类型
conf.set("fs.defaulFS", "hdfs://master:9000/");
// 获得文件系统对象,使用这种方式获取文件系统对象,设置了用户身份为root
fs = FileSystem.get(new URI("hdfs://master:9000/"), conf, "root");
// 以这种方式获取文件系统对象,用户身份为系统默认身份。
// 如果在windows下进行开发,会到导致系统不认识windows下的用户的身份,而判断为用户没有权限
// fs = FileSystem.get(conf);
}
/**
* 上传文件
* @throws IOException
*/
@Test
public void testUpLoad() throws IOException {
// 创建一个目标文件
Path destFile = new Path("hdfs://master:9000/jdk.tgz");
FSDataOutputStream os = fs.create(destFile);
// 打开一个本地文件
FileInputStream is = new FileInputStream("F:/Software/javatools/jdk-7u55-linux-x64.gz");
// 上传到hdfs
IOUtils.copy(is, os);
}
/**
* 下载文件
* @throws IllegalArgumentException
* @throws IOException
*/
@Test
public void testDownLoad() throws IllegalArgumentException, IOException {
// 打开一个hdfs上的文件
FSDataInputStream is = fs.open(new Path("hdfs://192.168.2.100:9000/hadoop-2.6.0.tar.gz"));
// 创建一个本地输出流
FileOutputStream fos = new FileOutputStream("D:/hadoop-2.6.0-1.tar.gz");
// 拷贝hdfs上的文件到本地
IOUtils.copy(is, fos);
}
}
学习的时候写的测试,当时学习笔记