IDEA 创建HDFS项目 JAVA api
Posted JETIME庚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA 创建HDFS项目 JAVA api相关的知识,希望对你有一定的参考价值。
1.创建quickMaven
1.在properties中写hadoop 的版本号并且通过EL表达式的方式映射到dependency中
2.写一个repostory将依赖加载到本地仓库中
这是加载完成的页面
这是开发代码
package com.kevin.hadoop;
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.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URI;
/**
* Created by Administrator on 2018/7/21 0021.
* Hadoop HDFS java API 操作
*/
public class HDFSApp {
public static final String HDFS_PATH = "hdfs://hadoop000:8020";
//文件系统
FileSystem fileSystem = null;
//配置类
Configuration configuration = null;
//Before适用于类加载之前
@Test
/**
* 创建HDFS系统
*/
public void mkdir() throws Exception {
fileSystem.mkdirs(new Path("/hdfsapi/test"));
}
@Test
public void create() throws Exception {
FSDataOutputStream output = fileSystem.create(new Path("/hdfsapi/test/a.txt"));
output.write("hello hadoop".getBytes());
output.flush();
output.close();
}
@Test
/**
* 查看HDFS文件上的内容
*/
public void cat() throws Exception {
FSDataInputStream in = fileSystem.open(new Path("/hdfsapi/test/a.txt"));
IOUtils.copyBytes(in, System.out, 1024);
in.close();
}
@Before
public void setUp() throws Exception {
System.out.printf("HDFSapp.setup");
configuration = new Configuration();
//拿到文件系统
fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration, "hadoop");
}
//关闭资源用的这个
@After
public void tearDown() throws Exception {
//释放资源
configuration = null;
fileSystem = null;
System.out.printf("HDFSAPP.tearDown");
}
/**
* 重命名文件
*/
@Test
public void rename() throws Exception {
Path oldPath = new Path("/hdfsapi/test/a.txt");
Path newPath = new Path("/hdfsapi/test/b.txt");
fileSystem.rename(oldPath, newPath);
}
/**
* 上传一个文件
*
* @throws Exception
*/
@Test
public void copyFromLocalFile() throws Exception {
Path localPath = new Path(" //c//hello.txt");
Path hdfsPath = new Path("/hdfsapi/test");
fileSystem.copyFromLocalFile(localPath, hdfsPath);
}
/**
* 上传一个大文件
*
* @throws Exception
*/
@Test
public void copyFromLocalBigFile() throws Exception {
InputStream in = new BufferedInputStream(
new FileInputStream(
new File("C:\\\\mmall-fe\\\\all.zip")));
FSDataOutputStream output = fileSystem.create(new Path("/hdfsapi/test/all.zip"),
new Progressable() {
public void progress() {
System.out.print("."); //带进度提醒信息
}
});
IOUtils.copyBytes(in, output, 4096);
}
/**
* 下载HDFS文件
*/
@Test
public void copyTOLocalFile() throws Exception{
Path localPath = new Path("C:\\\\test\\\\b.txt");
Path hdfsPath = new Path("/hdfsapi/test/hello.txt");
fileSystem.copyToLocalFile(false,hdfsPath,localPath,true);
}
@Test
public void listFiles() throws Exception {
FileStatus[] fileStatuses = fileSystem.listStatus(new Path("/hdfsapi/test"));
for (FileStatus fileStatus : fileStatuses) {
String isDir = fileStatus.isDirectory() ? "文件夹" : "文件";
//副本
short replication = fileStatus.getReplication();
//大小
long len = fileStatus.getLen();
//路径
String path = fileStatus.getPath().toString();
System.out.println(isDir + "\\t" + replication + "\\t" + len + "\\t" + path);
}
}
@Test
public void delete() throws Exception{
fileSystem.delete(new Path("hdfsapi/test/"),true);
}
}
注意在查询文件的副本系数时如果是通过hadoop sell put上去的文件副本系数在伪分布式中是1,如果说是通过java api put上去的则副本系数是1,因为我们并没有在本地设置自己的副本系数,所以hadoop采用自己的副本系数
以上是关于IDEA 创建HDFS项目 JAVA api的主要内容,如果未能解决你的问题,请参考以下文章
Java API在HDFS上实现文件的上传下载到本地创建文件夹删除文件和重命名文件
GitIntelliJ IDEA 提交代码到 GitCode 远程仓库 ( GitCode 创建远程仓库 | 将本地工程推送到 GitCode 远程仓库 | 验证权限 | 生成个人访问令牌 )(代码片