HDFS是Hadoop的分布式文件系统,存储海量数据,通过多HDFS操作的了解,进一步了解HDFS。
HDFS上的操作,通过两个方面来了解,1:shell客户端,2:Java客户端。
一,shell客户端
shell命令操作hdfs的一般格式为
hadoop fs [option] [command]
或者
hdfs dfs [option] [command]
1.1,option,如下表。
| 选项 | 用法 |
| -conf <configuration file> | 指定一个配置文件 |
| -D <property=value> | 使用指定property的value |
| -fs <local|namenode:port> | 指定hdfs的namenode地址 |
| -jt <local|resourcemanager:port> | 指定ResourceManager |
| -files <comma separated list of files> | 指定需要复制到map reduce集群的 逗号 分割的文件 |
| -libjars <comma separated list of jars> | 指定逗号分隔的jar文件添加到classpath |
| -archives <comma separated list of archives> | 指定逗号分隔的archive在计算机上取消归档 |
1.2,command,如下表。
| 命令 | 用法 |
| [-appendToFile <localsrc> ... <dst>] | 追加写入到文件 localsrc为-表示从stdin标准输入读入,即控制台读入 |
| [-cat [-ignoreCrc] <src> ...] | 查看文件 -ignoreCrc 忽略校验 |
| [-checksum <src> ...] | 显示文件和校验i西南西 |
| [-chgrp [-R] GROUP PATH...] | 修改属组 |
| [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...] | 修改文件或者目录Owner |
| [-chown [-R] [OWNER][:[GROUP]] PATH...] | 修改文件或者目录的权限 |
| [-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>] | 从本地文件系统复制文件到hdfs |
| [-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] | 从hdfs复制文件到本地文件系统 |
| [-count [-q] [-h] <path> ...] | 统计文件数量 -q,显示配额信息 -h,显示空间大小单位 |
| [-cp [-f] [-p | -p[topax]] <src> ... <dst>] | 复制文件 -f,覆盖已有文件 |
| [-createSnapshot <snapshotDir> [<snapshotName>]] | 创建快照,对开启快照功能的目录创建快照,没有开启,执行命令会保存。 snapshot(快照)是一个全部文件系统、或者某个目录在某一时刻的镜像。创建动作仅仅是在目录对应的Inode上加个快照的标签,不会涉及到数据块的拷贝操作,也不会对读写性能有影响,但是会占用namenode一定的额外内存来存放快照中被修改的文件和目录的元信息 |
| [-deleteSnapshot <snapshotDir> <snapshotName>] | 删除快照 |
| [-df [-h] [<path> ...]] | 查看磁盘空间 -h,输出带单位 |
| [-du [-s] [-h] <path> ...] | 打印指定目录占用磁盘空间大小 -h,指定空间大小单位 g ,m,k -s,只输出指定目录空间总和 |
| [-expunge] | 清空回收站 |
| [-find <path> ... <expression> ...] | 查找文件或目录 |
| [-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] | 下载文件 |
| [-getfacl [-R] <path>] | 显示访问控制列表 -R,递归显示 |
| [-getfattr [-R] {-n name | -d} [-e en] <path>] | 获取扩展属性值和名称 |
| [-getmerge [-nl] <src> <localdst>] | 将hdfs中指定目录下所有文件合并到本地文件系统中 -nl,在合并的文件中新增换行 |
| [-ls [-d] [-h] [-R] [<path> ...]] | 查看目录下结构 -d 返回path -h 按照指定的单位(KB,MB,GB)显示文档大小 -R 查看级联目录 |
| [-mkdir [-p] <path> ...] | 创建目录 -p 创建多级目录 |
| [-moveFromLocal <localsrc> ... <dst>] | 从本地文件系统移动到hdfs |
| [-moveToLocal <src> <localdst>] | 从hdfs移动到本地文件系统 |
| [-mv <src> ... <dst>] | 在hdfs中将文件或目录,从一个目录移动到另一个目录 |
| [-put [-f] [-p] [-l] <localsrc> ... <dst>] | 上传文件 -f,原来文件存在,覆盖原来文件 -p,保留原来文件的访问,用户组,修改时间,权限 |
| [-renameSnapshot <snapshotDir> <oldName> <newName>] | 重命名快照 |
| [-rm [-f] [-r|-R] [-skipTrash] <src> ...] | 删除文件或者目录 -f 如果要删除的文件不存在,不显示错误信息 -r/R,级联删除目录下的文件子文件 |
| [-rmdir [--ignore-fail-on-non-empty] <dir> ...] | 删除空目录 --ignore-fail-on-non-empty,不为空时忽略失败提示 |
| [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]] | 设置访问控制列表,acl默认未开启,直接使用会报错, 在hdfs-site.xml中设置开启 -m,修改acl |
| [-setfattr {-n name [-v value] | -x name} <path>] | 设置扩展属性的值和名称 -n,扩展属性名称 -v,扩展属性值 -x,删除扩展属性名称 |
| [-setrep [-R] [-w] <rep> <path> ...] | 设置副本数量 -R设置文件夹下所有文件的副本数量 |
| [-stat [format] <path> ...] | 显示文件统计信息,format参数间linux命令stat 如:hadoop fs -fs hdfs://172.16.0.2:9000/ -stat '%b %n %o %r %Y' /hadoop/sql |
| [-tail [-f] <file>] | 输出文件的最后10行到stdout标准输出,即控制台 -f,跟随文件内容的变化而变化 |
| [-test -[defsz] <path>] |
|
| [-text [-ignoreCrc] <src> ...] | 查看文件 -ignoreCrc 忽略校验 |
| [-touchz <path> ...] | 在hdfs中新建文件 |
| [-truncate [-w] <length> <path> ...] | 清空hdfs指定目录 |
1.3,操作例举
1.3.1,查看目录
[root@master2 /]# hdfs dfs -ls /
Found 6 items
drwxr-xr-x - root supergroup 0 2019-07-26 02:11 /hadoop
drwxr-xr-x - root supergroup 0 2019-07-25 08:16 /hbase
-rw-r--r-- 2 root supergroup 1447 2019-07-26 02:09 /id.zip
-rw-r--r-- 2 root supergroup 20536 2019-07-25 02:17 /index.html
drwx------ - root supergroup 0 2019-07-25 02:10 /tmp
drwxr-xr-x - root supergroup 0 2019-07-25 01:48 /user
[root@master2 /]# hdfs dfs -ls -R /
drwxr-xr-x - root supergroup 0 2019-07-26 02:11 /hadoop
drwxr-xr-x - root supergroup 0 2019-07-24 09:59 /hadoop/hdfs
drwxr-xr-x - root supergroup 0 2019-07-26 01:40 /hadoop/input
-rw-r--r-- 2 root supergroup 24 2019-07-26 01:40 /hadoop/input/input1
-rw-r--r-- 2 root supergroup 40 2019-07-26 01:40 /hadoop/input/input2
drwxr-xr-x - root supergroup 0 2019-07-25 01:36 /hadoop/mapreduce
drwxr-xr-x - root supergroup 0 2019-07-26 02:11 /hadoop/output
-rw-r--r-- 2 root supergroup 0 2019-07-26 02:11 /hadoop/output/_SUCCESS
-rw-r--r-- 2 root supergroup 60 2019-07-26 02:11 /hadoop/output/part-r-00000
drwxr-xr-x - root supergroup 0 2019-07-25 01:34 /hadoop/yarn
1.3.2,创建目录
[root@master2 /]# hdfs dfs -ls -R /test
drwxr-xr-x - root supergroup 0 2019-07-29 01:42 /test/test1
1.3.3,复制本地文件
[root@master2 data]# hdfs dfs -copyFromLocal file1.txt /test/test1/file.txt
[root@master2 data]# hdfs dfs -ls /test/test1
Found 1 items
-rw-r--r-- 2 root supergroup 27 2019-07-29 01:43 /test/test1/file.txt
1.3.4,删除文件
[root@master2 data]# hdfs dfs -ls /test/test1
[root@master2 data]# hdfs dfs -ls /test/
Found 1 items
drwxr-xr-x - root supergroup 0 2019-07-29 01:44 /test/test1
更多操作命令,请参考option表和command表自行组合,非常简单易用。
二,Java客户端
通过Java客户端,连接hdfs,对hdfs进行相应的操作。
2.1,maven依赖
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.7</version>
</dependency>
给Java项目添加依赖,并编译成功,编译过程中可能需要添加其他依赖包。
2.2,下载hdfs客户端依赖工具
windows访问hadoop需要下载hadoop-common-2.7.1-bin-master插件,解压并且将hadoop-common-2.7.1-bin-master添加到环境变量。
下载地址请参考,http://dl.bintray.com/sequenceiq/sequenceiq-bin/,选择自己hadoop对应的版本,下载,解压,配置。
2.3,编码,访问并操作hdfs
如下是一个创建目录,并查看目录的简单程序。
@Test
public void testHdfs(){
Configuration configuration = new Configuration();
System.setProperty("HADOOP_USER_NAME","root");
configuration.set("fs.defaultFS", "hdfs://114.116.30.200:9000");
try {
FileSystem fs = FileSystem.get(configuration);
//创建目录
fs.mkdirs(new Path("/hadoop/mapreduce"));
//查看目录
FileStatus[] fileStatuses = fs.listStatus(new Path("/hadoop"));
for(FileStatus fileStatus : fileStatuses){
System.out.println(fileStatus.getPath());
}
} catch (IOException e) {
e.printStackTrace();
}
}
如上,使用JavaAPI,即可完成对HDFS的访问,数据操作。
(完)(^_^)
本文深入讲解了Hadoop的分布式文件系统HDFS的操作方法,包括shell客户端和Java客户端的使用,详细介绍了各种命令及其功能,提供了丰富的操作实例。
3818

被折叠的 条评论
为什么被折叠?



