zoukankan      html  css  js  c++  java
  • 分布式并行计算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.查看运行结果:

  • 相关阅读:
    JDBC 查询的三大参数 setFetchSize prepareStatement(String sql, int resultSetType, int resultSetConcur)
    有空必看
    SpringMVC 利用AbstractRoutingDataSource实现动态数据源切换
    FusionCharts JavaScript API Column 3D Chart
    FusionCharts JavaScript API
    FusionCharts JavaScript API
    Extjs 继承Ext.Component自定义组件
    eclipse 彻底修改复制后的项目名称
    spring 转换器和格式化
    Eclipse快速生成一个JavaBean类的方法
  • 原文地址:https://www.cnblogs.com/lb2016/p/10968970.html
Copyright © 2011-2022 走看看