使用HDFS来进行线上应用的文件存储
这段时间公司使用的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来进行线上应用的文件存储的更多相关文章
- PM2 对 Node 项目进行线上部署与配置
pm2 是一个带有负载均衡功能的 Node 应用的进程管理器. 1. pm2 主要特点 内建负载均衡(使用Node cluster 集群模块) 保持后台运行 进程守护,系统崩溃后自动重启 启动多进程, ...
- 如何使用工具进行线上 PHP 性能追踪及分析?
工作了一两年的 PHPer 大概都多多少少知道一些性能分析的工具,比如 Xdebug.xhprof.New Relic .OneAPM.使用基于 Xdebug 进行 PHP 的性能分析,对于本地开发环 ...
- 转:使用xhprof进行线上PHP性能追踪及分析
原文来自于:http://avnpc.com/pages/profiler-php-performance-online-by-xhprof 原创作者:AlloVince 之前一直使用基于Xdebug ...
- 利用jvisualvm使用btrace进行线上调试案例
用途:btrace主要用于线上调试.通过btrace,可在不改动代码的前提下,方便的发现以下问题: 1.定位性能慢的接口服务: 2.实时打印堆栈信息,定位死锁位置: 3.定位占用大量内存空间的代码块: ...
- Apache DolphinScheduler & Doris 将于本周六联合进行线上 Meetup
01 - 活动介绍 2020年,大数据成为国家基建的一个重要组成,大数据在越来越多的领域展现威力.随着大数据的应用场景越来越多,大家对数据的响应速度和数据加工工作流的方便程度也提出了更高的要求.在这种 ...
- 使用xhprof进行线上PHP性能追踪及分析
转自: http://avnpc.com/pages/profiler-php-performance-online-by-xhprof
- 126.自动处理上传的文件,获取上传文件的url
使用模型来处理上传的文件: 在定义模型的时候,我们可以给存储的文件的字段指定为FileField,这个field可以传递一个upload_to参数,用来指定上传上来的文件保存到哪里,比如我们让它保存到 ...
- 利用Java API通过路径过滤上传多文件至HDFS
在本地文件上传至HDFS过程中,很多情况下一个目录包含很多个文件,而我们需要对这些文件进行筛选,选出符合我们要求的文件,上传至HDFS.这时就需要我们用到文件模式. 在项目开始前,我们先掌握文件模式 ...
- Java读写hdfs上的avro文件
1.通过Java往hdfs写avro文件 import java.io.File; import java.io.IOException; import java.io.OutputStream; i ...
随机推荐
- 【日常记录】【unity3d】 2D跳跃过快导致角色某帧陷入地面
如果角色运动过快会导致嵌入地面再反弹出来 : 可以使用更高质量的检测方式 "Continuous" :就可以解决这个问题
- 【日常记录】用 vs2015 编译 love2d 引擎时出现 依赖项目luajit编译失败的解决办法
如图片所示,提示是没有找到cmake命令.看来是需要camke软件支持的,由于当初安装CMake后我重装了系统,也没有把cmake的bin路径 解决办法一:重新安装CMake,并勾选上"ad ...
- Entity Framework 更新模式之Attach与EntityState.Modified模式的区别
数据库中有一个City表 初始时数据: 实体类与Fluent Api配置映射 public class City { public int Id { get; set; } public string ...
- Fuckey V1.0 Beta版发布!!!
Fuckey,以前叫FullNexus4,只因为当时想做一个软件给自己的Nexus 4,方便方便一下,不过这名字感觉太局限了,毕竟很多朋友不是使用的Nexus 4的手机,但却还是使用了FullNexu ...
- [翻译] InstagramPhotoPicker
InstagramPhotoPicker Present Image Picker like Instagram. 展示图片选择器,像Instagram这款应用一样. Installation - 安 ...
- apache的AllowOverride以及Options使用详解
通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里.但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对 ...
- asp.net core中DockerFile文件中的COPY
今天在ubuntu系统中使用docker部署asp.net core时遇到了一个问题,docker build 的时候总会在最后一步提示 lstat obj/Docker/publish: no su ...
- 加速安装 Sharepoint 2013 SP1
第一次安装把人吓了一跳,居然花了5个半小时.想想有一大堆服务器要升级,不得不想想有什么加速的办法. 试了好几种方法,以下的办法最为简单 1:停止 IIS ADMIN,WWW 服务 2:停止所有 sha ...
- November 21st 2016 Week 48th Monday
A bird is known by its note, and a man by his talk. 闻其声而知鸟,听其言而知人. Listen to what a man talks, watch ...
- 【Anisble 文档】【译文】测试策略
最近在琢磨 ansible,想使用这个搞一个自动发布部署系统,google以下发现了中文文档,但是里面很多感觉不专业,念都念不顺.看英文版又费劲,只能啃完中文啃英文. 本篇是译文第一篇,后续持续维护. ...