分类: 云计算2011-07-06 17:57 721人阅读 评论(0) 收藏 举报

这段时间公司使用的hadoop组件hdfs存储图片经常出现上传超时的问题,经过分析后发现了原因:

先说下情况吧,

目前公司有一个Namenode,1个secondarynamenode和4个datanode。  应用端通过一个hadoopservice去上传图片,上传是应用直接连hdfs的。service里已经对上传加了锁,这个上传不仅编辑会用,前端的网友也会上传,所以有时并发还是比较大的,上传时没有做分布式锁,所以上传时会将图片全部改名通过时间戳和其他使得文件名称不冲突。

发生上传超时时,datanode报错,报错如下:

当应用端客户端有上传文件请求时,请求图如下:

而同时datanode 会利用心跳机制去和namenode联系,以保证namenode实时连接datanode的情况,datanode在汇报前需要搜集本机上block 及硬盘空间等情况,这个在之前的日志里曾写过。这个时间会比较长,所以client直连datanode过来后,或者datanode连下一个datanode 传输文件时就可能会超时。

说实话 4个datanode做为集群 确实很寒酸的,但是公司对服务器要求紧啊 ,所以小规模运营。集群文件分数还是默认的3份,保存3份也是我们赞成的,所以这块并没改,这样其实就造成一个情况,4台机器,每次文件上传,其实有4台中的3个是要占用的,只有一个相对空闲些,造成负载比较大。而且这种情况随着block越来越多就越发显现。

目前集群内共1384056 files and directories, 1131452 blocks = 2515508 total

 

搜索资料也发现有人碰到这种问题,都是通过修改客户端的超时时间的,这个对我们线上应用来说不太合适。

所以又和主管一起和公司要了2台,有了6台datanode!!! 哎  已经很给面子了  哈哈。

添加了后,这段时间超时基本没出现,编辑们没有在提出 呵呵。

光增加服务器其实是不够的,大家都知道,hadoop 最重要是作为云计算中数据分析来用,而hdfs作为分布式文件存储,他的机制其实是不利于实时性高的应用的,所以我们必须想其他方法,增加机器只是一方面。

在原有client和hadoop之间增加了一个失效保障的服务,这个服务独立于应用,与应用部署在一台服务即可。

设计思想:client上传hadoop失败是不可消除的,就是说虽然会偶尔出现,但是还是会出现,不能因为这个让用户再重传或者等好长时间才能上传成功,这些都对用户不友好。增加失效保障的目的就是,在client上传超时或失败情况下,client将失败任务通过调用该服务接口传入失效队列,client任务就完成了。当然,client上传时第一个工作是要在本地将文件写入硬盘。随后,失效保障可以通过定时服务,去扫描队列,通过队列获取硬盘中文件,继而再次上传到hdfs中。如果再次失败将不会再队列中消除,上传成功的即在队列中删除。

这样,在用户角度,上传文件时,client首先写入本地硬盘,然后去访问hdfs,如果超时(该超时不是hdfs的超时,是在应用设置的),或失败,即将任务写入失效保障中,返回用户,对用户而言,这个上传是短时间内完成的。

