文库网
ImageVerifierCode 换一换
首页 文库网 > 资源分类 > PDF文档下载
分享到微信 分享到微博 分享到QQ空间

软件研发成本度量规范释义 第2版.pdf

  • 资源ID:2183187       资源大小:11.19MB        全文页数:102页
  • 资源格式: PDF        下载积分:6文币
微信登录下载
快捷下载 游客一键下载
账号登录下载
三方登录下载: QQ登录 微博登录
二维码
扫码关注公众号登录
下载资源需要6文币
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

软件研发成本度量规范释义 第2版.pdf

1、急速扩张的局势。欧派、大自然地板、箭牌卫浴等国内各大泛家居品牌正积极从 品类切入,加入整体家居战局。东鹏也有这方面的想法,甚至已经计划收购一些橱柜、衣柜企业,以此实施扩张整体家居战略。 但是,天进通过调研发现,大多数消费者现阶段不接受东鹏进行大幅度的品类延伸。东鹏应该全盘考核,把握节奏,谨慎考虑品 类延伸。另外,调查又显示,消费者目前对客厅瓷砖上墙的接受程度呈现上升趋势。 消费者对东鹏做整体家居不是很接受,但能够接受它往地板、木地板、涂料这方面延伸,因为地面与墙面装修是在同一时 段、同步去设计的。所以这是一个很好的机会,把东鹏变成地墙解决方案的领导者,通过地墙品类的延伸达到品牌扩张的目的, 也

2、可以使业务增长,经销商也乐意配合,想想看,卖瓷砖的时候,顺便搭上一些地板或涂料的产品销售,整体客单价也就上去 了。毕竟在装修的时候,消费者需要瓷砖,也需要地板、涂料,而东鹏具备足够大的品牌影响力,让消费觉得可信赖,销售就有 可能达成。 东鹏调研 数据来源:2014年东鹏品牌及大家居整合研究项目-定点街访D11;门店拦截A17 基于天进提出的地墙一体化战略,东鹏在原有基础上成立了地板、涂料等事业部,它对外的广告展示也已经变成了“瓷砖、 卫浴、地板、涂料整体家居”。至此,东鹏正式走上地墙一体化的整体家居服务商转型之路。 这个战略的重要意义不仅是品类延伸那么简单,更关键的是把东鹏从一个制造商变成一个

3、服务商,即地墙整体解决方案的提 供者。未来中国很多企业再发展下去,最核心的问题不是产能的问题,东鹏作为服务商,只要整体解决方案卖出去了,产品供应 是不成问题的,全国有很多工厂可以为它OEM。但关键是,东鹏必须把服务商的品牌与影响力做强、做大。从未来的发展方向 来说,地墙一体化的产品解决方案势不可当,东鹏正向这个方向不断迈进。 3.布局家装市场,抢占消费者入口 前面说过,东鹏原本是想收购橱柜企业去扩张,但是消费者现阶段不接受东鹏进行大幅度的品类延伸,所以这个计划暂时延 缓。取而代之,天进给东鹏的战略建议是布局家装入口。天进通过调研发现,虽然瓷砖产量增长回归平稳,但家装市场每年仍然 保持有10%的

4、增长率。 而且,天进还发现,通过先找家装公司再找产品的消费者已经占据60%多,这比例已经很大了,接近2/3。在泛家居这条价 值链里面,无论是陶瓷还是地板、橱柜等,装修公司其实是在前段的入口位置,占据入口具有重要的战略意义。 东鹏调研 因此,在这种战略思维的指导下,东鹏在家装入口前段做出了一系列布局。首先是东鹏家居入股互联网家装第一平台“家装 e站”。“家装e站天猫旗舰店”是爱蜂巢经营家居装修线上平台,在中国已开业线下门店近400家,组成全国性标准化家居装修 服务系统。投资爱蜂巢将可让集团通过此电子商务销售平台,扩展其销售渠道,并把握中国电子商务领域快速增长带来的机遇。 其次是参股靓家居家装平台

