使用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 ...
随机推荐
- Week5——Ajax
1.简介 AJAX 相当于异步 JavaScript 和 XML,是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网 ...
- mvc5中重命名项目的名称后,出现"找到多个与名为“Home”的控制器匹配的类型"
1.已把项目中所有的Webapplication1改为了MvcMovie,但是运行后,还是报错: 找到多个与名为“Home”的控制器匹配的类型 2.已重新生成解决方安,还是不行. 解决方法:把bin文 ...
- Jenkins操作,实现增删改查
Jenkins的版本是:Jenkins2.138.1 实现的操作接口: using System; using System.Collections.Generic; namespace iHRPub ...
- python基础_特殊符号
#\n 回车符 #\r 换行符 #\s 空格 #\t tab符号,不知道?开个txt文本,然后按电脑的tab键,就是caps lock上面那个,卧槽,看到一个大长空格(也可能是个超短空格),这个就是t ...
- http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码
http协议的状态码 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态码. 100(继续) 请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101( ...
- 用windows自带的fsutil修改稀疏文件大小成功,但文件内容似乎丢失
fsutil sparse setflag. fsutil sparse setrange 10M对应字节,1G对应字节.. 看文件属性,实际尺寸是小了,但内容似乎也丢了..因为自己把该文件做成虚拟盘 ...
- 026.2 网络编程 UDP聊天
实现,通过socket对象 ##############################################################需求建立UDP发送端:###思路:1.建立可以实 ...
- 情绪ABC理论
美国著名心理学家阿尔伯特·艾利斯 [Albert Ellis 1913.09.27]于20世纪50年代创立, 其理论认为引起人们情绪困扰的并不是外界发生的事件,而是人们对事件的态度.看法.评价等认知内 ...
- 多线程并发容器CopyOnWriteArrayList
原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容 ...
- python list 使用技巧
格式:list[start:stop:step] 示例:a =list(range(0,10))print(a[1:8:2]) #[1, 3, 5, 7]print(a[:8:2]) #[0, 2, ...