使用HDFS来进行线上应用的文件存储的更多相关文章

  1. PM2 对 Node 项目进行线上部署与配置

    pm2 是一个带有负载均衡功能的 Node 应用的进程管理器. 1. pm2 主要特点 内建负载均衡(使用Node cluster 集群模块) 保持后台运行 进程守护,系统崩溃后自动重启 启动多进程, ...

  2. 如何使用工具进行线上 PHP 性能追踪及分析?

    工作了一两年的 PHPer 大概都多多少少知道一些性能分析的工具,比如 Xdebug.xhprof.New Relic .OneAPM.使用基于 Xdebug 进行 PHP 的性能分析,对于本地开发环 ...

  3. 转:使用xhprof进行线上PHP性能追踪及分析

    原文来自于:http://avnpc.com/pages/profiler-php-performance-online-by-xhprof 原创作者:AlloVince 之前一直使用基于Xdebug ...

  4. 利用jvisualvm使用btrace进行线上调试案例

    用途:btrace主要用于线上调试.通过btrace,可在不改动代码的前提下,方便的发现以下问题: 1.定位性能慢的接口服务: 2.实时打印堆栈信息,定位死锁位置: 3.定位占用大量内存空间的代码块: ...

  5. Apache DolphinScheduler & Doris 将于本周六联合进行线上 Meetup

    01 - 活动介绍 2020年,大数据成为国家基建的一个重要组成,大数据在越来越多的领域展现威力.随着大数据的应用场景越来越多,大家对数据的响应速度和数据加工工作流的方便程度也提出了更高的要求.在这种 ...

  6. 使用xhprof进行线上PHP性能追踪及分析

    转自: http://avnpc.com/pages/profiler-php-performance-online-by-xhprof

  7. 126.自动处理上传的文件,获取上传文件的url

    使用模型来处理上传的文件: 在定义模型的时候,我们可以给存储的文件的字段指定为FileField,这个field可以传递一个upload_to参数,用来指定上传上来的文件保存到哪里,比如我们让它保存到 ...

  8. 利用Java API通过路径过滤上传多文件至HDFS

    在本地文件上传至HDFS过程中,很多情况下一个目录包含很多个文件,而我们需要对这些文件进行筛选,选出符合我们要求的文件,上传至HDFS.这时就需要我们用到文件模式. 在项目开始前,我们先掌握文件模式 ...

  9. Java读写hdfs上的avro文件

    1.通过Java往hdfs写avro文件 import java.io.File; import java.io.IOException; import java.io.OutputStream; i ...

随机推荐

  1. cmake 基本命令

    1 # CMake 最低版本号要求cmake_minimum_required (VERSION 2.8) 2 项目信息project (Demo2) 3 aux_source_directory 查 ...

  2. 软工读书笔记 week 7 ——《构建之法》

    总时长近两周的结对项目终于算是结束了,马上要重新开启团队项目.于是这几天决定对<构建之法>一书中与团队项目及需求分析有关的章节进行重点阅读,希望能够从中得到启发,并运用到接下来的团队项目中 ...

  3. 【项目管理】git和码云的使用

    缘起 说了那么多关于git和码云相关的事,一直都没给大伙讲解这个码云究竟是个啥玩意儿. 今天就给大伙说说如何通过git和码云搭建属于自己的代码库. 码云 码云(Git@OSC)是开源中国社区团队推出的 ...

  4. .net验证是否合法邮箱和ip地址的方式

    通常情况下第一时间会想到使用正则表达式去验证,但由于正则表达式过于复杂或者没有考虑到某些情况,从而导致问题或者判断的效率低.下面通过另一种方式去判断. 判断是否合法邮箱: /// <summar ...

  5. MySQL Bug导致异常宕机的分析流程

    原文链接:http://click.aliyun.com/m/42521/ 摘要: 本文主要通过一个bug来记录一下如何分析一个MySQL bug的崩溃信息. 版本:Percona 5.7.17-11 ...

  6. 固定UILabel宽度分行显示

    固定UILabel宽度分行显示 这种小伎俩估计都被用烂了,笔者给大家提供一个category文件,供大家简单设置哦. 各种富文本效果哦(普通文本也是可以用的呢): 3行,固定宽度200 2行,固定宽度 ...

  7. Error 'LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or cor

    转自:http://blog.csdn.net/junjiehe/article/details/16888197 采用红字方法可行,后来采用cmake生成sln文件时,又出现了该问题,采用了玫红色字 ...

  8. Hadoop HBase概念学习系列之列、列簇(十二)

    列在列簇中依照字典排序.例如,列簇是基础信息或公司域名或水果类.列是基础信息:面貌.基础信息:年龄.公司域名:org.公司域名:edu.水果类:苹果.水果类:香蕉.      列 = 列簇:列修饰符 ...

  9. 解决redis-cli command not found问题

    在使用其他服务器连接Redis服务器时,一般使用的语句是 [redis-cli -h IP -p port] 但是早上连接时报错:redis-cli command not found 在redis服 ...

  10. 安卓预览报错 Failed to load AppCompat ActionBar with unknown error

    报错信息 : Render ProblemFailed to load AppCompat ActionBar with unknown error. Failed to instantiate on ...