五、六Hadoop常用shell指令,HDFS块的概念

目录

五、常用的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] <path> ...]
        
--文件的上传指令
        [-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
        [-put [-f] [-p] [-l] <localsrc> ... <dst>]
        [-moveFromLocal <localsrc> ... <dst>]
--文件的下载指令
        [-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
        [-moveToLocal <src> <localdst>]        
        [-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
        
--文件的查看指令
        [-cat [-ignoreCrc] <src> ...]
        [-tail [-f] <file>]
        [-ls [-d] [-h] [-R] [<path> ...]]
        
--文件内容追加指令
        [-appendToFile <localsrc> ... <dst>]
​
--文件的权限管理制定
        [-chgrp [-R] GROUP PATH...]
        [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
        [-chown [-R] [OWNER][:[GROUP]] PATH...]
​
--hdfs系统的查看指令
        [-df [-h] [<path> ...]]
        [-du [-s] [-h] <path> ...]
--文件的删除指令
        [-rm [-f] [-r|-R] [-skipTrash] <src> ...]
        [-rmdir [--ignore-fail-on-non-empty] <dir> ...]

六、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上的块大小为什么会远远大于传统文件?

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中进行重置
<property>
    <name>dfs.blocksize</name>
    <value>134217728</value>
    <description>默认块大小,以字节为单位。可以使用以下后缀(不区分大小写):k,m,g,t,p,e以重新指定大小(例如128k, 512m, 1g等)</description>
</property>
​
<property>
    <name>dfs.namenode.fs-limits.min-block-size</name>
    <value>1048576</value>
    <description>以字节为单位的最小块大小,由Namenode在创建时强制执行。这可以防止意外创建带有小块的文件降低性能。</description>
</property>
​
<property>
    <name>dfs.namenode.fs-limits.max-blocks-per-file</name>
    <value>1048576</value>
    <description>每个文件的最大块数,由写入时的Namenode执行。这可以防止创建降低性能的超大文件</description>
</property>

6.5 HDFS块的存储位置

在hdfs-site.xml中我们配置过下面这个属性,这个属性的值就是块在linux系统上的存储位置

<!-- 确定DFS数据节点应该将其块存储在本地文件系统的何处-->
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>

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操作。不支持多用户对同一个文件的写操作,以及在文件任意位置进行修改
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值