客户端的理解
hdfs的客户端有多种形式:
- 网页形式
- 命令行形式
- 客户端在哪里运行,没有约束,只要运行客户端的机器能够跟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 /本地文件 / 顺便看一下管理端的页面如下:
生成的这些副本会放在hdfs集群的datanode里面,datanode拿到分割的块以后,会放在它的数据目录里面
hdpdata/data/current/---一连串的数------/current/finalized/subdri0
如果一个机器上有这个文件的所有块,可以直接用命令拼起来变成完整的文件:(不建议这样,可能会损坏文件,只是玩一下)
cat 块1 >> 文件
cat 块2 >> 文件
如果要取文件的话直接用客户端去取,上述只是为了了解下它的工作机制:
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 ...]]