5、,借助靓家居多年来形成的设计、施工、管理和服务上的优势以及O2O一站式整体家居发展模式, 双方将从产品、渠道、套餐、房地产“精装个性化定制”4个维度展开深度合作。一方面在品牌展示和家居设计上不断拓展,另 一方面在消费者互动体验上不断强化。 案例3 欧派:从橱柜到定制家居的引领者 在家居家装领域,不同业态通过融合,为消费者提供硬装、软装一站式,定制化的购物体验已渐成消费主流。坚持专业化的 企业开始把产品线拉长,钟情于市场运作的企业开始涉足另一个新的市场领域抢占份额,都希冀在产品相联、渠道相通的领域有 新的收获。在这一点上,欧派是不可错过的经验向导。 天进自2007年与欧派牵手以来,一直合作至今,

6、陪伴欧派成长。天进推动欧派从橱柜行业的领先品牌成为整体厨房行业的 领导者和代名词,见证了欧派从橱柜到整体厨房再到大家居领域的战略扩张,更见证了欧派从2007年3亿元到2014年60多亿元 销售额狂飙式的增长。 欧派最初立足华南大本营,后逐步覆盖全国市场。橱柜为主营业务,出货额10亿元,衣柜刚起步,卫浴艰难。一开始的经 销商第一客户是间接B2C消费者,当时的欧派拥有门店300家,经销方式为区域代理独家经销,以家居卖场和建材集散地为主, 直营专卖店为辅。当时的品牌策略,率先采用蒋雯丽为形象代言人,并在央视投放广告。欧派的核心竞争力主要在于,零售市场 采用定制模式,在标准模块的基础上按照需求进行组合

7、,采取成本领先战略,追求品质稳定、规模第一。 2007年,欧派面临品牌与管理提升的双重挑战:虽然橱柜遥遥领先,但却不得不面对不断跟进的对手和自身品牌延伸的管 理障碍。行业属性方面的问题是:准入门槛低,竞品多,强耐用家居产品阶段性低关注;管理方面的障碍是:品类发展失衡,自 身发展路径不清晰。于是问题开始凸显:起步于橱柜的欧派,在2007年年底成为橱柜一线品牌后,下一步该怎么发展?这亟需 战略规划。 1.从橱柜到整体厨房 天进经过调研发现,市场上厨柜与厨电的融合趋势已经显现,推出“整体厨房”正是时候。原因包括三个方面: 首先,消费者的习惯已经发生变化。早期的消费者在西门子、华帝等传统厨电品牌的长期

8、影响下,已经习惯了橱柜和厨电分 开购买,但现在他们开始认知并主动选择橱柜与厨电一体化的产品。 其次,传统厨电日渐遇到挑战。在传统的厨电行业,安装配置、售后服务等方面存在着种种问题,而且单独购买的厨电难以 与整体厨房的设计和风格搭配。而现实的情况是,在消费者看来,整套购买风格更统一、更好看,且方便省事,安装和售后不用 协调更多人。 最后,此时的欧派已经成功进入橱柜的第一阵营,具备相当的实力在相关领域进行扩张。 根据天进的建议,欧派开始了从“橱柜”到“整体厨房”的延伸,以期完成第一次跳跃。天进建议欧派规划建造全新的整体 厨房制造中心。新的整体厨房制造中心采用全套现代化的生产流程,其中所有的生产设备

9、及生产加工线都是从德国原装进口的, 均严格按照世界上当时生产厨柜的最高标准来设计。2008年,欧派实现了从橱柜到整体厨房的第一次跨越。 2009年,世界经济仍未摆脱金融危机的阴影,家居行业的总体形势亦不容乐观。此时的家居行业,整体增长缓慢,国外出 口受限,国内房地产市场低迷,可以说是内忧外困。在总体形势不容乐观的情况下,谁能争取到更多的客户,谁就能首先渡过难 关。 当时,家居的客户主要来自两个市场:B2B工程批量采购商和B2C终端个人消费者。对工程客户时,单个品牌商最不利,一 方面被迫在工程商的压价下削薄利润,另一方面疲于应对同行业竞争者的市场侵蚀。但在对B2C个人消费者时,天进发现一个重 要

