Hadoop(四)hdfs基本操作

本文深入讲解了Hadoop的分布式文件系统HDFS的操作方法,包括shell客户端和Java客户端的使用,详细介绍了各种命令及其功能,提供了丰富的操作实例。

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 基本操作教程 #### 一、启动Hadoop服务 为了能够执行HDFS的操作,需要先确保Hadoop已经成功安装并且集群已正常启动。可以通过运行`start-dfs.sh`来启动HDFS[^1]。 ```bash $ start-dfs.sh ``` #### 二、配置HDFS Web UI登录静态用户 对于安全性和管理方便,在某些环境中可能还需要设置HDFS Web UI的访问控制,即配置允许哪些用户通过浏览器界面查看HDFS的状态信息和数据分布情况等。 #### 三、基础命令介绍 一旦Hadoop集群被正确初始化后,即可使用一系列内置工具来进行文件系统的交互式管理和维护工作。这里列举几个常用的命令: - **查询当前目录下的内容** 使用`hdfs dfs -ls /path/to/directory/`可以列出指定路径下所有的子项列表。请注意这里的斜杠(/),它表示根目录,并且在任何涉及HDFS路径的地方都应该保留这个前缀以防止错误发生[^2]。 - **上传文件至HDFS** 可采用两种方式之一将本地计算机中的文件传输到分布式存储系统内:一是利用`hdfs dfs -put localfile hdfs://namenode:port/path/to/hdfs/file`;二是借助于`hdfs dfs -copyFromLocal localfile path/in/HDFS`完成同样的任务。尽管二者功能相似,但在实际应用中推荐前者因为其灵活性更高一些[^3]。 - **下载文件从HDFS** 若要获取保存在远程节点上的资源副本回到个人机器上,则应调用如下指令:`hdfs dfs -get hdfs://namenode:port/path/to/hdfs/file destination/local/path` 或者 `hdfs dfs -copyToLocal source/from/HDFS localdestination`. - **创建新目录结构** 创建一个新的空文件夹只需要简单地输入`hdfs dfs -mkdir [-p] /new/folder/location`。其中选项-p参数的作用在于当父级不存在时自动建立完整的多层嵌套关系. - **删除对象(谨慎操作)** 删除单个文件或整个树形层次结构分别对应着不同的语法形式——针对单独实体可直接写成`hdfs dfs -rm filename`;而对于非空集合则需附加-r标志位形成完整表达式如`hdfs dfs -rm -r directoryname`.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值