HDFS-- java代码读取,写入文件
hdfs对文件的写入过程大致流程:
- 设置配置信息
Configuration的配置主要是知道分布式文件系统的地址,知道文件往哪里写入,从哪里读取。也就是这一代码块
Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://Master:9000"); conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
- FileSystem
自我理解:就好比windows系统的文件管理系统吧,不过与Windows文件管理系统略微有所不同的是,FileSystem既可以管理本地的文件,也可以管理其他节点的文件。
- 对文件进行操作
- 写入文件操作流程
首先,如果要写入文件,那么你首先就必须要新建一个文件,也就是fs.create这个方法,只有创建了文件才可以将内容写进去
第二,写入内容。将内容转换成二进制文件写入
byte[] buff = content.getBytes(); FSDataOutputStream os = fs.create(new Path(file)); os.write(buff,0,buff.length);
操作完之后,关闭输出流,关闭文件系统
package com.jxufe.edu.xzy.hdfs;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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;
public class TestHdfs {
public static void main(String[] args) throws IllegalArgumentException, IOException {
// TODO Auto-generated method stub
Configuration conf = new Configuration();
//conf加载项目当中的hdfs-site.xml文件和core-site.xml文件
conf.set("fs.defaultFS","hdfs://Master:9000");//这里配置信息要与自己当前配置信息一致
conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
//hdfs读文件操作
String filename = "test3.txt";//写入文件
String filedir = "/usr/hadoop/";//写入文件目录
String file = filedir + filename;
FileSystem fs = FileSystem.get(conf);
if(fs.exists(new Path(file))){
System.out.println(("文件存在"));
readHdfsFile(file,conf);
}else{
System.out.println("文件不存在");
writeToHdfs(file,"Integrate the content last time!",conf);
}
fs.close();
}
public static void readHdfsFile(String file, Configuration conf) throws IOException{
FileSystem fs = FileSystem.get(conf);
FSDataInputStream getIt = fs.open(new Path(file));
BufferedReader bd = new BufferedReader(new InputStreamReader(getIt));
String content = bd.readLine();
System.out.println(file + ":"+content);
bd.close();
fs.close();
}
public static void writeToHdfs(String file, String content, Configuration conf) throws IllegalArgumentException, IOException{
FileSystem fs = FileSystem.get(conf);
//hdfs 写文件操作
byte[] buff = content.getBytes(); //要写入的内容
FSDataOutputStream os = fs.create(new Path(file)); //在hdfs中创建一个filename的文件
os.write(buff,0,buff.length); //写入数据
System.out.println("Create:"+file+" successful");
os.close();//关闭文件
fs.close();//关闭hdfs
}
}