10、趋势:一站式的消费方式开始受年轻消费群体的青睐。 鉴于这种现状及趋势,天进认为不同品类与其各自奋战,不如抱团取暖:如果与地产商一对一会处于弱势,那么多对一的力 量则肯定不可小觑;如果买橱柜的消费者还想买衣柜、卫浴、陶瓷、地板,那为什么不一起卖给他。值此契机,由欧派牵头,打 造一个家居品牌联盟来应对金融危机,可能是一个聪明而适时的选择。异业联盟,即不同产业之间的合作联盟,如果产业组合得 当,将会产生“1+12”的协同效应。 然而,如何选择联盟对象值得思考。天进认为,以下几条需要遵循:第一,业务前言 我写本书的初衷是将自己在企业工作中应用的技术归纳总结,系统地将大数据处理相关技术融合在一起,给已经

11、从事大数据相关技术研发工作的朋友,或是准备从其他行业转行进入大数据领域学习相 关技术的朋友提供一份参考资料。希望本书能够帮助更多从事大数据相关工作的人,也希望通过本书结识更多热爱大数据的朋友。 目前,大数据已不只停留在概念阶段,而是在各领域成功落地,并取得了丰硕的成果。大数据已经渗透到生活中的各个方面,距离我们最近且与我们生活息息相关的大数据项目有交通大数据、医疗大 数据、金融大数据、社交媒体大数据、互联网大数据等。如此多的大数据项目能够成功落地,关键原因在于数据来源的多样化,数据量的爆发式增长,新兴技术的快速发展,以及市场创新需求的不断增 多,这为各种大数据项目提供了庞大的数据源,通过多种技

12、术的综合应用,可不断挖掘出大数据背后的社会价值和商业价值。 随着开源社区的不断发展,越来越多的优秀项目被开源,以处理各种大数据场景下的问题和挑战。作为目前大数据生态系统内的早期开源项目,Hadoop在廉价机器上实现了分布式数据存储和高性能 分布式计算,大大降低了数据存储和计算成本。Hadoop提供的分布式存储系统HDFS、大数据集并行计算编程模型MapReduce、资源调度框架YARN已经被广泛应用,为大数据生态系统的发展奠定了坚 实的基础。如今,Hadoop大数据生态圈发展已经非常全面,涉及领域众多,在大数据处理系统中常用的技术框架包括数据采集、数据存储、数据分析、数据挖掘、批处理、实时流计

13、算、数据可视化、监 控预警、信息安全等。下图展示了大数据生态系统内比较流行并且已经在生产环境验证过的开源技术。 (1)Spark Spark是由加州大学伯克利分校AMP实验室开源的分布式大规模数据处理通用引擎,具有高吞吐、低延时、通用易扩展、高容错等特点。Spark内部提供了丰富的开发库,集成了数据分析引擎Spark SQL、图计算框架GraphX、机器学习库MLlib、流计算引擎Spark Streaming。Spark在函数式编程语言Scala中实现,提供了丰富的开发API,支持Scala、Java、Python、R等多种开发语言。同时,它提 供了多种运行模式,既可以采用独立部署的方式运行

14、,也可以依托Hadoop YARN、Apache Mesos等资源管理器调度任务运行。目前,Spark已经在金融、交通、医疗、气象等多种领域中广泛使用。 大数据生态系统中的开源技术 (2)Druid Druid是由美国MetaMarkets公司创建并开源的分布式提供海量时序数据存储、支持实时多维数据分析的OLAP系统,主要应用于广告数据分析、网络系统监控等场景。Druid具有高吞吐、易扩展、高 容错、低延迟、按时间序列存储等特点。 (3)Flume Flume是由Cloudera公司开发的分布式、高可用的日志收集系统,是Hadoop生态圈内的关键组件之一,目前已开源给Apache。Flume的

15、原始版本为Flume-OG,经过对整体架构的重新设计,现已改 名为Flume-NG。Flume发展到现在已经不局限于日志收集,还可以通过简单的配置收集不同数据源的海量数据并将数据准确高效地传输到不同的中心存储。目前Flume可对接的主流大数据框架有 Hadoop、Kafka、ElasticSearch、Hive、HBase等。在使用Flume的过程中,通过配置文件就可以实现整个数据收集过程的负载均衡和故障转移,而不需要修改Flume的任何代码。得益于优秀的框架设 计,Flume通过可扩展、插件化、组合式、高可用、高容错的设计模式,为用户提供了简单、高效、准确的轻量化大数据采集工具。 (4)Ka

