Hadoop之推测执行

最近在测试环境跑任务,有一部分任务出现如下情况:

推测执行(Speculative Execution)是指在集群环境下运行MapReduce,可能是程序Bug,负载不均或者其他的一些问题,导致在一个JOB下的多个TASK速度不一致,比如有的任务已经完成,但是有些任务可能只跑了10%,根据木桶原理,这些任务将成为整个JOB的短板,如果集群启动了推测执行,这时为了最大限度的提高短板,Hadoop会为该task启动备份任务,让speculative task与原始task同时处理一份数据,哪个先运行完,则将谁的结果作为最终结果,并且在运行完成后Kill掉另外一个任务。

 

推测执行(Speculative Execution)是通过利用更多的资源来换取时间的一种优化策略,但是在资源很紧张的情况下,推测执行也不一定能带来时间上的优化,假设在测试环境中,DataNode总的内存空间是40G,每个Task可申请的内存设置为1G,现在有一个任务的输入数据为5G,HDFS分片为128M,这样Map Task的个数就40个,基本占满了所有的DataNode节点,如果还因为每些Map Task运行过慢,启动了Speculative Task,这样就可能会影响到Reduce Task的执行了,影响了Reduce的执行,自然而然就使整个JOB的执行时间延长。所以是否启用推测执行,如果能根据资源情况来决定,如果在资源本身就不够的情况下,还要跑推测执行的任务,这样会导致后续启动的任务无法获取到资源,以导致无法执行。

默认的推测执行器是:org.apache.hadoop.mapreduce.v2.app.speculate.DefaultSpeculator,如果要改变推测执行的策略,可以按照这个类重写,继承org.apache.hadoop.service.AbstractService,实现org.apache.hadoop.mapreduce.v2.app.speculate.Speculator接口。

