HDFS里Datanode上block大小的设置问题

2019-03-28 13:22|来源: 网络

上课时和老师讨论到的一个问题,这里是讨论后记录下来的结果,因为网上也很少查到相关讨论这个话题的内容,所以我也不肯定这是否完全是原因,但经仔细思考,下面的几点确实有其存在的合理性

在HDFS里面,data node上的块大小默认是64MB(或者是128MB或256MB)

问题: 为什么64MB(或128MB或256MB)是最优选择?

为什么不能远少于64MB(或128MB或256MB) (普通文件系统的数据块大小一般为4KB)

减少硬盘寻道时间(disk seek time)

HDFS设计前提是支持大容量的流式数据操作,所以即使是一般的数据读写操作,涉及到的数据量都是比较大的。假如数据块设置过少,那需要读取的数据块就比较多,由于数据块在硬盘上非连续存储,普通硬盘因为需要移动磁头,所以随机寻址较慢,读越多的数据块就增大了总的硬盘寻道时间。当硬盘寻道时间比io时间还要长的多时,那么硬盘寻道时间就成了系统的一个瓶颈。合适的块大小有助于减少硬盘寻道时间,提高系统吞吐量。

减少Namenode内存消耗

对于HDFS,他只有一个Namenode节点,他的内存相对于Datanode来说,是极其有限的。然而,namenode需要在其内存FSImage文件中中记录在Datanode中的数据块信息,假如数据块大小设置过少,而需要维护的数据块信息就会过多,那Namenode的内存可能就会伤不起了。

为什么不能远大于64MB(或128MB或256MB)

这里主要从上层的MapReduce框架来讨论

Map崩溃问题:

系统需要重新启动,启动过程需要重新加载数据,数据块越大,数据加载时间越长,系统恢复过程越长。

监管时间问题:

主节点监管其他节点的情况,每个节点会周期性的把完成的工作和状态的更新报告回来。如果一个节点保持沉默超过一个预设的时间间隔,主节点记录下这个节点状态为死亡,并把分配给这个节点的数据发到别的节点。对于这个“预设的时间间隔”,这是从数据块的角度大概估算的。假如是对于64MB的数据块,我可以假设你10分钟之内无论如何也能解决了吧,超过10分钟也没反应,那就是死了。可对于640MB或是1G以上的数据,我应该要估算个多长的时间内?估算的时间短了,那就误判死亡了,分分钟更坏的情况是所有节点都会被判死亡。估算的时间长了,那等待的时间就过长了。所以对于过大的数据块,这个“预设的时间间隔”不好估算。

问题分解问题:

数据量大小是问题解决的复杂度是成线性关系的。对于同个算法,处理的数据量越大,它的时间复杂度也就越大。

约束Map输出:

在Map Reduce框架里,Map之后的数据是要经过排序才执行Reduce操作的。想想归并排序算法的思想,对小文件进行排序,然后将小文件归并成大文件的思想,然后就会懂这点了....

对于这个问题其实我想应该还有很多方面的思考的~ 对HDFS了解不深,我就根据课堂和课外的学习了解到此了~欢迎指教~

相关问答

更多
  • 在hdfs-site.xml配置文件里加上如下内容: [html view plain copy dfs.blocksize 2m dfs.namenode.fs-limits.min-block-size 2m 然后重启Hadoop集群
  • HDFS是一种分布式文件系统,Hadoop集群借此来存储所有需要分析的输入数据以及由MapReduce作业生成的任何输出结果。HDFS是一种基于数据块的文件系统,它跨越集群中的多个节点,并且使用用户数据可以存储在文件中。它提供了传统的分层文件组织,以便用户或应用程序可以操作(创建、重命名、移动或删除)文件和目录。它还提供了一个流接口,借助于该接口,可使用MapReduce框架运行所选的任何应用程序。HDFS不支持设置硬链接或软链接,因此用户无法寻址到特定数据块或者覆盖文件。HDFS要求进行编程访问,因此用户 ...
  • 对于你使用的Hadoop版本(0.21.0)似乎是这样。 您所遇到的问题已针对下一版本修复,请参阅此处: https : //issues.apache.org/jira/browse/HDFS-96 For the Hadoop version you are using(0.21.0) seems so. The issue you have was fixed for the next version, see more here: https://issues.apache.org/jira/bro ...
  • 块在HDFS和HBase中用于不同的事物。 HDFS中的块是磁盘上的存储单元。 HBase中的块是存储器的一个存储单元。 有许多HBase块可以放入一个HBase文件中。 HBase旨在最大限度地提高HDFS文件系统的效率,并充分利用该块的大小。 有些人甚至将HDFS调整为20GB的块大小,以使HBase更高效。 阅读更多内容以了解HBase背后的情况是: http : //hbase.apache.org/book.html#regionserver.arch 如果你在一张比内存大得多的表上有完全随机访问 ...
  • HDFS与附加到它的数据节点一样大......所以通过添加更多硬件,您可以指定大小。 它不像你可以分区的磁盘(至少,不是一般意义上为特定任务分配特定大小的磁盘)。 HDFS is as large as the datanodes attached to it... So by adding more hardware you are specifying the size. It's not like a disk that you can partition (at least, not in the ...
  • 首先从hdfs文件夹中删除所有内容: hadoop.tmp.dir的值 rm -rf /grid/hadoop/hdfs 确保dir拥有合适的所有者和权限 (用户名根据您的系统) sudo chown hduser:hadoop -R /grid/hadoop/hdfs sudo chmod 777 -R /grid/hadoop/hdfs 格式化namenode: hadoop namenode -format 尝试这个: sudo chown -R hdfs:hadoop /grid/hadoo ...
  • hdfs块的默认大小并不意味着它将使用我们指定的所有空间,即60 MB。 如果数据超过60 MB,那么它将数据拆分为块(数据/ 60 MB),将创建该块数。 如果您正在执行ls命令,那么它将仅显示您当前正在使用空间。 例如: - 我已经在hdfs中上传了test.txt文件,块大小我已设置为128 MB,复制为2但我们的实际文件大小仅为193 B. **权限所有者组大小上次修改的复制块大小名称 -rw-r - r-- hduser supergroup 193 B 10/27/2016,2:58:41 PM ...
  • 正如您已经注意到的那样,HDFS文件不会占用超出其需要的空间,但是在HDFS集群中存在小文件还有其他缺点。 让我们首先解决问题,而不考虑批处理: NameNode(NN)内存消耗。 我不知道Hadoop 3(目前正在开发中),但在以前的版本中,NN是单点故障(您可以添加辅助NN,但最终不会替换或增强主要NN)。 NN负责维护内存和磁盘上的文件系统结构,并且资源有限。 由NN维护的文件系统对象中的每个条目被认为是150个字节( 请查看此博客文章 )。 更多文件= NN消耗更多RAM。 MapReduce范例( ...
  • 块大小64MB表示块的上限大小。 这并不意味着小于64MB的文件块将消耗64MB。 它不会消耗64MB来存储1MB的大块。 如果文件是160兆字节 , 希望这可以帮助。 Block size 64MB means an upper bound size for a block. It doesn't mean that file blocks less than 64MB will consume 64MB. It will not consume 64MB to store a chunk of 1MB. ...
  • 经过一些研究,我在namenode中启动所有守护进程并输入以下命令并且其工作正常。 hadoop dfsadmin -refreshNodes 谢谢 After some research, I starting all daemons in the namenode and entered below command and its working fine. hadoop dfsadmin -refreshNodes Thanks