16、fka Kafka是由LinkedIn开源的分布式消息队列,能够轻松实现高吞吐、可扩展、高可用,并且部署简单快速、开发接口丰富。目前,各大互联网公司已经在生产环境中广泛使用,而且已经有很多分布式 处理系统支持使用Kafka,比如Spark、Strom、Druid、Flume等。 (5)InfluxDB InfluxDB是一款开源分布式时序数据库,非常适合存储监控系统收集的指标数据。时序数据库顾名思义就是按照时间顺序存储指标数据,即监控系统的场景大部分是按照时间顺序存储各项指标数据, 过期时间太长的指标可能将不会再关注,所以为了提高数据库的存储率,提高查询性能,需要定期删除过期指标。Influx

17、DB的诸多特性非常适合监控系统的使用场景。 本书将详细介绍上述技术的原理,通过实践演示每种技术的实际应用场景。希望通过理论与实践相结合的方式使内容更通俗易懂,帮助读者根据实际的业务场景选择合适的技术方案,相信大数据在未 来的发展中还会创造更多的价值。 内容概述 本书分三部分展开介绍: 第一部分(第1章)主要介绍了企业大数据系统的前期准备工作,包括如何构建企业大数据处理系统的软件环境和集群环境。 第二部分(第27章)首先介绍了Spark的基本原理,Spark 2.0版本的Spark SQL、Structured Streaming原理和使用方法,以及Spark的多种优化方式;然后,介绍了Drui

18、d的基本原理、集群的搭建 过程、数据摄入过程,以及在查询过程中如何实现Druid查询API;接着介绍了日志收集系统Flume的基本架构和关键组件,以及分层日志收集架构的设计与实践;最后介绍了分布式消息队列Kafka的基本 架构和集群搭建过程,以及使用Java语言实现客户端API的详细过程。 第三部分(第89章)主要介绍了企业大数据处理的两个实际应用案例,分别是基于Druid构建多维数据分析平台和基于JMX指标的监控系统。 目标读者 本书适合从事大数据及相关工作的工程师阅读,也适合准备进入大数据领域的大数据爱好者学习、参考。 读者反馈 本书是在业余时间完成的,由于水平有限,编写时间仓促,书中可能

19、会出现介绍不够详细或者有错误的地方,敬请读者谅解。如果遇到任何问题或者寻求技术交流都可以通过如下联系方式与笔者进行 沟通。 大数据爱好者交流QQ群:124154694 个人邮箱:xiaoguanyu_java 致谢 感谢在本书的写作过程中帮助过笔者的朋友、同事、老师,感谢你们一次又一次的帮助和支持! 感谢机械工业出版社杨福川老师,本书从2016年6月份开始筹划,确定了基本的框架,虽然由于笔者个人原因导致写作速度缓慢,但是杨老师一直积极推动本书的出版,并且不断指导笔者写作,感谢 杨老师给予的理解、帮助与支持。感谢机械工业出版社编辑李艺老师,李艺老师用严谨的工作态度为本书做了专业的编辑工作,并且耐

20、心指导笔者完成了本书的编写工作。 感谢乐视智能中心大数据部的同事们,感谢他们在工作中帮助笔者分担工作任务;感谢上级领导的耐心指导,使笔者能够顺利地完成工作任务并腾出时间进行写作。在此特别感谢技术总监罗宏宇、技 术经理陆松林、刘韦宏、姚会航、张迪等。 感谢家人在工作和生活中对笔者的帮助和照顾。感谢父母,平时因工作原因很少回家看望,但他们一直在背后支持我、鼓励我。感谢妻子为家庭和工作的付出。家人的陪伴与支持是笔者不断学习、努 力奋斗的强大后盾! 第一部分 准备工作 第1章 基础环境准备 第1章 基础环境准备 1.1 软件环境准备 软件版本选择: 操作系统:CentOS 6.6版本;JDK:1.7版

