Hadoop大数据架构技术研究_第1页
Hadoop大数据架构技术研究_第2页
Hadoop大数据架构技术研究_第3页
Hadoop大数据架构技术研究_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、    hadoop大数据架构技术研究    薛博召摘 要 hadoop是由apache基金会开发的分布式计算架构,用户可以在不了解分布式底层细节的情况下开发分布式程序,充分利用集群的威力进行高速运算和存储。hadoop框架最核心的设计就是:hdfs和mapreduce,hdfs为海量的数据提供了存储,而mapreduce则为海量的数据提供了计算。关键词 大数据;hadoop;hdfs;mapreduce引言hadoop是一个能够对大量数据进行分布式处理的框架,它有可靠、高效、可扩展等特性。可靠是因为它假设计算和存储元素可能失败,通过维护多个工作数据副本

2、,确保能够对失败节点重新进行分布处理。高效是因为它以并行的方式工作,通过并行处理加快处理速度、提高吞吐量。通过灵活的横向扩展能够处理 pb 级数据。1 hadoop技术架构研究hdfs和mapreduce是hadoop的两大核心。hdfs被设计成适合运行在通用硬件上的分布式文件系统,是一个高度容错性的系统,能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。把一个文件存入hdfs,hdfs会把文件分割成多个block,分散存储在n台linux机器上,每台存储数据的机器称为datanode,每一个block会在多个datanode上存储多份副本,默认是3份。一旦文件被切块存储, hdfs中就

3、必须有一个机制,来记录用户的每一个文件的切块信息,及每一块的具体存储机器,namenode负责管理文件目录、文件和block的对应关系,以及block和datanode的对应关系。mapreduce被用于大规模集群计算,每个mapreduce作业主要包含input split、map task、combiner、shuffle和reduce task共5个阶段。在进行map计算之前,mapreduce会把输入的数据切分为若干块,划分切片的任务由job客户端负责,每个输入分片对应一个map任务。map task阶段会调用相应对象的next()方法,逐行读取文件,产生key-value值,解析出k

4、ey-value值后调用定制编写的业务逻辑代码,计算输出新的key-value值后缓存,待后续处理。combiner阶段是可选的,它是map运算的后续操作,主要是在map计算出中间文件前做合并重复key值的操作。例如对文件里的单词频率做统计,map计算时碰到一个”hadoop”的单词就会记录为1,但是这篇文章里”hadoop”可能出现多次,那么map输出文件就会冗余,因此在reduce计算前对相同的key做合并操作,文件会变小,可有效提高宽带传输效率。但是,combiner操作是有风险的,求总数、最大值、最小值可以使用combiner,如果做平均值计算使用combiner,最终reduce计算

5、结果就会出错。将map task生成的数据传输给reduce task的过程就是shuffle,一般mapreduce计算的都是海量数据,内存空间有限,map输出时不可能把所有文件都放到内存,因此map过程涉及将数据写入磁盘。map输出时会在内存开启环形缓冲区,默认大小是100mb,配置文件里默认设定为了缓冲区阀值是0.8。map会为输出操作启动一个守护线程(spiller),若缓冲区内存使用达到了80%,这个守护线程就会把内容写到磁盘,这个过程叫spill。另外20%内存可以继续写入数据,写入磁盘和写入内存操作互不干扰,如果缓存满了,那么map作业会阻塞写入内存的操作,让写入磁盘操作完成后再

6、继续执行写入内存操作。map task在写入磁盘前还会执行分区和排序操作,如果我们定义了combiner函数,那么排序前还会执行combiner操作。分区会调用partitioner的组件,排序则会调用key上的compareto()来比大小。每次spill操作时就会写一个文件,这个文件叫溢出文件,溢出文件里区号小的在前面,同区中按key有序。map输出全部做完后,map会合并这些输出文件,这些文件也是分区且有序的。合并过程中会产生一个分区索引文件,用来指明每个分区的起始点以及它的偏移量。partitioner操作和map阶段的输入分片很像,一个partitioner对应一个reduce作业。

7、partitioner就是reduce的输入分片,这个可以编程控制,主要是根据实际业务场景,达到更好的reduce负载均衡,这是提高reduce效率的关键。map task阶段完成后,程序就会退出,那么reduce task要去哪里获取处理完的数据呢?答案是这些文件会被纳入nodemanager web程序的document目录中,reduce task会通过web服务器下载相应区号的文件,将这些文件合并。处理数据时,首先实现继承自reducer的类,里面有一个reduce(k,迭代器,context)方法,通过反射构造出一个对象去调用reduce(),里面的参数k和迭代器会分别去创建一个对象

8、,每迭代一次就会按文件里的顺序去读一次,然后把读出来的k传给对象k,然后把v传给对象values里。这个过程就是从磁盘上把二进制数据读取出来,然后反序列化把数据填入对象的一个过程。迭代过程中会有一个分组比较器(grouping comparator)去判断迭代的k是否相同,不同则终止迭代。每迭代完一次,context.write()输出一次聚合后的結果,这个聚合的结果会通过textoutputformat类的getrecordwriter()方法拿到一个recordwriter对象,通过这个对象去调一个write(k,v)方法,将这些数据以文件的方式写入hdfs1。2 结束语hadoop提供了一套久经考验的批处理模型,适合处理对时间要求不高的大规模数据集。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论