HDFS命令
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html#expunge
HDFS使用的典型块大小为128 MB。因此,一个HDFS文件被分成128 MB的块,如果可能的话,每个块将驻留在不同的DataNode上。
dfs和fs的区别:fs在本地和HDFS交互时使用。dfs仅仅是针对于HDFS。
创建命令:
$ hadoop fs -mkdir -p delete / test1$ hadoop fs -mkdir -p delete / test2$ hadoop fs -ls delete/
第一种删除
,将要删文件移入垃圾箱
$ hadoop fs -rm -r delete / test1将hdfs:// localhost:8020 / user / hadoop / delete / test1移至:hdfs:// localhost:8020 / user / hadoop / .Trash / Current
第二种删除,直接删除要删文件
$ hadoop fs -rm -r -skipTrash delete / test2
删除/ test2
查看垃圾箱文件:
$ hadoop fs -ls .Trash / Current / user / hadoop (hdp)/ delete /
移动文件命令
:从垃圾目录中将被删除文件移动到目标目录中
$ hadoop fs -mv /user/hdp/.Trash/Current/user/hdp/delete /user/hdp/hadoop101/testsun
- hadoop fs -mv / user / hadoop / file1 / user / hadoop / file2
- hadoop fs -mv hdfs://nn.example.com/file1 hdfs://nn.example.com/file2 hdfs://nn.example.com/file3 hdfs://nn.example.com/dir1
上传文件命令
:从将本地文件上传到hadoop中(因为你无法直接修改hadoop中的文件,所以必须本地修改再上传)
$ hadoop fs -put test.txt /tmp/hadoop101
读取文件内容的命令:
$ hadoop fs -cat /tmp/hadoop101/test.txt
把
文件复制到本地文件系统的命令:
$ hadoop fs -get /tmp/hadoop101/testsun/sun.txt testsun/delete
- hadoop fs -get / user / hadoop / file localfile
- hadoop fs -get hdfs://nn.example.com/user/hadoop/file localfile
- -p:保留访问和修改时间,所有权和权限。(假设权限可以跨文件系统传播)-f:覆盖目标,如果它已经存在。
- -ignorecrc:跳过对下载的文件进行CRC校验。-crc:为下载的文件写入CRC校验和。
查看给定目录中包含的文件和目录大小的命令:
$ hadoop fs -du /tmp/hadoop101
显示具体文件大小
的命令:
$ hadoop fs -du -s /tmp/hadoop101/testsun/sun.txt
$ hadoop fs -dus /tmp/hadoop101/testsun/sun.txt(旧版)
创建一个指定name的
空
文件:(Linux中创建文件是touch)
$ hadoop fs -touchz /tmp/hadoop101/sh.txt
HDFS Federation机制
![](https://i-blog.csdnimg.cn/blog_migrate/3961a5e6cdf65af0215c9a46ba3b2517.png)
NameNod内存空间使用过高的问题,紧接着提到了其中一个解决方案,就是
HDFS Federation
.
所有关于存储数据的信息和管理是放在NameNode这边,而真实数据的存储则是在各个DataNode下.而这些隶属于同一个NameNode所管理的数据都是在同一个命名空间下的.而一个namespace对应一个block pool.Block Pool是同一个namespace下的block的集合.
HDFS Federation
意味着在集群中将会有多个namenode/namespace,多namespace的方式可以直接减轻单一NameNode的压力.我们完全可以将上面部分大的文件目录移到另外一个NameNode上做管理.
更重要的一点在于,这些NameNode是共享集群中所有的DataNode的,它们还是在同一个集群内的
。
![](https://i-blog.csdnimg.cn/blog_migrate/71efea18ae1d8ab11d763c93c3453c96.png)
HDFS Federation方案的优势
第一点,命名空间的扩展.因为随着集群使用时间的加长,HDFS上存放的数据也将会越来越多.这个时候如果还是将所有的数据都往一个NameNode上存放,这个文件系统会显得非常的庞大.这时候我们可以进行横向扩展,把一些大的目录分离出去.使得每个NameNode下的数据看起来更加的精简.
第二点,性能的提升.这个也很好理解.当NameNode所持有的数据量达到了一个非常大规模的量级的时候(比如超过1亿个文件),这个时候NameNode的处理效率可能就会有影响,它可能比较容易的会陷入一个繁忙的状态.
而整个集群将会受限于一个单点NameNode的处理效率,从而影响集群整体的吞吐量.
这个时候多NameNode机制显然可以减轻很多这部分的压力.
第三点,资源的隔离.这一点考虑的就比较深了.通过多个命名空间,
我们可以将关键数据文件目录移到不同的NameNode上,以此不让这些关键数据的读写操作受到其他普通文件读写操作的影响
.也就是说这些NameNode将会只处理特定的关键的任务所发来的请求,而屏蔽了其他普通任务的文件读写请求,以此做到了资源的隔离。