21、本;Maven:3.2版本;Scala:2.10版本。 所有软件安装目录:/data/soft。 确定了软件版本后,我们将具体介绍软件的安装,本节主要介绍基础的软件安装方式。 1.JDK安装 JDK是Java Development Kit的简称,为Java语言开发的程序提供开发工具包和运行环境。JDK安装的步骤如下: (1)下载JDK二进制安装包 wget (2)解压安装 tar -zxvf jdk-7u15-linux-x64.tar.gz (3)创建软连接 软连接相当于快捷方式,便于后续版本更新升级。 ls -s /data/soft/jdk-7u15-linux-x64 /usr/lo

22、cal/jdk (4)配置环境变量 vim /etc/profile export JAVA_HOME=/usr/local/jdk export JRE_HOME=$JAVA_HOME/jre exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar :$JRE_HOME/lib:$CLASSPATH export PATH=$PATH: $JAVA_HOME/bin 刷新环境变量使其生效:source/etc/profile (5)验证安装是否成功 查看JDK版本命令:java-version 2.Maven安装 Ma

23、ven是Apache开源的一个目前比较流行的项目管理和整合工具,能够自动完成项目的构建,并根据配置文件自动下载依赖组件,提供代码编译、打包、发布等功能。下面介绍Maven的详细安装过 程。 Maven安装的步骤如下: (1)下载Maven二进制安装包 wget (2)解压安装 tar -zxvf apache-maven-3.3.9-bin.tar.gz (3)创建软连接 软连接相当于快捷方式,便于后续版本更新升级。 ls -s/data/soft/apache-maven-3.3.9-bin /usr/local/maven (4)配置环境变量 vim /etc/profile export

24、 M2_HOME=/usr/local/maven export PATH=$PATH: $JAVA_HOM前言 我上大学时,就开始在CSDN上写技术博客,目的在于记录平时遇到的一些问题以及研究的技术细节,好在将来可以进行查阅。随着时间的增长,我开始专注于某个技术模块,因为这样可以让我对具 体某项技术有更深入的研究,写出的内容也会更加系统化,而HDFS就是其中一个我持续研究的技术模块。同时作为一名Hadoop社区的活跃贡献者,我也会将社区上一些比较有意思的东西分享到博客上, 许多博友给了不少反馈,描述他们在工作中碰到的一些实际问题。在这样不断的写作、交流过程中,我得到了快速成长。目前大数据领域

25、相关的书籍并不是很多,而专门讲解其中一个模块的书则更少,所 以我将我过去一年多时间内关于HDFS的博客文章进行了整理、改进,同时也加入了一些新的内容。可以这么说,本书的内容源自博客,但是超越博客。 本书不会是纯源码分析的书籍。首先,我把工作实践中遇到的许多经验写入了书中,第7章便属于纯实践型的经验总结。其次,本书会是一个比较“新”的书,这里的“新”并不是指所分析的代码版本 新,而是包含了HDFS未来的一些比较棒的功能特性,以及Hadoop社区目前在做的一些事情。在这本书中,你会看到许多与社区相关的JIRA,了解如何从社区上找到问题的解决办法。期待本书能给你带来 更多的启发。 本书适合具有一定J

26、ava语言基础的同学,尤其适合以下读者朋友: 大数据架构师、开发者、运维工程师。 高年级本科生或研究生。 热衷于分布式存储技术的爱好者。 本书分为三大部分,“核心设计篇”介绍HDFS的基本原理、数据管理与策略等,“细节实现篇”介绍HDFS的块处理、流量处理、结构分析等,“解决方案篇”介绍数据管理技术与方案、数据读写技 术、异常处理等。 第一部分“核心设计篇”包括内容如下: 第1章介绍HDFS现有的数据存储方式,主要介绍其中的内存存储和异构存储两个方面。 第2章介绍HDFS目前内部几种主要的功能机制,包括缓存管理、快照管理等。 第3章介绍HDFS比较新颖的一些功能,以及目前较少被人用到的功能特性

27、。 第二部分“细节实现篇”包括内容如下: 第4章介绍HDFS的块处理相关操作,主要处理场景包括块如何组织、上报处理的过程以及多余块的清除。 第5章介绍HDFS的流量处理过程,包括HDFS目前流量处理的场景以及Balancer工具的数据平衡原理和优化。 第6章介绍HDFS一些特殊的结构对象类,包括这些类的作用、原理以及运用场景。 第三部分“解决方案篇”包括内容如下: 第7章介绍与HDFS相关的多套运维管理的操作方案,包括数据迁移、数据监控等方面。 第8章介绍HDFS写磁盘时的一些优化策略和改造方案。 第9章介绍HDFS的一些异常场景,并给出了相应的解决方案。 由于笔者水平有限,本书难免会有出错或

