• 分布式并行计算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.查看运行结果:

  • 相关阅读:
    2019省赛训练组队赛4.9周二 2017浙江省赛
    #Leetcode# 49. Group Anagrams
    #Leetcode# 57. Insert Interval
    POJ 2195 Going Home
    HDU 2255 奔小康赚大钱
    HDU 1083 Courses
    HDU 2063 过山车
    POJ 3041 Asteroids
    指针的妙处
    jzoj 6273. 2019.8.4【NOIP提高组A】欠钱 (money)
  • 原文地址:https://www.cnblogs.com/lb2016/p/10968970.html
Copyright © 2020-2023  润新知