DefaultSpeculator构造方法:

  public DefaultSpeculator
      (Configuration conf, AppContext context,
       TaskRuntimeEstimator estimator, Clock clock) {
    super(DefaultSpeculator.class.getName());

    this.conf = conf;
    this.context = context;
    this.estimator = estimator;
    this.clock = clock;
    this.eventHandler = context.getEventHandler();
    this.soonestRetryAfterNoSpeculate =
        conf.getLong(MRJobConfig.SPECULATIVE_RETRY_AFTER_NO_SPECULATE,
                MRJobConfig.DEFAULT_SPECULATIVE_RETRY_AFTER_NO_SPECULATE);
    this.soonestRetryAfterSpeculate =
        conf.getLong(MRJobConfig.SPECULATIVE_RETRY_AFTER_SPECULATE,
                MRJobConfig.DEFAULT_SPECULATIVE_RETRY_AFTER_SPECULATE);
    this.proportionRunningTasksSpeculatable =
        conf.getDouble(MRJobConfig.SPECULATIVECAP_RUNNING_TASKS,
                MRJobConfig.DEFAULT_SPECULATIVECAP_RUNNING_TASKS);
    this.proportionTotalTasksSpeculatable =
        conf.getDouble(MRJobConfig.SPECULATIVECAP_TOTAL_TASKS,
                MRJobConfig.DEFAULT_SPECULATIVECAP_TOTAL_TASKS);
    this.minimumAllowedSpeculativeTasks
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第1章 初识Hadoop 数据!数据! 数据存储与分析 与其他系统相比 关系型数据库管理系统 网格计算 志愿计算 1.3.4 Hadoop 发展简史 Apache HadoopHadoop生态圈 第2章 关于MapReduce 一个气象数据集 数据的格式 使用Unix工具进行数据分析 使用Hadoop分析数据 map阶段和reduce阶段 横向扩展 合并函数 运行一个分布式的MapReduce作业 Hadoop的Streaming Ruby版本 Python版本 Hadoop Pipes 编译运行 第3章 Hadoop分布式文件系统 HDFS的设计 HDFS的概念 数据块 namenode和datanode 命令行接口 基本文件系统操作 Hadoop文件系统 接口 Java接口 从Hadoop URL中读取数据 通过FileSystem API读取数据 写入数据 目录 查询文件系统 删除数据 数据流 文件读取剖析 文件写入剖析 一致模型 通过 distcp并行拷贝 保持 HDFS 集群的均衡 Hadoop的归档文件 使用Hadoop归档文件 不足 第4章 Hadoop I/O 数据完整性 HDFS的数据完整性 LocalFileSystem ChecksumFileSystem 压缩 codec 压缩和输入切分 在MapReduce中使用压缩 序列化 Writable接口 Writable类 实现定制的Writable类型 序列化框架 Avro 依据文件的数据结构 写入SequenceFile MapFile 第5章 MapReduce应用开发 配置API 合并多个源文件 可变的扩展 配置开发环境 配置管理 辅助类GenericOptionsParser,Tool和ToolRunner 编写单元测试 mapper reducer 本地运行测试数据 在本地作业运行器上运行作业 测试驱动程序 在集群上运行 打包 启动作业 MapReduce的Web界面 获取结果 作业调试 使用远程调试器 作业调优 分析任务 MapReduce的工作流 将问题分解成MapReduce作业 运行独立的作业 第6章 MapReduce的工作机制 剖析MapReduce作业运行机制 作业的提交 作业的初始化 任务的分配 任务的执行 进度和状态的更新 作业的完成 失败 任务失败 tasktracker失败 jobtracker失败 作业的调度 Fair Scheduler Capacity Scheduler shuffle和排序 map端 reduce端 配置的调优 任务的执行 推测执行 重用JVM 跳过坏记录 任务执行环境 第7章 MapReduce的类型与格式 MapReduce的类型 默认的MapReduce作业 输入格式 输入分片与记录 文本输入 二进制输入 多种输入 数据库输入(和输出) 输出格式 文本输出 二进制输出 多个输出 延迟输出 数据库输出 第8章 MapReduce的特性 计数器 内置计数器 用户定义的Java计数器 用户定义的Streaming计数器 排序 准备 部分排序 总排序 二次排序 联接 map端联接 reduce端联接 边数据分布 利用JobConf来配置作业 分布式缓存 MapReduce库类 第9章 构建Hadoop集群 集群规范 网络拓扑 集群的构建和安装 安装Java 创建Hadoop用户 安装Hadoop 测试安装 SSH配置 Hadoop配置 配置管理 环境设置 Hadoop守护进程的关键属性 Hadoop守护进程的地址和端口 Hadoop的其他属性 创建用户帐号 安全性 Kerberos和Hadoop 委托令牌 其他安全性改进 利用基准测试程序测试Hadoop集群 Hadoop基准测试程序 用户的作业 云上的Hadoop Amazon EC2上的Hadoop 第10章 管理Hadoop HDFS 永久性数据结构 安全模式 日志审计 工具 监控 日志 度量 Java管理扩展(JMX) 维护 日常管理过程 委任节点和解除节点 升级 第11章 Pig简介 安装与运行Pig 执行类型 运行Pig程序 Grunt Pig Latin编辑器 示例 生成示例 与数据库比较 PigLatin 结构 语句 表达式 1.4.4 类型 模式 函数 用户自定义函数 过滤UDF 计算UDF 加载UDF 数据处理操作 加载和存储数据 过滤数据 分组与连接数据 对数据进行排序 组合和分割数据 Pig实战 并行处理 参数代换 第12章 Hive 1.1 安装Hive 1.1.1 Hive外壳环境 1.2 示例 1.3 运行Hive 1.3.1 配置Hive 1.3.2 Hive服务 1.3.3 Metastore 1.4 和传统数据
近几年,云计算产业飞速发展,大数据处理技术也在不断成熟。与此同时,国内移动互联网市场规模不断扩大,用户数量已经超过5亿,并带来了海量的移动互联网流量数据。在此背景下,如何基于云计算大数据处理技术来承载海量网络数据处理业务,是一个非常有研究价值的课题。从移动互联网的现状来看,一方面移动数据流量猛增,给运营商带来了巨大的运营压力,需要其投入更多的资金来进行网络建设与升级,另一方面由于移动数据业务增长,传统的语音短信等业务出现下滑,导致运营商出现增量不增收的现状。因此研究如何使用通过流量通道获取到的海量移动互联网数据流量资源,对于电信运营商有着十分重大的意义。针对移动互联网流量数据的特性,本文对基于Hadoop的海量网络数据处理平台的关键技术进行了深入研究。具体来说,本文的主要研究内容和创新点如下: 1.提出了一种针对移动互联网的海量数据处理架构针对移动互联网中海量网络数据处理业务的特点和存在的问题进行相关研究,提出了一种承载海量网络数据处理业务的分布式数据采集、存储和分析的安全云计算平台架构。整个平台包含数据采集,数据存储,数据处理及流量安全检测四个部分,可以完美解决移动互联网流量数据从数据的采集到最后的数据处理这一业务流程,通过引入云计算技术实现了对海量数据的存储及高效的数据处理,并基于云计算技术进行快速的异常流量检测来提高该平台的安全性。通过实验和具体的实际应用证明了该架构的可行性,且优化技术的应用对于提高海量网络数据处理业务的服务质量和安全性都有着明显的效果,后续基于该平台架构对其中的关键技术进行深入研究。 2.提出了一种基于分布式故障检测机制的高可靠数据采集框架数据采集是海量网络数据处理业务的首要工作,只有保证采集数据的完整和可信,后续进行的数据处理工作结果才有意义和价值。因此本文首先针对当前移动互联网流量数据采集的技术特点和难点进行了详细分析,包括分布式、高动态性、采集终端多样性、节点异构等等,然后针对这些数据采集的难度问题,本文引入了分布式网络故障检测技术,设计了一种适合移动互联网网络流量数据采集机制的分布式节点监控框架,该框架中提出了应用于数据采集的节点故障检测与处理算法和节点负载均衡算法,实现对海量网络数据采集框架的节点进行实时监控,并提供快速高效的故障检测机制,避免数据丢失。同时,该算法还实现了对节点的负载进行动态均衡,防止某些节点出现负载过重的情况。实验结果表明,该分布式节点监控框架,能够实现采集节点故障检测的快速处理和节点负载的动态均衡,保障移动互联网流量数据采集的可靠性和完整性。 3.提出了一种异构环境下的高效数据存储机制针对当前基于Hadoop的海量网络数据处理平台中数据存储问题,本文对分布式数据存储技术进行深入研究,并结合服务器性能评估技术提出了一种适用于异构环境下的高效数据存储算法。该算法在存储数据时引入节点的性能参数,并将节点间的数据块分布与节点性能相关联。一方面,该算法可以提高大数据的读写效率,另一方面可以提高后续数据处理作业的运行速率,提高数据本地化的任务比率。最后实验证明,该算法可以有效地提高存储空间利用率和异构云计算集群的数据处理性能。 4.提出了一种基于节点动态性能推断的任务分配算法海量网络数据的处理分析是海量网络数据处理平台最为核心的功能,数据处理的效率关系到整个海量网络数据处理平台的性能,因此对于该平台数据处理性能的优化是本文需要考虑的关键问题。当前,在构建云平台时,需要根据需求对云平台的硬件进行逐步扩容和升级,因此集群往往存在着硬件异构的情况。默认的数据处理计算主要是针对同构集群设计,在异构集群中性能会有很大程度的降低。因此结合当前海量网络数据处理平台的集群现状,本文研究并设计一种基于节点动态性能推断的任务分配算法。首先该算法在主节点中引入了节点动态性能推断模块,该模块采用基于指数平滑预测法实现对该集群中运行的作业历史数据学习分析,从而计算出集群中各个节点的计算能力。然后本文结合集群节点的性能指标对Reduce任务分配算法和推测性任务执行机制进行改进,实现集群可以动态选择最佳节点来运行数据处理任务。实验结果表明该算法可以有效地提高异构集群数据处理性能和集群的稳定性,减少异构集群的计算资源浪费,提高了云计算平台的资源利用率。5.一种基于分类器联合的分布式异常流量检测算法海量网络数据处理平台中存在着大量的实时数据流,该数据具有价值高、流量大等特点。同时,云计算平台本身具有强大的计算能力和存储资源,极易成为黑客的攻击目标。而云计算的环境极其复杂和多样化,具有跨地域、异构化、虚拟化等特点,使用传统的网络安全防御技术已经无法满足云计算的信息安全防御需求。因此在传统网络安全防御技术的基础上,本文需要进一步加强云平台的安全保障。针对当前海量网络数据处理平台的业务特点,本文对异常流量检测技术和云计算技术的结合进行了相关研究,提出了一种基于云计算技术的分类器联合检测算法。该算法联合了无监督的模糊K-均值分类算法和有监督的朴素贝叶斯分类算法,有效地避免单一分类算法在检测大流量数据时的缺陷,更为全面地对网络流量进行异常检测。同时,本文基于Mahout技术实现了这两个分类算法在MapReduce框架上的海量数据流的分类计算,极大地提高了异常流量检测的效率。最后通过实验证明,基于分类器联合的分布式异常流量检测算法可以快速有效地对海量网络数据流进行检测,并保持较高的检测准确率和较低的误报率。该算法可以有效地提高云平台的安全性,是对云平台网络安全防御体系的有效补充。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值