28、者介绍不明确的地方,恳请读者批评指正,可以发送关于本书的意见和建议到我的个人邮箱:yqtinapache.org。本书所涉及的源码,大家可以从Hadoop的 Git地址上进行下载: Git地址: CSDN地址: 感谢机械工业出版社的吴怡编辑,在我写作的过程中,不断指出其中的不足之处,督促和引导我完成本书的编写。 感谢蘑菇街数据平台部的同事们,在工作中不断地给予我帮助和支持,协助我解决各种各样的问题,于是才有了本书中所展现的精彩内容。 林意群 2017年2月 第一部分 核心设计篇 第1章 HDFS的数据存储 本章将从HDFS的数据存储开始说起,因为正是先有了数据的存储,才有后续的写入和管理等操作

29、。HDFS的数据存储包括两块:一块是HDFS内存存储,另一块是HDFS异构存储。HDFS内存存储是一 种十分特殊的存储方式,将会对集群数据的读写带来不小的性能提升,而HDFS异构存储则能帮助我们更加合理地把数据存到应该存的地方。 第一部分 核心设计篇 第1章 HDFS的数据存储 本章将从HDFS的数据存储开始说起,因为正是先有了数据的存储,才有后续的写入和管理等操作。HDFS的数据存储包括两块:一块是HDFS内存存储,另一块是HDFS异构存储。HDFS内存存储是一 种十分特殊的存储方式,将会对集群数据的读写带来不小的性能提升,而HDFS异构存储则能帮助我们更加合理地把数据存到应该存的地方。 1

30、.1 HDFS内存存储 HDFS的内存存储是HDFS所有数据存储方式中比较特殊的一种,与之后将会提到的HDFS缓存有一些相同之处:都用机器的内存作为存储数据的载体。不同之处在于:HDFS缓存需要用户主动设置目标 待缓存的文件、目录,其间需要使用HDFS缓存管理命令。而HDFS内存存储策略:LAZY_PERSIST则直接将内存作为数据存放的载体,可以这么理解,此时节点的内存也充当了一块“磁盘”。只要将文件 设置为内存存储方式,最终会将其存储在节点的内存中。综合地看,HDFS缓存更像是改进用户使用的一种功能,而HDFS内存存储则是从底层扩展了HDFS的数据存储方式。本节将对HDFS内存存储策略进

31、行更细致的分析。 1.1.1 HDFS内存存储原理 对于内存存储的存储策略,可能很多人会存有这么几种看法: 数据临时维持在内存中,服务一停止,数据全部丢失。 数据存在于内存中,在服务停止时做持久化处理,最终将数据全部写入到磁盘。 仔细来看以上这2种观点,其实都有不小的瑕疵: 第一个观点,服务一旦停止,内存数据全部丢失,这是无法接受的,我们只能容忍内存中少量的数据丢失。这个观点的另一个问题是,内存的存储空间是有限的,在服务运行过程中如果不及时处理 一部分数据,内存空间迟早会被耗尽。 第二个观点,在服务停止退出的时候做持久化操作,同样会面临上面提到的内存空间的限制问题。如果机器的内存足够大,数据可

32、能会很多,那么最后写入磁盘的阶段速度会很慢。 所以一般情况下,通用的、比较好的做法是异步持久化,什么意思呢?在内存存储新数据的同时,持久化距离当前时刻最远(存储时间最早)的数据。换一个通俗的解释,好比有个内存数据块队列, 在队列头部不断有新增的数据块插入,就是待存储的块,因为资源有限,需要把队列尾部的块,也就是更早些时间点的块持久化到磁盘中,这样才有空间存储新的块。然后形成这样的一个循环,新的块加 入,老的块移除,保证了整体数据的更新。 HDFS的LAZY_PERSIST内存存储策略用的就是这套方法,原理如图1-1。 图1-1 LAZY_PERSIST策略原理图 上面描述的原理在图中的表示是第

