热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HDFSFUSE访问频繁致使系统奔溃

随着集群使用的时间增长,发现集群越来越缓慢,甚至集群压力特别大的时候,导


集群规模几百台,每天有大量的MR任务在并行跑流程。主要业务做图片流数据解密计算生成高清图像。

随着集群使用的时间增长,发现集群越来越缓慢,甚至集群压力特别大的时候,导致操作系统莫名重启。

每天都会有6~8台无规律的操作系统压力过大重启。

排查时间和周期都非常的长,用了长达1个月的时间,各种检查,主要从两个方面着收:

  • 我们提供的集群软件本身检查

  • 客户开发的分布式应用程序检查

  • 操作系统层面的资源监控和管理检查

集群自身的检查

主要针对资源管理入手,从集群资源的每个组件使用资源的分配和限制,利用cgroup隔离进程,针对集群YARN的资源管理调度的控制,基于标签的调度,基于cgroup隔离,资源队列控制,并发控制,最大限度的提高集群资源利用率,尽量使任务分配到更多的节点执行,增强集群安全管控。

然而,并没有解决问题。

客户开发应用程序检查

主要针对客户开发的c/c++程序代码优化数据处理流程,由于中间涉及到大量的私有算法和科学计算的算法,无法并行化,所以访问集群数据的方式是利用HDFS-FUSE的方式。

使用方式数据大小时间
HDFS-PUT9.8G32.639s
HDFS-PUSE9.8G1m17.294s
NFSGateway9.8G1m58.294s

测试发现,Hadoop提供的几种把HDFS变成挂载到某个服务器,提供本地化命令操作的方式,FUSE性能是最高的。

经过优化流程,客户开发的应用程序只从FUSE取数据,大量写数据的操作利用c++在本地先写成功,在移动到FUSE的目录中,减少很多不必要的小文件写入,通过合并文件,优化整体程序的处理效率。

然而,并没有解决问题。

操作系统层面的资源监控和管理检查

每次几个大的流程启动之后,操作系统CPU直接飘红,通过集群监控系统直接失去心跳。

未来解决问题,我们从以下几个方面入手:

  • 集群监控工具

    • Ambari grafana 监控每一台服务器的集群CPU、内存、网络、磁盘IO等资源

    • Ganglia 检测全局主机CPU、网络、内存、磁盘等资源变化

    • Ambari Metrics 检测集群Hadoop生态用到的组件指标,JVM参数等

发现有局部集群会出现持续数分钟CPU洪峰,能挺过去的,一会心跳都恢复正常,而压力过大的直接操作系统重启。

  • Debug工具

    • CGROUP CPU 资源隔离,限制FUSE进程,有明显改善,至少操作系统不崩溃了。

    • GDB 调试 C 程序,跟踪Java调用Fuse C的library库情况,没有发现进一步信息。

    • Jstack 分析线程状态,定位到cpu占用率较高的线程,分析定位问题。

    • cpulimit限制CPU利用率,缓解系统压力。

经过资源隔离控制,明显改善,但是机器压力过大还是会失去联系,压力过后就会恢复,并未根本解决问题。

通过监控某些流程,发现流程启动之后,有大量的文件访问,导致CPU洪峰,进一步追踪目录。

发现竟然在某个目录下写了25万多个小文件,而且是存储在HDFS上的大量小文件。

这是一个临时目录,数据量不是很大,经过统计数据量很小,但是文件个数多,ls
一下就导致机器卡死。

进一步跟踪发现,大量数据访问分布式文件系统FUSE挂载的数据,单个集群的inode有限,一个目录下有大量的小文件,大量的IO访问,直接导致系统被拖死,是Linux操作系统的限制。

总结

使用方式问题。分布式文件系统挂载到某个机器,一台普通的x86服务器容纳几十PB的数据挂载到某个目录,一台服务器根本无法承受这样的数据量。

文件系统使用不合理。几十万文件放到一个目录下本身就是Linux系统的大忌,没有任何目录划分,list就可能导致系统被拖死,没用任何清理临时数据的程序逻辑,属于开发人员犯的常规错误。

程序层面的优化。通过改造可以分布式化的程序,利用分布式这样的技术提升整体数据处理效率。

业务流程优化。通过有效的数据处理流程优化,虽然没有解决根本问题,但提升了整体处理效率。

资源管理和安全。通过多集群整体的资源分配、安全管控提高了集群的运营和整体资源利用率。

统一资源管理。很多程序都是单机运行,没有利用YARN进行统一调度和资源分配,导致集群资源利用率不均衡,一些机器压力很大,一些机器长时间空闲,可以利用Docker,CGroup技术融合到YARN中进行资源隔离,统一集群资源管理,提升集群资源利用率,更快的完成计算任务。

分布式系统复杂。分布式系统,应用程序很难追踪和重现,分布式在多台机器,调试复杂和耗时,一般技术人员很难掌握,无法用好这样的技术,需要企业级的分布式软件产品来保障,全新的集群开发和使用规范指导他们开发出健壮的分布式程序。

欢迎关注微信公众号,第一时间,阅读更多有关云计算、大数据文章。


原创文章,转载请注明: 转载自Itweet的博客
本博客的文章集合:
http://www.itweet.cn/blog/archive/




推荐阅读
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
author-avatar
手机用户2502907993
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有