本文实例为大家分享了利用Java实现HDFS文件上传下载的具体代码,供大家参考,具体内容如下
1、pom.xml配置
<!--配置-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<hadoop.version>3.1.3</hadoop.version>
</properties>
<!--依赖库-->
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>${hadoop.version}</version>
</dependency>
</dependencies>
2、创建与删除
//导包
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
public static void main( String[] args ){
//初始化hadoop文件系统的configration对象
Configuration conf = new Configuration();
//将hadoop的configration信息传入
conf.set("fs.defaultFS","hdfs://192.168.50.102:9000");
//初始化Hadoop文件系统的句柄
FileSystem fs=null;
try {
//配置Hadoop的文件句柄信息
fs=FileSystem.get(conf);
//定义Hadoop的文件路径
final String PATH="/test/kb16/hadoop/ratings.csv";
//初始化Hadoop的路径信息
Path path = new Path(PATH);
//如果文件路径存在就删除
if (fs.exists(path)) {
System.out.println("DELETE "+fs.delete(path, true));
}else{
//如果文件路径不存在就创建
System.out.println("CREATE "+fs.create(path));
}
} catch (IOException e) {
e.printStackTrace();
}finally {
//结束的时候,句柄还没有释放就进行释放
if (fs!=null) {
try {
fs.close() ;
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
3、文件上传
//导包
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.File;
import java.io.IOException;
public static void main(String[] args) {
//定义本地上传文件路径
final String formPath="E:\\ratings.csv";
//本地文件不存在就报错,并强制让程序终止
if (!new File(formPath).exists()) {
System.out.println(formPath +"doesn't exits");
return;
}
//初始化hadoop文件系统的configration对象
Configuration conf = new Configuration();
//将hadoop的configration信息传入
conf.set("fs.defaultFS","hdfs://192.168.50.102:9000");
//初始化Hadoop文件系统的句柄
FileSystem fs=null;
try {
//将config信息传入
fs=FileSystem.get(conf);
//定义上传到HDFS的路径
final String toPath="/test/kb16/hive";
//初始化路径
Path to =new Path(toPath);
//如果文件路径存在不执行,如果文件路径不存在就尝试创建,如果创建失败就跳过
if (!fs.exists(to)&& !fs.mkdirs(to)) {
System.out.println(toPath +"doesn't exit and can't be created");
return;
}
//初始化上传文件路径
Path from=new Path(formPath);
//利用方法将本地文件复制到HDFS中
fs.copyFromLocalFile(from, to);
System.out.println("succeed in copying from "+formPath+" to "+toPath);
} catch (IOException e) {
e.printStackTrace();
System.out.println("FAILURE");
}finally{
//如果结束Hadoop文件系统句柄没有关闭,利用方法进行句柄释放
if (null!=fs) {
try {
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
4、文件下载
//导包
import com.google.inject.internal.cglib.core.$LocalVariablesSorter;
import com.google.inject.internal.cglib.proxy.$Factory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.File;
import java.io.IOException;
public class Download {
public static void main(String[] args) {
//定义文件下载路径
final String toPath = "C:\\Users\\Jialin\\Desktop";
//获取路径
File to = new File(toPath);
//如果路存在或者文件路径不存在但是创建成功就不执行if方法
if (!to.exists()&&!to.mkdirs()) {
System.err.println(toPath + "doesn't exist and can't be created");
return;
}
//初始化hadoop文件系统的configration对象
Configuration config = new Configuration();
//将hadoop的configration信息传入
config.set("fs.defaultFS", "hdfs://192.168.50.102:9000");
//初始化Hadoop文件系统的句柄
FileSystem fs = null;
try {
//将config信息传入
fs = FileSystem.get(config);
//定义下载文件路径
final String fromPath = "/test/kb16/hive/ratings.csv";
//获取路径信息
Path from = new Path(fromPath);
//如果指定下载文件不存在就退出
if (!fs.exists(from)) {
System.err.println(toPath + "doesn't exist ");
return;
}
//获取文件下载路径信息
Path _to = new Path(toPath);
//利用方法将Hadoop文件下载到本地
fs.copyToLocalFile(from,_to);
System.out.println("succeed in downloading from "+fromPath+" to"+toPath);
} catch (IOException e) {
e.printStackTrace();
System.out.println("FAILURE");
} finally {
//如果结束Hadoop文件系统句柄没有关闭,利用方法进行句柄释放
if (null != fs)
try {
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。