33、4个步骤和第6个步骤。第4步写数据到内存中,第6步异步地将数据写到磁盘。前面几个步骤是如何设置StorageType的操作,在下文中会具体提到。所以异步存储的 大体步骤可以归纳如下: 1)对目标文件目录设置StoragePolicy为LAZY_PERSIST的内存存储策略。 2)客户端进程向NameNode发起创建/写文件的请求。 3)客户端请求到具体的DataNode后DataNode会把这些数据块写入RAM内存中,同时启动异步线程服务将内存数据持久化写到磁盘上。 内存的异步持久化存储是内存存储与其他介质存储不同的地方。这也是LAZY_PERSIST名称的源由,数据不是马上落盘,而是懒惰的、

34、延时地进行处理。 1.1.2 Linux虚拟内存盘 这里需要了解一个额外的知识点:Linux虚拟内存盘。之前笔者也一直有个疑惑,内存也可以当作一个块盘使用?内存不就是临时存数据用的吗?于是在学习此模块知识之前,特意查了相关的资料。其 实在Linux中,的确有将内存模拟为一个块盘的技术,叫虚拟内存盘(RAM disk)。这是一种模拟的盘,实际数据都是存放在内存中的。虚拟内存盘可以在某些特定的内存式存储文件系统下结合使用,比 如tmpfs、ramfs。关于tmpfs的具体内容,大家可以查阅维基百科等资料。通过此项技术,我们就可以将机器内存利用起来,作为一块独立的虚拟盘供DataNode使用了。 1

35、.1.3 HDFS的内存存储流程分析 下面讲述本章的核心内容:HDFS内存存储的主要流程。不要小看这个存储策略,里面的过程可并不简单,在下面的内容中,笔者会给出比较多的过程图,帮助大家理解。 1.HDFS文件内存存储策略设置 要想让文件数据存储到内存中,一开始要做的操作是设置此文件的存储策略,即上面提到的LAZY_PERSIST,而不是使用默认的存储策略:StoragePolicy.DEFAULT,默认策略的存储介质是DISK类型 的。设置存储策略的方法目前有以下3种: 第一种方法,通过命令行的方式,调用如下命令: hdfs storagepolicies -setStoragePolicy

36、-path -policy LAZY_PERSIST 这种方式比较方便、快速。 第二种方法,调用对应的程序方法,比如调用暴露在外部的create文件方法,但是得带上参数CreateFlag.LAZY_PERSIST。如下所示: FSDataOutputStream fos = fs.create( path, FsPermission.getFileDefault(), EnumSet.of(CreateFlag.CREATE, CreateFlag.LAZY_PERSIST), bufferLength, replicationFactor, blockSize, null); 上述方式最终

