分布式并行计算MapReduce

1.用自己的话阐明Hadoop平台上HDFS和MapReduce的功能、工作原理和工作过程。

HDFS的概念: Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统、HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。

HDFS的系统结构:

MasterSlave结构。

分为三个角色:NameNodeSecondaryNameNodeDataNode

Master节点:1. 管理数据块映射;2. 处理客户端的读写请求;3. 配置副本策略;4. 管理HDFS的名称空间。5. namenode 内存中存储的是 = fsimage + edits。

Slave节点:1. 存储client发来的数据块block;2. 执行数据块的读写操作。

 

HDFS的文件读取原理,详细解析如下:

     1、首先调用FileSystem对象的open方法,其实获取的是一个DistributedFileSystem的实例。

     2、DistributedFileSystem通过RPC(远程过程调用)获得文件的第一批block的locations,同一block按照重复数会返回多个locations,这些locations按照Hadoop拓扑结构排序,距离客户端近的排在前面。

     3、前两步会返回一个FSDataInputStream对象,该对象会被封装成 DFSInputStream对象,DFSInputStream可以方便的管理datanode和namenode数据流。客户端调用read方 法,DFSInputStream就会找出离客户端最近的datanode并连接datanode。

     4、数据从datanode源源不断的流向客户端。

     5、如果第一个block块的数据读完了,就会关闭指向第一个block块的datanode连接,接着读取下一个block块。这些操作对客户端来说是透明的,从客户端的角度来看只是读一个持续不断的流。

     6、如果第一批block都读完了,DFSInputStream就会去namenode拿下一批blocks的location,然后继续读,如果所有的block块都读完,这时就会关闭掉所有的流。 

 

 MapReduce的概念:MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算,是面向大数据并行处理的计算模型、框架和平台,用Map和Reduce两个函数编程实现基本的并行计算任务,提供了抽象的操作和并行编程接口,以简单方便地完成大规模数据的编程和计算处理.

 MapReduce的工作原理:

map task
程序会根据InputFormat将输入文件分割成splits,每个split会作为一个map task的输入,每个map task会有一个内存缓冲区,
输入数据经过map阶段处理后的中间结果会写入内存缓冲区,并且决定数据写入到哪个partitioner,当写入的数据到达内存缓冲
区的的阀值(默认是0.8),会启动一个线程将内存中的数据溢写入磁盘,同时不影响map中间结果继续写入缓冲区。在溢写过程中,
MapReduce框架会对key进行排序,如果中间结果比较大,会形成多个溢写文件,最后的缓冲区数据也会全部溢写入磁盘形成一个溢写
文件(最少有一个溢写文件),如果是多个溢写文件,则最后合并所有的溢写文件为一个文件。

reduce task

当所有的map task完成后,每个map task会形成一个最终文件,并且该文件按区划分。reduce任务启动之前,一个map task完成后,
就会启动线程来拉取map结果数据到相应的reduce task,不断地合并数据,为reduce的数据输入做准备,当所有的map tesk完成后,
数据也拉取合并完毕后,reduce task 启动,最终将输出输出结果存入HDFS上。
 

2.HDFS上运行MapReduce

1.查看是否已经安装python:

 

2.在/home/hadoop/路径下建立wc文件夹,在文件夹内新建mapper.py、reducer.py、run.sh和文本文件HarryPotter.txt:

 

3.查看mapper.py reducer.py run.sh的内容:

4)修改mapper.py和reducer.py文件的权限:

 

4.在本地运行测试map函数和reduce函数

5.启动Hadoop:HDFS, JobTracker, TaskTracker

 

6.streaming的jar文件的路径写入环境变量,让环境变量生效

 

7.source run.sh来执行mapreduce

 

8.查看运行结果:

 

posted @ 2019-06-05 13:33  unilee  阅读(374)  评论(0编辑  收藏  举报