目录
五、常用的shell指令
六、hdfs中块的概念
6.1 传统文件系统的块的缺点
6.2 HDFS的块的特点
6.3 HDFS的块大小
6.4 块的相关参数设置
6.5 HDFS块的存储位置
6.6 HDFS块大小的选择
6.7 块的参数
6.8 HDFS的优缺点
五、常用的shell指令
在命令上输入hdfs dfs 或者是hadoop fs后,直接回车就会提示相关的参数的用法
Usage: hadoop fs [generic options]
-- 创建目录指令
[-mkdir [-p] ...]
--文件的上传指令
[-copyFromLocal [-f] [-p] [-l] ... ]
[-put [-f] [-p] [-l] ... ]
[-moveFromLocal ... ]
--文件的下载指令
[-copyToLocal [-p] [-ignoreCrc] [-crc] ... ]
[-moveToLocal ]
[-get [-p] [-ignoreCrc] [-crc] ... ]
--文件的查看指令
[-cat [-ignoreCrc] ...]
[-tail [-f] ]
[-ls [-d] [-h] [-R] [ ...]]
--文件内容追加指令
[-appendToFile ... ]
--文件的权限管理制定
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
--hdfs系统的查看指令
[-df [-h] [ ...]]
[-du [-s] [-h] ...]
--文件的删除指令
[-rm [-f] [-r|-R] [-skipTrash] ...]
[-rmdir [--ignore-fail-on-non-empty] ...]
六、hdfs中块的概念
6.1 传统文件系统的块的缺点
传统文件系统中的块 没有规定块的大小是统一的,因此有以下缺点
-- 1. 负载不均衡: 每台机器上存储的文件大小非常不均匀,有的机器只存储很小的文件,有的机器存储很大的文件。
-- 2. 网络瓶颈问题: 网络带宽本来就稀缺,用户在使用时,集中到某几台机器上读取文件,因此本来就已经很稀缺的网络带宽有被稀释了。
6.2 HDFS的块的特点
-- hdfs的块大小统一,固定的。
-- hdfs的块大小可以自定义
默认情况:hadoo2.x ---->128M
hadoo1.x ---->64M
hadoo3.x ---->256M
-- 块是hdfs的最小存储单元
-- 块使用了副本的概念(提高数据的安全性,可靠性)
-- 块的多个副本一定是布局到不同的机器上的(一个机器不可能有一个块的两个副本)
-- 文件的最后一个块,通常是小于128M,实际大小是多少,就占磁盘多少空间。
注意:块的数量 和块的个数要区别开。
6.3 HDFS的块大小
6.1 传统文件系统的块的缺点
传统文件系统中的块 没有规定块的大小是统一的,因此有以下缺点
-- 1. 负载不均衡: 每台机器上存储的文件大小非常不均匀,有的机器只存储很小的文件,有的机器存储很大的文件。
-- 2. 网络瓶颈问题: 网络带宽本来就稀缺,用户在使用时,集中到某几台机器上读取文件,因此本来就已经很稀缺的网络带宽有被稀释了。
6.2 HDFS的块的特点
-- hdfs的块大小统一,固定的。
-- hdfs的块大小可以自定义
默认情况:hadoo2.x ---->128M
hadoo1.x ---->64M
hadoo3.x ---->256M
-- 块是hdfs的最小存储单元
-- 块使用了副本的概念(提高数据的安全性,可靠性)
-- 块的多个副本一定是布局到不同的机器上的(一个机器不可能有一个块的两个副本)
-- 文件的最后一个块,通常是小于128M,实际大小是多少,就占磁盘多少空间。
注意:块的数量 和块的个数要区别开。
6.3 HDFS的块大小
-- hdfs的块大小统一,固定的。
-- hdfs的块大小可以自定义
默认情况:hadoo2.x ---->128M
hadoo1.x ---->64M
hadoo3.x ---->256M
-- 块是hdfs的最小存储单元
-- 块使用了副本的概念(提高数据的安全性,可靠性)
-- 块的多个副本一定是布局到不同的机器上的(一个机器不可能有一个块的两个副本)
-- 文件的最后一个块,通常是小于128M,实际大小是多少,就占磁盘多少空间。
注意:块的数量 和块的个数要区别开。
6.3 HDFS的块大小
HDFS上的块大小为什么会远远大于传统文件?
1. 目的是为了最小化寻址开销时间。
在I/O开销中,机械硬盘的寻址时间是最耗时的部分,一旦找到第一条记录,剩下的顺序读取效率是非常高的,因此以块为单位读写数据,可以尽量减少总的磁盘寻道时间。
HDFS寻址开销不仅包括磁盘寻道开销,还包括数据块的定位开销,当客户端需要访问一个文件时,首先从名称节点获取组成这个文件的数据块的位置列表,然后根据位置列表获取实际存储各个数据块的数据节点的位置,最后,数据节点根据数据块信息在本地Linux文件系统中找到对应的文件,并把数据返回给客户端,设计成一个比较大的块,可以减少每个块儿中数据的总的寻址开销,相对降低了单位数据的寻址开销
磁盘的寻址时间为大约在5~15ms之间,平均值为10ms,而最小化寻址开销时间普遍认为占1秒的百分之一是最优的,那么块大小的选择就参考1秒钟的传输速度,比如2010年硬盘的传输速率是100M/s,那么就选择块大小为128M。
2. 为了节省内存的使用率
一个块的元数据大约150个字节。1亿个块,不论大小,都会占用20G左右的内存。因此块越大,集群相对存储的数据就越多。所以暴漏了HDFS的一个缺点,不适合存储小文件(杀鸡用牛刀的感觉)
6.4 块的相关参数设置
当然块大小在默认配置文件hdfs-default.xml中有相关配置,我们可以在hdfs-site.xml中进行重置
dfs.blocksize
134217728
默认块大小,以字节为单位。可以使用以下后缀(不区分大小写):k,m,g,t,p,e以重新指定大小(例如128k, 512m, 1g等)
dfs.namenode.fs-limits.min-block-size
1048576
以字节为单位的最小块大小,由Namenode在创建时强制执行。这可以防止意外创建带有小块的文件降低性能。
dfs.namenode.fs-limits.max-blocks-per-file
1048576
每个文件的最大块数,由写入时的Namenode执行。这可以防止创建降低性能的超大文件
6.5 HDFS块的存储位置
在hdfs-site.xml中我们配置过下面这个属性,这个属性的值就是块在linux系统上的存储位置
dfs.datanode.data.dir file://${hadoop.tmp.dir}/dfs/data
6.6 HDFS块大小的选择
--1. 块不能太大, 原因是网络带宽稀缺,下载时间长,带宽被稀释的就越多
--2. 块不能太小:
##1. 最小化寻址开销时间
寻址时间在大约在5ms~15ms左右,平均是10ms。如果块大小,那么传输这个块的时间就非常小,比如是10ms,那么传输时间和寻址时间的比例就是1:1的关系,寻址时间不能被忽略,相对来说,占用了整个作业时间的比例比较大。应该让寻址时间的比例越小越好,小到忽略不计。而开发人员认为1:100的比例是最优的。
因此选择了10ms:1000ms的比例,也就是选择1000ms能传输的数据大小。
在2010年左右, 磁盘每1s传入的数据大小是100M左右,选择2的幂次数,因此选择128M.
在hadoop1.x版本时,磁盘速率在50M左右,选择2的幂次数,因此选择64M.
在hadoop3.x版本时,磁盘速率在300M左右,选择2的幂次数,因此选择256M.
##2. namenode内存的利用率:
无论块是多大,对应的元数据都是150字节左右。 假如namenode的内存是20G,能存储块的数量为1.4亿左右。
如果块大小为1M。那么这个集群大约存储133TB的数据,那么集群的存储能力非常低
如果块大小为128M,那么这个集群大约存储16PB的数据
如果块大小为512M,那么这个集群大约存储64PB的数据
--3.扩展:怎么提高集群的存储能力
(1). 在namenode内存是固定的情况下,提高块的大小
(2). 在namenode内存充足的情况下,横向扩展集群的datanode个数。
6.7 块的参数
--1. dfs.blocksize:
块的大小对应的参数
--2. dfs.namenode.fs-limits.min-block-size:
块大小的最小值,默认是1M
--3. dfs.namenode.fs-limits.max-blocks-per-file:
每个文件的块的最大数量,默认是1048576个。
--4. 块的存储位置:
由dfs.datanode.data.dir参数决定: 默认值${hadoop.tmp.dir}/dfs/data
6.8 HDFS的优缺点
##1. 优点:
1. 高容错性(硬件故障是常态,高可靠性):数据自动保存多个副本,副本丢失后,会自动恢复
2. 适合大数据集:GB、TB、甚至PB级数据、千万规模以上的文件数量,1000以上节点规模。
3. 数据访问: 一次性写入,多次读取;保证数据一致性,安全性
4. 构建成本低:可以构建在廉价机器上。
5. 多种软硬件平台中的可移植性
6. 高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
##2. 缺点
1. 不适合做低延迟数据访问:
HDFS的设计目标有一点是:处理大型数据集,高吞吐率。这一点势必要以高延迟为代价的。因此HDFS不适合处理用户要求的毫秒级的低延迟应用请求
2. 不适合小文件存取:
一个是大量小文件需要消耗大量的寻址时间,违反了HDFS的尽可能减少寻址时间比例的设计目标。第二个是内存有限,一个block元数据大内存消耗大约为150个字节,存储一亿个block和存储一亿个小文件都会消耗20G内存。因此相对来说,大文件更省内存
3. 不适合并发写入,文件随机修改:
HDFS上的文件只能拥有一个写者,仅仅支持append操作。不支持多用户对同一个文件的写操作,以及在文件任意位置进行修改
--1. dfs.blocksize:
块的大小对应的参数
--2. dfs.namenode.fs-limits.min-block-size:
块大小的最小值,默认是1M
--3. dfs.namenode.fs-limits.max-blocks-per-file:
每个文件的块的最大数量,默认是1048576个。
--4. 块的存储位置:
由dfs.datanode.data.dir参数决定: 默认值${hadoop.tmp.dir}/dfs/data



