HDFS的概述
HDFS是一个文件系统,通过目录树来定位文件,是分布式的。适合一次写入,多次读出的场景,并且不支持文件的修改(文件上传到HDFS后,不能修改,但是在文件末尾可以追加内容)。
HDFS的优点和缺点
序号 | 优点 |
---|---|
1 | 高容错性 |
2 | 适合处理大数据 |
3 | 通过多副本机制,提高可靠性 |
序号 | 缺点 |
---|---|
1 | 不适合低延时数据访问 |
2 | 无法高效的对大量小文件进行存储 |
3 | 不支持及并发写入,文件随机修改 |
问题??
一、为什么HDFS中块(block)不能设置太大,也不能设置太小?
二、 HDFS中块(block)的大小为什么设置为128M?
寻址时间:HDFS中找到目标文件块(block)所需要的时间。
原理:
文件块越大,寻址时间越短,但磁盘传输时间越长;
文件块越小,寻址时间越长,但磁盘传输时间越短。
一、为什么HDFS中块(block)不能设置太大,也不能设置太小?
1、如果块设置过大,
一方面,从磁盘传输数据的时间会明显大于寻址时间,导致程序在处理这块数据时,变得非常慢;
另一方面,mapreduce中的map任务通常一次只处理一个块中的数据,如果块过大运行速度也会很慢。
2、如果块设置过小,
一方面存放大量小文件会占用NameNode中大量内存来存储元数据,而NameNode的内存是有限的,不可取;
另一方面文件块过小,寻址时间增大,导致程序一直在找block的开始位置。因而,块适当设置大一些,减少寻址时间,那么传输一个由多个块组成的文件的时间主要取决于磁盘的传输速率。
二、 HDFS中块(block)的大小为什么设置为128M?
1、 HDFS中平均寻址时间大概为10ms;
2、经过前人的大量测试发现,寻址时间为传输时间的1%时,为最佳状态;所以最佳传输时间为10ms/0.01=1000ms=1s
3、目前磁盘的传输速率普遍为100MB/s;计算出最佳block大小:100MB/s x 1s = 100MB所以我们设定block大小为128MB。
ps:实际在工业生产中,磁盘传输速率为200MB/s时,一般设定block大小为256MB
磁盘传输速率为400MB/s时,一般设定block大小为512MB
使用shell操作HDFS
基本语法格式
第一种:bin/hadoop hds 参数
第二种:bin/hdfs dfs 参数
常用的参数表
参数 | 描述 |
---|---|
-help | 输出这个参数的帮助信息 |
-ls | 显示目录信息 |
-mkdir | 在hdfs上创建目录 |
-test | 检测文件或文件目录是否存在 |
-moveFromLocal | 从本地剪切粘贴到HDFS |
-appendToFile | 在已经上传的文件末尾追加内容 |
-cat | 显示文件的内容 |
-chmod | 修改文件的权限 |
-chown | 修改文件属主/属组 |
-copyFromLocal | 本地文件系统中拷贝文件到HDFS |
-copyToLocal | 从HDFS系统中拷贝文件到本地 |
-cp | 从HDFS的一个路径拷贝到另一个路径 |
-mv | 在HDFS文件系统中移动文件 |
-get | 从HDFS系统中下载文件到本地 |
-getmerge | 合并下载多个文件 |
-put | 本地文件拷贝到HDFS |
-tail | 显示指定文件的末尾10行 |
-rm | 删除文件或文件夹 |
-rmdir | 删除空文件夹 |
-du | 统计文件夹的大小 |
-setrep | 设置HDFS系统中文件的副本数量 |
使用shell操作HDFS,底层通过Java实现的
[hadoop01@hadoop01 bin]$ vim hadoop
[hadoop01@hadoop01 bin]$ vim hdfs
通过上面两图可以看出;底层通过org.apache.hadoop.hdfs.tools.DFSck的Java类实现对HDFS的操作
bin/hadoop hdfs -help 命令 / bin/hdfs dfs -help 命令
显示指定命令的参数
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hadoop fs -help rm
-rm [-f] [-r|-R] [-skipTrash] <src> ... :
Delete all files that match the specified file pattern. Equivalent to the Unix
command "rm <src>"
-skipTrash option bypasses trash, if enabled, and immediately deletes <src>
-f If the file does not exist, do not display a diagnostic message or
modify the exit status to reflect an error.
-[rR] Recursively deletes directories
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hdfs dfs -help