当前位置:编程学习 > JAVA >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,