HDFS文件操作
来源:互联网 发布:软件开发技术培训机构 编辑:程序博客网 时间:2024/04/28 03:00
HDFS是一种文件系统,存储着Hadoop应用将要处理的数据,类似于普通的Unix和linux文件系统,不同的是他是实现了google的GFS文件系统的思想,是适用于大规模分布式数据处理相关应用的、可扩展的分布式文件系统。它有以下优点:
1、在分布式存储中,经常会出现节点失效的情况,HDFS可以持续监视,错误检查,容错处理,自动恢复;
2、分布式存储的文件都是非常巨大的,HDFS重新规定了每次I/O的块的大小;
3、对于搜索引擎的业务,大部分都只会在文件尾添加新数据,很少修改已有数据。HDFS做了优化;
4、与应用一起设计的文件系统API对整个系统的弹性和适用性有很大好处;
5、有效的支持多个客户端并行添加同一个文件。
虽然HDFS实现了这么多的功能,但是因为它已经实现为一个开源框架,所以对于程序开发者来说,并不需要了解其底层的文件操作,我们可以通过其提供的一套与linux文件命令类似的命令行工具来进行文件操作。
基本文件命令:
格式为:hadoop fs -cmd <args>
cmd的命名通常与unix对应的命令名相同。例如,文件列表命令: hadoop fs -ls
1、添加目录和文件
HDFS有一个默认的工作目录 /user/$USER,其中$USER是你的登录用户名。不过目录不会自动建立,我们现在用mkdir建立它,我使用的是chen作为用户名。
hadoop fs -mkdir /user/chen
(hadoop的mkdir命令会自动创建父目录,类似于带-p的unix命令)
我们现在放本地文件系统的一个文件进去。
hadoop fs -put example.txt .
最后一个参数是句点,相当于放入了默认的工作目录,等价于 hadoop fs -put example.txt /user/chen
当你把文件放入HDFS上后,你就可以运行Hadoop程序来处理它。
2、检索文件
get命令与put命令相反,它从HDFS复制文件回到本地文件系统。
hadoop fs -get example.txt .
复制到本地的当前工作目录中。
另一种是显示数据,用cat
hadoop fs -cat example.txt
3、删除文件
rm命令
hadoop fs -rm example.txt
也可以用来删除空目录
编程读写HDFS
利用HDFS给我们提供的API,我们同样可以访问它。
在Hadoop中用作文件操作的主类位于org.apache.hadoop.fs软件包中。包括常见的open、read、write、 close。Hadoop文件的API起点是FileSystem类,这是一个与文件系统交互的抽象类,我们通过调用factory的方法 FileSystem.get(Configuration conf)来取得所需的FileSystem实例,如下我们可以获得与HDFS接口的FileSystem对象:
Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.get(conf);//获得HDFS的FileSystem对象
如果我们要实现HDFS与本地文件系统的交互,我们还需要获取本地文件系统的FileSystem对象
FileSystem local = FileSystem.getLocal(conf);//获得本地文件系统的FileSystem对象
以下代码讲解了一个例子,我们开发一个PutMerge程序,用于合并本地文件后放入HDFS,因为大文件HDFS处理起来比较容易,所以这个程序经常会在以后的开发中用到
01
import
java.io.IOException;
02
03
import
org.apache.hadoop.conf.Configuration;
04
import
org.apache.hadoop.fs.FSDataInputStream;
05
import
org.apache.hadoop.fs.FSDataOutputStream;
06
import
org.apache.hadoop.fs.FileStatus;
07
import
org.apache.hadoop.fs.FileSystem;
08
import
org.apache.hadoop.fs.Path;
09
10
public
class
PutMerge {
11
12
public
static
void
main(String[] args)
throws
IOException {
13
Configuration conf =
new
Configuration();
14
FileSystem hdfs =FileSystem.get(conf);
//获得HDFS文件系统的对象
15
FileSystem local = FileSystem.getLocal(conf);
//获得本地文件系统的对象
16
Path inputDir =
new
Path(args[
0
]);
//设定输入目录
17
Path hdfsFile =
new
Path(args[
1
]);
//设定输出目录
18
19
try
{
20
FileStatus[] inputFiles = local.listStatus(inputDir);
//FileStatus的listStatus()方法获得一个目录中的文件列表
21
FSDataOutputStream out = hdfs.create(hdfsFile);
//生成HDFS输出流
22
for
(
int
i =
0
; i < inputFiles.length; i ++){
23
System.out.println(inputFiles[i].getPath().getName());
24
FSDataInputStream in = local.open(inputFiles[i].getPath());
//打开本地输入流
25
byte
[] buffer =
new
byte
[
256
];
26
int
bytesRead =
0
;
27
while
((bytesRead = in.read(buffer))>
0
){
28
out.write(buffer,
0
,bytesRead);
//通过一个循环来写入
29
}
30
in.close();
31
}
32
out.close();
33
}
catch
(IOException e) {
34
e.printStackTrace();
35
}
36
}
- HDFS文件操作
- HDFS文件操作
- HDFS的文件操作
- HDFS文件操作命令
- HDFS API 文件操作
- HDFS文件常用操作
- HDFS文件操作命令
- Hadoop HDFS文件操作
- hdfs文件操作
- 操作hdfs文件
- HDFS文件操作命令
- HDFS 文件操作
- HDFS 文件操作
- HDFS文件操作
- HDFS文件操作常用命令
- HDFS文件操作
- HDFS文件操作
- HDFS命令行文件操作
- [“软”权力更值得追求]
- 数据库总结
- 第五章 工作流定义工具的设计与实现(一)
- android游戏开发(三)触屏事件处理_手势识别
- ALTER TABLE 语句
- HDFS文件操作
- Android多线程任务的优化1:AsyncTask的缺陷
- 谈程序设计风格一
- matlab toolbox(audio)
- hadoop 启动错误解决办法Retrying connect to server: master/192.168.1.240:9000. Already tried 0 time(s)
- 静静的在心里承受所有的伤痛和不快乐
- 8天入门wpf—— 第三天 样式
- srilm编译
- 梳排序Linux下c 实现