37、调用的是DFSClient的create同名方法,如下所示: / DFSClient创建文件方法 public DFSOutputStream create(String src, FsPermission permission, EnumSet flag, short replication, long blockSize, Progressable progress, int buffersize, ChecksumOpt checksumOpt) throws IOException return create(src, permission, flag, true, replicati

38、on, blockSize, progress, buffersize, checksumOpt, null); 方法经过RPC层层调用,经过FSNamesystem,最终会到FSDirWriteFileOp的startFile方法,在此方法内部,会有设置存储策略的动作: static HdfsFileStatus startFile( FSNamesystem fsn, FSPermissionChecker pc, String src, PermissionStatus permissions, String holder, String clientMachine, EnumSet f

39、lag, boolean createParent, short replication, long blockSize, EncryptionKeyInfo ezInfo, INode.BlocksMapUpdateInfo toRemoveBlocks, boolean logRetryEntry) throws IOException assert fsn.hasWriteLock(); boolean create = flag.contains(CreateFlag.CREATE); boolean overwrite = flag.contains(CreateFlag.OVERW

40、RITE); / 判断CreateFlag是否带有LAZY_PERSIST标识,来判断是否是内存存储策略 boolean isLazyPersist = flag.contains(CreateFlag.LAZY_PERSIST); / 在此设置策略 setNewINodeStoragePolicy(fsd.getBlockManager(), newNode, iip, isLazyPersist); fsd.getEditLog().logOpenFile(src, newNode, overwrite, logRetryEntry); if (NameNode.stateChangeLo

41、g.isDebugEnabled() NameNode.stateChangeLog.debug(“DIR* NameSystem.startFile: added “ + src + “ inode “ + newNode.getId() + “ “ + holder); return FSDirStatAndListingOp.getFileInfo(fsd, src, false, isRawPath); 这部分的过程调用见图1-2。 图1-2 LAZY_PERSIST策略设置流程图 还有一种方法是通过FileSystem的setStoragePolicy方法,不过此方法在还未发布的2.

42、8版本中提供,如下所示: fs.setStoragePolicy(path, “LAZY_PERSIST“); 这种方式的优点在于可以用程序动态地设置目标路径的存储方式。 以上就是存储策略的设置过程,这一部分还是非常直接明了的。 2.LAZY_PERSIST内存存储 当我们为文件设置了LAZY_PERSIST的存储方式之后,DataNode如何进行内存式的存储呢?笔者在下面会分模块、分角色进行介绍。 首先要介绍的是LAZY_PERSIST相关结构。在之前的内容中已经提到过,在数据存储的同时会有另外一批数据被异步地持久化,所以这里一定会涉及多个服务对象的合作。这些服务对象的指挥者是 FsData

43、setImpl,它是一个管理DataNode所有磁盘读写的管家。 在FsDatasetImpl中,与内存存储相关的服务对象有3个,如图1-3所示。 图1-3 LAZY_PERSIST相关服务对象 说明如下: RamDiskAsyncLazyPersistService:此对象是异步持久化线程服务,针对每一个磁盘块设置一个对应的线程池,需要持久化到给定磁盘的数据块会被提交到对应的线程池中去。每个线程池的最大线程数 为1。 LazyWriter:这是一个线程服务,此线程会不断地从数据块列表中取出数据块,将数据块加入到异步持久化线程池RamDiskAsyncLazyPersistService中去执

44、行。 RamDiskReplicaLruTracker:是副本块跟踪类,此类中维护了所有已持久化、未持久化的副本以及总副本数据信息。所以当一个副本被最终存储到内存中后,相应地会有副本所属队列信息的变更。当 节点内存不足时,会将最近最少被访问的副本块移除。 以上3者的紧密合作,最终实现HDFS的内存存储。下面是具体的角色介绍。 (1)RamDiskReplicaLruTracker RamDiskReplicaLruTracker起到了一个中间人的角色,它内部维护了多个关系的数据块信息,主要是以下3类: public class RamDiskReplicaLruTracker extends

45、RamDiskReplicaTracker / blockpool Id对副本信息的映射图 Map replicaMaps; / 待写入磁盘的副本队列 Queue replicasNotPersisted; / 已持久化写入磁盘的映射图 TreeMultimap replicasPersisted; 这里的Queue就是待存入内存存储队列。以上3个变量之间的关系见图1-4。 图1-4 RamDisk副本块结构关系图 RamDiskReplicaLruTracker中的方法操作绝大多数与这3个变量的增删改动相关,所以逻辑并不复杂,我们只需要了解这些方法有什么作用即可。笔者将方法分成了以下两类:

46、第一类,异步持久化操作相关方法。如图1-5所示。 图1-5 异步持久化操作相关流程图 当节点重启或者有新的文件设置了LAZY_PERSIST策略后,就会有新的副本块存储到内存中,同时会加入到replicaNotPersisted队列中。经过中间的dequeueNextReplicaToPersist方法,取出下一个 将被持久化的副本块,进行写磁盘的操作。在持久化的过程中将调用recordStartLazyPersist、recordEndLazyPersist这两个方法,标志着持久化状态的变更。 第二类,异步持久化操作无直接关联方法。方法如下: 1)discardReplica:当检测到不再需要某副本的时候(包括副本已被删除,或已损坏的情况),可以从内存中移除、撤销副本。 2)t


注意事项

本文(软件研发成本度量规范释义 第2版.pdf)为本站会员(始于喜欢终于深爱)主动上传,文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文库网(点击联系客服),我们立即给予删除!




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

文库网用户QQ群:731843829  微博官方号:文库网官方   知乎号:文库网

Copyright© 2025 文库网 wenkunet.com 网站版权所有世界地图

经营许可证编号:粤ICP备2021046453号   营业执照商标

1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png