<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.1.1</version>
</dependency>
package com.imooc.bigdata;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.*;
import java.net.URI;
/**
* Unit test for simple App.
*/
public class HDFSAppTest {
public static final String HDFS_PATH = "hdfs://rocketmq-nameserver1:9000";
FileSystem fileSystem = null;
Configuration configuration = null;
@Before
public void setUp() throws Exception {
System.out.println("--------setup-------");
configuration = new Configuration();
configuration.set("dfs.replication", "1");//设置副本为1
fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration, "root");
}
@Test
public void mkdir() throws Exception{
Path path = new Path("/hdfsapi/test");
boolean result = fileSystem.mkdirs(path);
System.out.println(result);
}
/**
* 查看HDFS内容
*/
@Test
public void text() throws Exception {
FSDataInputStream in = fileSystem.open(new Path("/a.txt"));
IOUtils.copyBytes(in, System.out, 1024);
}
/**
* 创建文件
*/
@Test
public void create() throws Exception {
FSDataOutputStream out = fileSystem.create(new Path("/hdfsapi/test/b.txt"));
out.writeUTF("hello hdfs b");
out.flush();
out.close();
}
/**
* 修改文件名
* @throws Exception
*/
@Test
public void rename() throws Exception {
Path oldPath = new Path("/hdfsapi/test/b.txt");
Path newPath = new Path("/hdfsapi/test/c.txt");
boolean result = fileSystem.rename(oldPath, newPath);
System.out.println(result);
}
/**
* 拷贝本地文件到hdfs文件系统
* @throws Exception
*/
@Test
public void copyFromLocal() throws Exception {
Path src = new Path("D:/test.txt");
Path dst = new Path("/hdfsapi/test");
fileSystem.copyFromLocalFile(src, dst);
}
/**
* 拷贝本地大文件到hdfs文件系统,进行进度显示
* @throws Exception
*/
@Test
public void copyBigFromLocal() throws Exception {
InputStream in = new BufferedInputStream(new FileInputStream(new File("E:\\test.zip")));
FSDataOutputStream out = fileSystem.create(new Path("/hdfsapi/test/vm.zip"), new Progressable () {
public void progress() {
System.out.print(".");
}
});
IOUtils.copyBytes(in, out, 4096);
}
/**
* 从hdfs拷贝文件到本地
* @throws Exception
*/
@Test
public void copyToLocalFile() throws Exception {
Path src = new Path("/hdfsapi/test/c.txt");
Path dst = new Path("E:/sh");
fileSystem.copyToLocalFile(false, src, dst, true);
}
/**
* 获取文件夹下的所有文件
* @throws Exception
*/
@Test
public void listFile() throws Exception {
FileStatus[] statuses = fileSystem.listStatus(new Path("/hdfsapi/test"));
for (FileStatus status : statuses) {
System.out.println(status.getPermission().toString());
System.out.println(status.isDirectory());
System.out.println(status.getBlockSize());
System.out.println(status.getOwner());
System.out.println(status.isFile());
System.out.println(status.getLen());
System.out.println(status.getPath());
System.out.println("----------------");
}
System.out.println(statuses);
}
/**
* 递归获取文件夹下的所有文件
* @throws Exception
*/
@Test
public void listFileRecusive() throws Exception {
RemoteIterator<LocatedFileStatus> files = fileSystem.listFiles(new Path("/hdfsapi/test"), true);
while (files.hasNext()){
LocatedFileStatus status = files.next();
System.out.println(status.getPermission().toString());
System.out.println(status.isDirectory());
System.out.println(status.getBlockSize());
System.out.println(status.getOwner());
System.out.println(status.isFile());
System.out.println(status.getLen());
System.out.println(status.getPath());
System.out.println("----------------");
}
}
/**
* 查看文件块信息
* @throws Exception
*/
@Test
public void getFileBlockLocations() throws Exception {
FileStatus fileStatus = fileSystem.getFileStatus(new Path("/jdk-8u211-linux-x64.tar.gz"));
BlockLocation[] blockLocations = fileSystem.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
for (BlockLocation blockLocation : blockLocations) {
for(String name : blockLocation.getNames()){
System.out.println(name + " : " + blockLocation.getOffset() + " : " + blockLocation.getLength());
}
}
}
@Test
public void delete() throws Exception {
boolean result = fileSystem.delete(new Path("/jdk-8u211-linux-x64.tar.gz"), true);
System.out.println(result);
}
@After
public void tearDown(){
configuration = null;
fileSystem = null;
System.out.println("-------shutdown-----------");
}
// public static void main(String[] args) throws IOException, URISyntaxException, InterruptedException {
// Configuration configuration = new Configuration();
// FileSystem fileSystem = FileSystem.get(new URI("hdfs://rocketmq-nameserver1:9000"), configuration, "root");
// Path path = new Path("/hdfsapi/test");
// boolean result = fileSystem.mkdirs(path);
// System.out.println(result);
// }
}
JAVA API连接HA(High Available) Hadoop集群
package com.imooc.bigdata;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
/**
* Created by Administrator on 2020/4/15.
*/
public class HDFSTest {
public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
Configuration conf=new Configuration(false);
String nameservices = "mycluster";
String[] namenodesAddr = {"rocketmq-nameserver1:8020","rocketmq-nameserver2:8020"};
String[] namenodes = {"nn1","nn2"};
conf.set("fs.defaultFS", "hdfs://" + nameservices);
conf.set("dfs.nameservices",nameservices);
conf.set("dfs.ha.namenodes." + nameservices, namenodes[0]+","+namenodes[1]);
conf.set("dfs.namenode.rpc-address." + nameservices + "." + namenodes[0], namenodesAddr[0]);
conf.set("dfs.namenode.rpc-address." + nameservices + "." + namenodes[1], namenodesAddr[1]);
conf.set("dfs.client.failover.proxy.provider." + nameservices,"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");
String hdfsRPCUrl = "hdfs://" + nameservices + ":" + 8020;
// DistributedFileSystem dfs = new DistributedFileSystem();
// dfs.initialize(URI.create(hdfsRPCUrl),conf);
FileSystem dfs = FileSystem.get(new URI(hdfsRPCUrl), conf, "root");
try {
Path path = new Path("/dfs");
boolean result = dfs.mkdirs(path);
System.out.println(result);
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
dfs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}