您的位置:首页 > 运维架构

【Hadoop】HDFS客户端开发示例

2016-09-02 17:58 323 查看
1、原理、步骤



2、HDFS客户端示例代码

package com.ares.hadoop.hdfs;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
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.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class HDFSTest {
private static final Logger LOGGER = Logger.getLogger(HDFSTest.class);

private FileSystem fs = null;

@Before
public void setUp() throws IOException, URISyntaxException, InterruptedException {
Configuration conf = new Configuration();
//        conf.set("fs.defaultFS", "hdfs://HADOOP-NODE1:9000");
//        URI uri = new URI("hdfs://HADOOP-NODE1:9000");
//        this.fs = FileSystem.get(uri, conf, "HADOOP");
this.fs = FileSystem.get(conf);
}
@After
public void tearDown() throws IOException {
// TODO Auto-generated method stub
this.fs.close();
}

@Test
public void testGET() throws IOException {
// TODO Auto-generated method stub
LOGGER.debug("HDFSTest: GET FILE TEST");
Path path = new Path("hdfs://HADOOP-NODE1:9000/jdk-7u60-linux-x64.tar.gz");
FSDataInputStream fsDataInputStream = this.fs.open(path);
FileOutputStream fileOutputStream = new FileOutputStream("./testdata/get-test-jdk.tar.gz");
IOUtils.copy(fsDataInputStream, fileOutputStream);
}

@Test
public void testPUT() throws IOException {
// TODO Auto-generated method stub
LOGGER.debug("HDFSTest: PUT FILE TEST");
Path path = new Path("hdfs://HADOOP-NODE1:9000/put-test-jdk.tar.gz");
FSDataOutputStream fsDataOutputStream = this.fs.create(path);
FileInputStream fileInputStream = new FileInputStream("./testdata/test-jdk.tar.gz");
IOUtils.copy(fileInputStream, fsDataOutputStream);
}

@Test
public void testGET_NEW() throws IOException {
// TODO Auto-generated method stub
LOGGER.debug("HDFSTest: GET_NEW FILE TEST");
Path src = new Path("hdfs://HADOOP-NODE1:9000/jdk-7u60-linux-x64.tar.gz");
Path dst = new Path("./testdata/get-test-new-jdk.tar.gz");
this.fs.copyToLocalFile(src, dst);
}

@Test
public void testPUT_NEW() throws IOException {
// TODO Auto-generated method stub
LOGGER.debug("HDFSTest: PUT_NEW FILE TEST");
Path src = new Path("./testdata/test-jdk.tar.gz");
Path dst = new Path("hdfs://HADOOP-NODE1:9000/put-test-new-jdk.tar.gz");
this.fs.copyFromLocalFile(src , dst);
}

@Test
public void testMKDIR() throws IOException {
// TODO Auto-generated method stub
LOGGER.debug("HDFSTest: MKDIR TEST");
Path f = new Path("/mkdir-test/testa/testb");
this.fs.mkdirs(f);
}

@Test
public void testRM() throws IOException {
// TODO Auto-generated method stub
LOGGER.debug("HDFSTest: RM TEST");
Path f = new Path("/mkdir-test");
this.fs.delete(f, true);
}

@Test
public void testLIST() throws IOException {
// TODO Auto-generated method stub
LOGGER.debug("HDFSTest: LIST TEST");
Path f = new Path("/");
//LIST FILES
RemoteIterator<LocatedFileStatus> files = this.fs.listFiles(f, true);
while (files.hasNext()) {
LocatedFileStatus file = files.next();
LOGGER.debug(file.getPath());
LOGGER.debug(file.getPath().getName());
}

//LIST DIRS
FileStatus[] files2 = this.fs.listStatus(f);
//        for (int i = 0; i < files2.length; i++) {
//            LOGGER.debug(files2[i].getPath().getName());
//        }
for (FileStatus fileStatus : files2) {
LOGGER.debug(fileStatus.getPath().getName());
LOGGER.debug(fileStatus.isDirectory());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: