使用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 ...
随机推荐
- canvas动画部分
requestAnimationFrame(callback) 一个用于制作逐帧动画的函数 //这个函数会在控制台无限输出"----" (function animate() { ...
- 微信小程序接口开发中解决https外网调试问题
准备工作 1.有一台阿里云的Linux CentOS6 服务器,安装支持ssl模块的Nginx 2.有自己的域名,把域名解析到指向该服务器IP,本例中将wx.wangjiang.net 解析到服务器I ...
- 12.Spring——Web MVC框架
1.Spring Web MVC 框架 2.Spring MVC Hello World 例子 1.Spring Web MVC 框架 Spring web MVC 框架提供了模型-视 ...
- viedo formats vs file formats
web的视频世界,有两个概念非常容易搞混淆,即:视频文件的格式,比如.mp4,.flv,.ogv等等,以及视频本身的格式,就是指的codec算法名称,比如h.264,mpeg-4等. http://w ...
- Windows平台使用Gitblit搭建Git服务器教程
Windows平台使用Gitblit搭建Git服务器图文教程 Git服务现在独树一帜,相比与SVN有更多的灵活性,最流行的开源项目托管网站Github上面,如果托管开源项目,那么就是免费使用的,但是闭 ...
- Linux seq命令详解
seq: squeue 是一个序列的缩写,主要用来输出序列化的东西 seq常见命令参数 用法:seq [选项]... 尾数 或:seq [选项]... 首数 尾数 或:seq [选项]... 首数 ...
- 【matlab】 幂法 求解最大特征值
一. 算法: 1.输入矩阵A,初始向量x误差限ep,最大迭代次数N 2.置 k = 1, m1 = 0; 3.求Xr-> norm(x) abs(Xr)=max[Xi] 1<=i< ...
- PHP设计模式系列 - 装饰器
什么是装饰器 装饰器模式,对已有对象的部分内容或者功能进行调整,但是不需要修改原始对象结构,可以使用装饰器设 应用场景 设计一个UserInfo类,里面有UserInfo数组,用于存储用户名信息 通过 ...
- 对于开发WEB方面项目需要的工具和技术了解
1.IDE:Webstorm,JavaScript 开发工具. 2.版本管理系统:Git,独一无二. 3.单元测试:jsamine,前后端共用.Jasmine是我们梦寐以求的Javascript测试框 ...
- Python time.md
time模块 Comparing Clocks time.clock():在Unix 上,返回当前的处理器时间,以浮点数秒数表示. time.monotonic():返回一个单调时钟的值(在分秒内), ...