`
hulin_leo
  • 浏览: 535 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

hadoop 分布式应用(个人学习笔记)

阅读更多
一,hadoop介绍
hadoop 是apache 的开源软件,用于分布式任务计算,包括mapreduce(首先由谷歌提出,并应用) 分布式计算框架和hdfs 文件系统两部分。hadoop 让开发人员在不了解底层细节的情况下,轻松开发分布式应用。

二,hadoop job提交流程
1)JobClient 运行Job 任务
JobClient.runJob(Job.clss);
2)JobClient 向JobTracker 申请一个JobId ;
3)配置Job运行环境(copy 相关配置,和Jar 文件到本地);
JobClient.copyRemoteFile();
4)计算Job 输入数据(根据配置的InputSplit 大小,计算Map 数)
5)提交Job,调用JobTracker.submit();
6) JobTracker 分配Job 给TaskTracker ;
7) TaskTracker 启动Jvm 计算任务(默认为每个任务启动一个Jvm)。

三, mapreduce 框架原理(分久闭合)
map 端拆分数据,reduce端合并数据
3.1) map端用于数据解析,mapreduce 框架会尽量使用数据本地化计算(减少数据传输带来的网络流量),提高效率。map计算过程中,首先会将计算结果<key,value>存在内存中,在达到一定阀值(可以配置)后写入临时文件(减少磁盘IO次数)。map端的计算结果做为中间数据用于reduce 端的数据输入。
3.2)reduce 端负责最终结果统计,reduce 计算结束将结果<key,value>存入hdfs,然后删除map 端中间数据。

四,hadoop任务分配相关源码学习
1) List<Task> tasks = getSetupAndCleanupTasks(taskTrackerStatus);
        if (tasks == null ) {
          tasks = taskScheduler.assignTasks(taskTrackers.get(trackerName));
        }
        if (tasks != null) {
          for (Task task : tasks) {
            expireLaunchingTasks.addNewTask(task.getTaskID());
            if(LOG.isDebugEnabled()) {
              LOG.debug(trackerName + " -> LaunchTask: " + task.getTaskID());
            }
            actions.add(new LaunchTaskAction(task));
          }
        }
1.1) getSetupAndCleanupTasks(taskTrackerStatus);//先分配辅助任务
1,2) tasks = taskScheduler.assignTasks(taskTrackers.get(trackerName));
//如果不存在辅助任务就由hadoop任务调度器分配计算任务

2) public void offerService();//启动jobtracker服务(启动各种内部线程)
3) public synchronized HeartbeatResponse heartbeat(TaskTrackerStatus status,  boolean restarted,boolean initialContact,
boolean acceptNewTasks, short responseId) throws IOException {}//jobtracker 处理tasktracker发送心跳方法,首先检查该tasktracker是否属于节点黑名单,再检查tasktracker是否健康...最后通过心跳给tasktracker下达分配的任务。

五,部分相关属性
1) Map<JobID, JobInProgress> jobs = 
    Collections.synchronizedMap(new TreeMap<JobID, JobInProgress>());
//存储客户端提交的job信息,jobtracker为客户端提交的job生成一个JobInProgress对象进行跟踪;jobtracker采用三层多叉树(一个jobInProgress对应多个TaskInProgress,一个TaskInProgress对应多个Task Attempt)的结构进行任务的追踪。
2)   TreeMap<String, ArrayList<JobInProgress>> userToJobsMap =
    new TreeMap<String, ArrayList<JobInProgress>>();//映射用户的job信息,hadoop 集群可能创建多个账户

六,jobtracker 任务分配
jobtracker 从正在运行的job任务中选择取job,分配task前jobtracker 会判断申请任务的tasktracker 是否还有能力去执行新任务。如果可以执行,jobtracker 首先会尝试为每个job分配一个本地任务或者机架本地任务,如果不存在本地任务就分配非本地任务(先分配map任务,然后分配reduce任务)。
Collection<JobInProgress> jobQueue =
      jobQueueJobInProgressListener.getJobQueue();//获取job队列
synchronized (jobQueue) {
      for (JobInProgress job : jobQueue) {
        if (job.getStatus().getRunState() == JobStatus.RUNNING) {
          remainingMapLoad += (job.desiredMaps() - job.finishedMaps());
          if (job.scheduleReduces()) {
            remainingReduceLoad +=
              (job.desiredReduces() - job.finishedReduces());
          }
        }
      }
    }//计算所有运行job剩下的map数和reduce数
for (int i=0; i < availableMapSlots; ++i) {
      synchronized (jobQueue) {
        for (JobInProgress job : jobQueue) {
          if (job.getStatus().getRunState() != JobStatus.RUNNING) {
            continue;
          }

          Task t = null;
         
          // Try to schedule a node-local or rack-local Map task
          t =
            job.obtainNewNodeOrRackLocalMapTask(taskTrackerStatus,
                numTaskTrackers, taskTrackerManager.getNumberOfUniqueHosts());
          if (t != null) {
            assignedTasks.add(t);
            ++numLocalMaps;
           
            // Don't assign map tasks to the hilt!
            // Leave some free slots in the cluster for future task-failures,
            // speculative tasks etc. beyond the highest priority job
            if (exceededMapPadding) {
              break scheduleMaps;
            }
          
            // Try all jobs again for the next Map task
            break;
          }
         
          // Try to schedule a node-local or rack-local Map task
          t =
            job.obtainNewNonLocalMapTask(taskTrackerStatus, numTaskTrackers,
                                   taskTrackerManager.getNumberOfUniqueHosts());
         
          if (t != null) {
            assignedTasks.add(t);
            ++numNonLocalMaps;
           
            // We assign at most 1 off-switch or speculative task
            // This is to prevent TaskTrackers from stealing local-tasks
            // from other TaskTrackers.
            break scheduleMaps;
          }
        }
      }
    }//map 任务分配
boolean exceededReducePadding = false;
    if (availableReduceSlots > 0) {
      exceededReducePadding = exceededPadding(false, clusterStatus,
                                              trackerReduceCapacity);
      synchronized (jobQueue) {
        for (JobInProgress job : jobQueue) {
          if (job.getStatus().getRunState() != JobStatus.RUNNING ||
              job.numReduceTasks == 0) {
            continue;
          }

          Task t =
            job.obtainNewReduceTask(taskTrackerStatus, numTaskTrackers,
                                    taskTrackerManager.getNumberOfUniqueHosts()
                                    );
          if (t != null) {
            assignedTasks.add(t);
            break;
          }
         
          // Don't assign reduce tasks to the hilt!
          // Leave some free slots in the cluster for future task-failures,
          // speculative tasks etc. beyond the highest priority job
          if (exceededReducePadding) {
            break;
          }
        }
      }
    }//reduce任务分配,reduce任务不用考虑数据本地计算特性
分享到:
评论

相关推荐

    Java分布式应用学习笔记

    Java分布式应用学习笔记 在Java世界中,分布式应用是指由多个独立组件通过网络通信协同工作的系统。这种架构模式常用于构建大规模、高可用性、可扩展的系统。本笔记将深入探讨Java分布式应用的核心概念、技术和实践...

    hadoop1.0\2.0学习笔记及

    本学习笔记涵盖了Hadoop 1.0和2.0两个主要版本,旨在帮助读者全面理解Hadoop的核心概念、架构以及实际操作。 在Hadoop 1.0中,核心组件主要包括HDFS(Hadoop Distributed File System)和MapReduce。HDFS是一种...

    hadoop- w3c 学习笔记

    Hadoop 是一个开源的大数据处理框架,主要用于存储和处理海量数据。它的设计灵感来源于 Google 的 GFS 和 MapReduce,能够高效地...对于想要深入理解和应用大数据技术的人来说,掌握 Hadoop 的原理和使用是必不可少的。

    Hadoop,SPRK开发学习笔记

    本文将围绕“Hadoop,SPARK开发学习笔记”这一主题,深入探讨Hadoop的组件HDFS(分布式文件系统)、HBase(分布式数据库)和Hive(数据仓库工具),以及Spark的核心特性与开发实践。 首先,Hadoop是Apache基金会的...

    传智黑马赵星老师hadoop七天课程资料笔记-第一天(全)

    7. "分布式文件系统.txt" - 可能详细阐述了Hadoop分布式文件系统(HDFS)的工作原理、设计目标和关键特性。 8. "hadoop2.4.1伪分布式搭建.txt" 和 "hadoop1.2.1伪分布式搭建.txt" - 这两个文件分别对应不同版本的...

    VMware下完全分布式Hadoop集群安装笔记

    ### VMware下完全分布式Hadoop集群安装笔记 #### 一、准备工作与环境搭建 **1. 安装VMware** 在开始之前,首先需要一个虚拟化平台来模拟多台计算机之间的交互,这里选择的是VMware。根据您的操作系统选择合适的...

    最新Hadoop学习笔记

    综上所述,这份“最新Hadoop学习笔记”涵盖了从环境搭建到项目实践的全过程,旨在帮助读者全面掌握Hadoop的核心技术和应用方式。通过阅读和实践,你将能够熟练地在大规模数据集上进行高效计算和存储。

    分布式数据库Hive笔记_HDFS_Hadoop_分布式数据库

    总的来说,学习这些内容可以帮助我们深入理解大数据处理的工作原理,掌握如何在Hadoop生态系统中使用Hive进行高效的数据分析。通过阅读和研究这些资料,你将能够熟练运用Hive进行大数据查询,同时了解Hadoop的运行...

    传智黑马赵星老师hadoop七天课程资料笔记-第七天(全)

    这些笔记可能包括了对Hadoop核心组件的深度解析,如HDFS(Hadoop分布式文件系统)和MapReduce计算框架,以及可能涵盖YARN(Yet Another Resource Negotiator)资源调度器的使用。 【标签】"hadoop" 明确了这个...

    hadoop安装及详细学习笔记

    ### Hadoop 安装及详细学习笔记 #### Hadoop 概述 Hadoop 是一个能够对大量数据进行分布式处理的软件框架,它旨在提供高扩展性、可靠性和高效性,适用于处理PB级别的数据集。Hadoop 的核心组件包括 HDFS(Hadoop ...

    Hadoop学习笔记

    这个“Hadoop学习笔记”涵盖了Hadoop生态系统中的核心组件,包括HDFS(Hadoop分布式文件系统)、HBase(一个分布式、列式存储的数据库)、Hive(数据仓库工具)以及Spark(一个快速、通用且可扩展的数据处理引擎)。...

    spark+hadoop大数据处理学习笔记

    本学习笔记将深入探讨这两个工具的核心概念、应用场景以及如何将它们结合使用。 **Hadoop** 是一个开源框架,主要用于分布式存储和计算。它的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce。HDFS...

    HADOOP学习笔记

    【HADOOP学习笔记】 Hadoop是Apache基金会开发的一个开源分布式计算框架,是云计算领域的重要组成部分,尤其在大数据处理方面有着广泛的应用。本学习笔记将深入探讨Hadoop的核心组件、架构以及如何搭建云计算平台。...

    配置xen环境及hadoop集群环境的学习笔记

    ### 配置XEN环境及Hadoop集群环境学习笔记 #### XEN虚拟机的安装配置 **XEN** 是一种开源虚拟化技术,允许在一台物理机器上运行多个操作系统实例,这些实例通常被称为“域”(Domains)。XEN 的安装配置涉及到安装...

    hadoop学习笔记.rar

    《Hadoop学习笔记详解》 Hadoop,作为大数据处理领域中的核心框架,是Apache软件基金会下的一个开源项目,主要用于分布式存储和并行计算。本文将根据提供的Hadoop学习笔记,深入解析Hadoop的关键概念和实战技巧,...

    Hadoop学习笔记.pdf

    学习Hadoop不仅要关注当前的架构和组件,还需要持续跟踪其发展动态,以便更好地把握和应用这项技术。对于初学者而言,了解Hadoop的基本架构和组件,理解其设计哲学和适用场景,是入门的关键步骤。随着技术的深入学习...

    3.Hadoop学习笔记.pdf

    此外,Hadoop也提供了对大数据进行分布式处理的能力,这包括了对数据的分布式存储、分布式计算以及集群资源的管理。通过使用Hadoop,企业和组织可以在不牺牲数据完整性和可靠性的前提下,处理和分析海量的数据集。

    hadoop学习笔记(三)

    在本篇"Hadoop学习笔记(三)"中,我们将探讨如何使用Hadoop的MapReduce框架来解决一个常见的问题——从大量数据中找出最大值。这个问题与SQL中的`SELECT MAX(NUMBER) FROM TABLE`查询相似,但在这里我们通过编程...

    Hadoop之HBase学习笔记

    【标题】"Hadoop之HBase学习笔记"主要聚焦于Hadoop生态中的分布式数据库HBase。HBase是一个基于Google Bigtable理念设计的开源NoSQL数据库,它运行在Hadoop之上,提供高性能、高可靠性以及可水平扩展的数据存储能力...

Global site tag (gtag.js) - Google Analytics