Hadoop入门三(3.2.2版本)

一.block块的概念

Block块大小的默认参数:dfs.blocksize  默认128M

理解一:

假如一桶水1000 ml, 瓶子规格 100ml ==》 需要10瓶子

一桶水1010 ml, 瓶子规格 100ml ==》 需要10+1=11瓶子  

                假如瓶子规格200ml ==》需要 5+1 =6瓶子

理解二:

假如一个小电影260M,根据block块大小的默认参数dfs.blocksize分为:

第一个块128M;第二个块128M;第三个块 4M。总共三个块。

对于伪分布式来讲,1个小弟DN节点, 副本数(dfs.replication) 1 ,共3个块,实际存储空间是260M*1=260M。

但是对于集群来讲,3个小弟DN节点,副本数(dfs.replication)设置为3(默认值是连它自己复制3份) ,共3*3=9个块,实际存储空间是260M*3=780M  【注意】!!!此时不是128M*3*3哟,128M*3*3是错误的!!!因为第三个块并没有装满,而且不能把128M*3作为实际的存储空间,因为绝对不能够平白无故产生数据。

【考点】存储空间=文件大小*其副本数

对于老大Namenode维护的是元数据,元数据是指文件名称、路径、权限、被切割哪些块,这些块分布在哪些机器上。

【面试题】假设有1亿个小文件,每个小文件10KB(没有达到128M规格,一个文件就是一个块),对于集群3个DN节点,副本数为3 , 那么共1亿block块*3=3亿块。那么3亿个块,即Namenode就需要维护3亿条数据。

假设1亿个小文件,每个小文件10KB,在生产上把这些小文件合并为100万个100M的大文件,对于集群3 DN节点,副本数为3 ,那么此时100百万*3=3百万块,即Namenode只需要维护3百万条数据。

问:Namenode维护3亿条数据和3百万条数据的压力,谁轻松?

答:肯定是维护300万条数据更轻松。因为元数据是存储在namenode进程的内存里,内存是一定的。比如内存8G,三亿条数据可能撑爆,而三百万少了两个数量级。

但是实际生产中基本都是小文件,在业务关系型数据源中,同步很难解决小文件(基本上不可能达到128M);而日志型数据源(flume)、计算结果(spark coalesce),我们可以控制小文件。

所以生产上: 尽量规避小文件在HDFS的存储

第一步:数据在传输到hdfs之前,提前合并

第二步:数据已经到了hdfs,就定

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值