一、问题描述
有n个元素,需要随机选择m个,且要保证每个元素被选的概率相同。
有n个元素,需要随机选择m个,且要保证每个元素被选的概率相同。
动态规划(Dynamic Programming)是通过组合子问题的解而解决整个问题的。分治法算是是将问题划分成一些独立的子问题,递归地求解各子问题,递归地求解个子问题,然后合并子问题的解而得到原问题的解。而动态规划与此不同,它是用于子问题不是独立的情况,就是各子问题包含公共的子的子问题。
《The Java Machine Specification》中将JVM内存结构(又称运行时数据区Runtime Data Area)分为六部分(参看第三章):
以上数据区的具体描述可参考规范。需要注意的是,以上只是一个规范说明,并没有规定虚拟机如何实现这些数据区。Sun JDK实现将内存空间划分为方法区、堆、本地方法栈、JVM方法栈、PC寄存器五部分。
这篇博文主要是解决上一篇迭代式MapReduce解决方案(一)中总结所提到的第三个问题,与网上大多数Hadoop调优(董的博客;、淘宝数据平台)不太一样,网上告诉的是方法,但是方法是什么以及优化后能达到什么效果没有一个直观的感受。这篇博文讲述了一些简单的优化手段,可将140M的临时文件缩小到4.9M,期望能有一些对优化一些更为直观的感受,起到抛砖引玉的作用。
普通的MapReduce任务是将一个任务分割成map与reduce两个阶段。map阶段负责过滤、筛选、检查输入数据,并将处理后的结果写入本地磁盘中;reduce阶段则负责远程读入map的本地输出结果,对数据进行归并、分析等处理,之后再将结果写入HDFS中。其数据流过程如下:
用脚本语言的原因就是因为其语法简单,使用方便,但是好像一直没有把握其中的精华。虽然仔细读过网上转载过N次的Python少打字小技巧,但还是无法很好的运用。
随着非结构化数据的爆炸,分布式文件系统进入了发展的黄金时期,从高性能计算到数据中心,从数据共享到互联网应用,已经渗透到数据应用的各方各面。对于大多数分布式文件系统(或集群文件系统,或并行文件系统)而言,通常将元数据与数据两者独立开来,即控制流与数据流进行分离,从而获得更高的系统扩展性和I/O并发性。因而,元数据管理模型显得至关重要,直接影响到系统的扩展性、性能、可靠性和稳定性等。存储系统要具有很高的Scale-Out特性,最大的挑战之一就是记录数据逻辑与物理位置的映像关系即数据元数据,还包括诸如属性和访问权限等信息。特别是对于海量小文件的应用,元数据问题是个非常大的挑战。总体来说,分布式文件系统的元数据管理方式大致可以分为三种模型,即集中式元数据服务模型、分布式元数据服务模型和无元数据服务模型。在学术界和工业界,这三种模型一直存在争议,各有优势和不足之处,实际系统实现中也难分优劣。实际上,设计出一个能够适用各种数据应用负载的通用分布式文件系统,这种想法本来就是不现实的。从这个意义上看,这三种元数据服务模型都有各自存在的理由,至少是在它适用的数据存储应用领域之内。