HDFS Java开发
HDFS Java开发
搭建HDFS开发环境
1、导入Hadoop Jar包
2、建立resources文件夹,加配置文件(core-site.xml hdfs-site.xml)
3、new Configuration 进行操作
Configuration cfg = new Configuration();
cfg.addResource();//添加新的资源配置文件
cfg.get(“fs.default.name”);
cfg.get(“myInt”, 123);
FileSystem抽象
建立文件/文件夹
删除文件/文件夹
读取文件
写入文件
修改文件/文件夹名字
移动/复制
看javadoc,操作和之前介绍的命令行很类似。
FileSystem fs = FileSystem.get(cfg); //根据配置得到文件系统
Path path = new Path(“a”); //如果以/开头表示绝对路径,否则相对
FSDataOutputStream fdos = fs.create(path); //根据路径创建文件 得到一个流 会递归创建
fs.create(path, 是否递归);
fs.create(path,复制几份);
fdos.close();
fdos.writeBytes();//写字节
fs.mkdirs(path); 创建目录 会递归
fs.delete(path, 是否递归);
fs.delete();
不支持随机修改 不支持并非修改 但支持追加
为了支持追加,需要配置:
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
Path path = new Path(“路径”);
FSDataIOutputStream fdos = fs.append(path); //追加
fdos.write……即可
fdos.flush();//刷出数据
FSDataInputStream fdis = fs.open(path);
Text line = new Text();
LineReader reader = new LineReader(fdis); //一行一行的读
while(reader.readLine(line) > 0) {
System.out.println(line);//输出
}
fdis.close();
fs.rename(oldPath, newPath); //重命名
复制:
Path localPath = new Path(……);
Path hdfsPath = new Path(……);
fs.copyFromLocalFile (localPath, hdfsPath); 默认不删除本地 不覆盖hdfs
fs.copyFromLocalFile (false, localPath, hdfsPath); false表示不删除local的
fs.copyFromLocalFile (false,false, localPath, hdfsPath); false表示不删除local的 也不覆盖
同理 还有一个copyToLocalFile 复制hdfs到本地,API完全类似
Path localPath = new Path(……);
Path hdfsPath = new Path(……);
fs. copyToLocalFile(hdfsPath, localPath); 默认不删除hdfs不覆盖本地
fs. copyToLocalFile(false, hdfsPath, localPath); false表示不删除local的
fs. copyToLocalFile(false,false, localPath, hdfsPath); false表示不删除local的 也不覆盖
移动(一定先删除老的 再移动)
Path localPath = new Path(……);
Path hdfsPath = new Path(……);
fs.moveFromLocalFile (localPath, hdfsPath);
fs.moveFormLocalFile(Path数组, hdfs目录);
同理 还有一个moveToLocalFile移动hdfs到本地,API完全类似
Path localPath = new Path(……);
Path hdfsPath = new Path(……);
fs.moveToLocalFile (hdfsPath, localPath);
fs. moveToLocalFile (hdfs目录数组, 本地目录);
其他
fs.getDefaultBlockSize() 得到默认的block块大小
fs.getUri() hdfs的路径
fs.getDefaultReplication() 备份数量
fs.getWorkingDirectory 默认工作目录uri
fs.getHomeDirectory
fs.listStatus(hdfs目录); 得到当前目录下所有文件/文件夹信息
Path path = new Path(……);
path.depth();//深度
path.getParent();//父亲
FileUtil API详解
FileUtil fileUtil = new FileUtil();
fileUtil.copy(本地文件, FileSystem, hdfs Path, 是否删除源, Configuration); //从本地到HDFS
fileUtil.copy(FileSystem, hdfs Path, 本地文件, 是否删除源, Configuration);//从HDFS到本地
还可以从一个HDFS到另一个HDFS
fileUtil.copy(源FileSystem, 源Path, 目标FileSystem, 目标Path, 是否删除源, Configuration)
合并目录(很不错,java里没这样的东西)
FileUtil.copyMerge(源FileSystem, 源Path, 目标FileSystem, 目标Path, 是否删除源, Configuration, “备注”)
fileUtil.fullyDelete(new File(“……”)); //本地的完全删除
补充:软件开发 , Java ,