• hadoop hdfs问题集锦


    一:hadoop为什么不适合处理大量的小文件,怎么解决?
    原因:
    1:文件的元数据(包括文件被分成了哪些blocks,每个block存储在哪些服务器的哪个block块上),都是存储在namenode上的内存,会对namenode的内存造成压力;
    2: 文件过多会造成文件的定位时间(又称寻址时间)增大;
    3:监管时间问题
    dataNode会向NameNode发送两种类型的报告:增量报告和全量报告。
    增量报告是当dataNode接收到block或者删除block时,会向nameNode报告。
    全量报告是周期性的,NN处理100万的block报告需要1s左右,这1s左右NN会被锁住,其它的请求会被阻塞。
     
    解决方法:合并大量小文件。
    公司的解决方法是在每天凌晨一点的时候,对前一天的所有小文件进行合并。通过mr进行实现。
     
    二:怎么修改块的大小
    hdfs-site.xml的参数dfs.block.size
     
    三:块太大的问题:
    1:mapreduce中的map任务通常一次只处理一个块中的数据,因此如果任务数太少(少于集群中节点的数量),运行速度会很慢。
    2:Map崩溃问题(不太明白,希望明白之人指出)
    系统需要重新启动,启动过程需要重新加载数据,数据块越大,数据加载时间越长,系统恢复过程越长。
    3:监管时间问题。主节点监管其他节点的情况,每个节点会周期性的与主节点进行汇报通信。倘若某一个节点保持沉默的时间超过一个预设的时间间隔,主节点会记录这个节点状态为死亡,并将该节点的数据转发给别的节点。而这个“预设时间间隔”是从数据块的角度大致估算的。(加入对64MB的数据块,我可以假设你10分钟之内无论如何也能解决完了吧,超过10分钟还没反应,那我就认为你出故障或已经死了。)64MB大小的数据块,其时间尚可较为精准地估计,如果我将数据块大小设为640MB甚至上G,那这个“预设的时间间隔”便不好估算,估长估短对系统都会造成不必要的损失和资源浪费。
    :4:问题分解问题。数据量的大小与问题解决的复杂度呈线性关系。对于同一个算法,处理的数据量越大,时间复杂度越高
     
    四:HDFS分块抽象的好处
    1 文件大小可以大于任意一个磁盘的容量,块并不需要存储在同一个磁盘上
    2 抽象块作为存储单元,简化存储子系统的设计
       1) datanode将块作为处理对象,能存储多少块也能计算出
       2) namenode管理元数据
    3 数据备份提高容错能力和可用性
     
    五:namenode和datanode(管理者-工作者模式)
    namenode作用:
    1-管理文件系统的命名空间。维护这文件系统树和整棵树的所有文件和目录;
    保存在磁盘上;
    2-块的元数据信息,保存在内存中。
    datanode的作用:
    1:根据需要存储并检索数据块(需求来自客户端 或 namenode调度);
    2:定期向namenode发送他们所存储的块的列表。
    secondDatanode的作用:
    1:合并fsimage和fsedits然后再发给namenode。
    因为namenode,文件系统无法使用,并且会有丢失文件信息,所以需要对namenode进行容错机制,方法:
    1-冗余备份,把文件系统元数据以为持久化的方式进行备份。
    2-secondNameNode冷备份;但状态总滞后于namenode,难免会丢失数据。namenode死后,secondNameNode会转化为datanode
     
    六:单点故障
     
     
     
  • 相关阅读:
    Vue 使用Scss,深度修改局部样式
    Sublime Text 插件:批量删除空白行
    Sublime Text 3前端开发常用优秀插件介绍
    常用的sublime text 3插件(很爽哦)
    20 个强大的 Sublime Text 插件
    Java多线程之synchronized详解
    进阶Java多线程
    初识Java多线程
    分布式锁实现的正确打开方式
    分布式session实现方式
  • 原文地址:https://www.cnblogs.com/parent-absent-son/p/9878668.html
Copyright © 2020-2023  润新知