使用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 ...
随机推荐
- SQL SERVER常用语法汇总
阅读目录 一.SQL分类 二.基础语句 三.sql技巧 四.(MS SQL Server)SQL语句导入导出大全 回到目录 一.SQL分类 DDL—数据定义语言(CREATE,ALTER,DROP,D ...
- SVN合并时报错:Merge tracking not allowed with missing subtrees; try restoring these items
使用的是TortoiseSVN; Merge tracking not allowed with missing subtrees; try restoring these items 下面会有跟着几 ...
- A B C D类网络地址
A类网络地址(红色为网络地址,黑色为主机地址): 下限:0000 0001.0000 0000.0000 0000.0000 0000(1.0.0.0) 上限:0111 1110.1111 1111. ...
- 使用Instruments中的CoreAnimation分析动画
使用Instruments中的CoreAnimation分析动画 1. 打开Instruments中的CoreAnimation 2. 运行前的准备工作 要注意勾选以下选项,便于调试 3. 运行与调试 ...
- iOS7中修改StatusBar的显示颜色
iOS7中修改StatusBar的显示颜色 效果图如下: 在iOS7中想手动修改statusBar的颜色,第一步需要做的就是在plist文件中设置View controller-based statu ...
- 超强IIS站点工具一键设置PHP,支持多个PHP同时运行
PHPWAMP8.8.8.8IN支持三大主流Web服务器:iis.apache.nginx NGINX站点管理.IIS站点管理.Apache站点管理均支持php多版本同时运行,无限自定义mysql.p ...
- 学习日期时间控件 daterangepicker
aterangepicker 是一款日期时间控件,可选择“年,月,日,时,分,秒”,可选择单面板,也可选择双面板(起止时间). 单面板示例:daterangepicker 单面板 codepen 在线 ...
- redis开启远程连接访问和需要密码的方法
redis默认是不能远程访问的,如果希望多台机子共用redis数据库,那就需要开启redis远程连接访问.既然可以远程连接了,那就需要密码登陆,否则不安全.下面是具体的方法,按照步骤一步一步来就OK了 ...
- 2.3 Python语言基础
2.3 Python语言基础 1 语言语义(Language Semantics) 缩进,而不是括号 Python使用空格(tabs or spaces)来组织代码结构,而不是像R,C++,Java那 ...
- kvo的observationInfo
观察者信息的注册: <NSKeyValueObservationInfo 0x600000708d60> ( <NSKeyValueObservance 0x6000009143f0 ...