目录
五、常用的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]六、hdfs中块的概念 6.1 传统文件系统的块的缺点...] --文件的上传指令 [-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] ...]
传统文件系统中的块 没有规定块的大小是统一的,因此有以下缺点 -- 1. 负载不均衡: 每台机器上存储的文件大小非常不均匀,有的机器只存储很小的文件,有的机器存储很大的文件。 -- 2. 网络瓶颈问题: 网络带宽本来就稀缺,用户在使用时,集中到某几台机器上读取文件,因此本来就已经很稀缺的网络带宽有被稀释了。6.2 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中进行重置6.5 HDFS块的存储位置 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执行。这可以防止创建降低性能的超大文件
在hdfs-site.xml中我们配置过下面这个属性,这个属性的值就是块在linux系统上的存储位置
6.6 HDFS块大小的选择dfs.datanode.data.dir file://${hadoop.tmp.dir}/dfs/data
--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/data6.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 *** 作。不支持多用户对同一个文件的写 *** 作,以及在文件任意位置进行修改
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)