栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

五、六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]  ...]
        
--文件的上传指令
        [-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的块大小

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操作。不支持多用户对同一个文件的写操作,以及在文件任意位置进行修改

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/643683.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号