客户端的理解

hdfs的客户端有多种形式:

  1. 网页形式
  2. 命令行形式
  3. 客户端在哪里运行,没有约束,只要运行客户端的机器能够跟hdfs集群联网

 

文件的切块大小和存储的副本数量,都是由客户端决定!

所谓的由客户端决定,是通过配置参数来定的

hdfs的客户端会读以下两个参数,来决定切块大小、副本数量:

切块大小的参数: dfs.blocksize

副本数量的参数: dfs.replication

 

上面两个参数应该配置在客户端机器的hadoop目录中的hdfs-site.xml中配置

<property>
<name>dfs.blocksize</name>
<value>64m</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>

hdfs客户端的常用操作命令

1、上传文件到hdfs中

(hadoop fs -copyFromLocal /本地文件  /hdfs路径   ##  copyFromLocal等价于 put)

(hadoop fs -moveFromLocal /本地文件  /hdfs路径  ## 跟copyFromLocal的区别是:从本地移动到hdfs中)

hadoop fs -put /本地文件  /     

hadoop上传文件异步 hadoop客户端上传文件_hdfs

生成的这些副本会放在hdfs集群的datanode里面,datanode拿到分割的块以后,会放在它的数据目录里面

hdpdata/data/current/---一连串的数------/current/finalized/subdri0

hadoop上传文件异步 hadoop客户端上传文件_hdfs命令_02

如果一个机器上有这个文件的所有块,可以直接用命令拼起来变成完整的文件:(不建议这样,可能会损坏文件,只是玩一下)

cat 块1 >> 文件

cat 块2 >> 文件

hadoop上传文件异步 hadoop客户端上传文件_hadoop上传文件异步_03

如果要取文件的话直接用客户端去取,上述只是为了了解下它的工作机制:

2、下载文件到客户端本地磁盘

hadoop fs -get /hdfs中的路径   /本地磁盘目录-----------(它会去先找namenode看下这个文件有几块,每一块在哪些机器上能找到,然后把第二块追加第一块,依次往后,追加完后本地文件已生成好)

(hadoop fs -copyToLocal /hdfs中的路径 /本地磁盘路径   ## 跟get等价)

(hadoop fs -moveToLocal /hdfs路径  /本地路径  ## 从hdfs中移动到本地)

3、在hdfs中创建文件夹

hadoop fs -mkdir  -p /zjx/zjx

查看 hadoop fs -ls /

4、移动hdfs中的文件(更名)

hadoop fs -mv /hdfs的路径1  /hdfs的另一个路径2

复制hdfs中的文件到hdfs的另一个目录

hadoop fs -cp /hdfs路径_1  /hdfs路径_2

5、删除hdfs中的文件或文件夹

hadoop fs -rm -r /zjx/zjx       (删除hdfs的文件以后,其他机器关于这个文件的块就都没了,而且关于namenode的元数据也被删除了)

6、查看hdfs中的文本文件内容

hadoop fs -cat /demo.txt

hadoop fs -tail -f /demo.txt

7、写一个新文件:echo "i love you" >zhitiao.txt

将此纸条追加到hdfs已存在的文件里:hadoop fs -appendToFile zhitiao.txt /hdfs.log

其他命令:hadoop fs会提示你命令不对,然后列出所有命令

8更改用户权限:hadoop fs chown zjx:zjx /文件

hadoop fs -chmod 700 /文件

附:hdfs命令行客户端的所有命令列表

Usage: hadoop fs [generic options]
        [-appendToFile <localsrc> ... <dst>]
        [-cat [-ignoreCrc] <src> ...]
        [-checksum <src> ...]
        [-chgrp [-R] GROUP PATH...]
        [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
        [-chown [-R] [OWNER][:[GROUP]] PATH...]
        [-copyFromLocal [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
        [-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
        [-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] <path> ...]
        [-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>]
        [-createSnapshot <snapshotDir> [<snapshotName>]]
        [-deleteSnapshot <snapshotDir> <snapshotName>]
        [-df [-h] [<path> ...]]
        [-du [-s] [-h] [-x] <path> ...]
        [-expunge]
        [-find <path> ... <expression> ...]
        [-get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
        [-getfacl [-R] <path>]
        [-getfattr [-R] {-n name | -d} [-e en] <path>]
        [-getmerge [-nl] [-skip-empty-file] <src> <localdst>]
        [-help [cmd ...]]
        [-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [<path> ...]]
        [-mkdir [-p] <path> ...]
        [-moveFromLocal <localsrc> ... <dst>]
        [-moveToLocal <src> <localdst>]
        [-mv <src> ... <dst>]
        [-put [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
        [-renameSnapshot <snapshotDir> <oldName> <newName>]
        [-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...]
        [-rmdir [--ignore-fail-on-non-empty] <dir> ...]
        [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
        [-setfattr {-n name [-v value] | -x name} <path>]
        [-setrep [-R] [-w] <rep> <path> ...]
        [-stat [format] <path> ...]
        [-tail [-f] <file>]
        [-test -[defsz] <path>]
        [-text [-ignoreCrc] <src> ...]
        [-touchz <path> ...]
        [-truncate [-w] <length> <path> ...]
        [-usage [cmd ...]]