package hdfs;
import java.io.IOException;
import java.sql.Date;
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.Path;
/**
* 利用HDFS的API,使用Java编写文件创建,写入,读取
* @author Administrator
*
*/
public class HDFSJavaAPIDemo {
public static void main(String[] args) throws IOException {
//throws IOException捕获异常声明
//读取hadoop文件系统配置
Configuration conf = new Configuration(); //实例化设置文件,configuration类实现hadoop各模块之间值的传递
FileSystem fs = FileSystem.get(conf); //是hadoop访问系统的抽象类,获取文件系统, FileSystem的get()方法得到实例fs,然后fs调动create()创建文件,open(0打开文件
System.out.println(fs.getUri());
Path file = new Path("/user/cMaster/myfile"); //命名一个文件
if (fs.exists(file)) {
System.out.println("File exists.");
} else
{
// Writing to file
FSDataOutputStream outStream = fs.create(file); //获取文件流
outStream.writeUTF("china cstor cstor cstor china"); //使用文件流写入文件内容
outStream.close();
}
// Reading from file
// FSDataInputStream实现了和接口,从而使Hadoop中的文件输入流具有流式搜索和流式定位读取的功能
FSDataInputStream inStream = fs.open(file); //获取文件流
String data = inStream.readUTF(); //使用输出流读取文件
//status from file
//FileStatus对象封装了文件的和目录的额元数据,包括文件长度、块大小、权限等信息
FileSystem hdfs = file.getFileSystem(conf);
FileStatus[] fileStatus = hdfs.listStatus(file);
for(FileStatus status:fileStatus)
{
System.out.println("FileOwer:"+status.getOwner());//所有者
System.out.println("FileReplication:"+status.getReplication());//备份数
System.out.println("FileModificationTime:"+new Date(status.getModificationTime()));//目录修改时间
System.out.println("FileBlockSize:"+status.getBlockSize());//块大小
}
System.out.println(data);
System.out.println("Filename:"+file.getName());//文件名
inStream.close();
fs.close();
}
}
Hadoop fs -mkdir /user/cMaster/myfile
Hadoop jar hdfsOperate.jar
hdfs编程实例
最新推荐文章于 2024-09-15 14:16:50 发布