zoukankan      html  css  js  c++  java
  • apache开源项目 -- tez

    为了更高效地运行存在依赖关系的作业(比如Pig和Hive产生的MapReduce作业),减少磁盘和网络IO,Hortonworks开发了DAG计 算框架Tez。Tez是从MapReduce计算框架演化而来的通用DAG计算框架,可作为MapReduceR/Pig/Hive等系统的底层数据处理 引擎,它天生融入Hadoop 2.0中的资源管理平台YARN,且由Hadoop 2.0核心人员精心打造,势必将会成为计算框架中的后起之秀。本文将重点介绍Tez的最新进展。

    在阅读本文之前,读者可先阅读我之前写的三篇文章了解Tez有关背景、设计原理等:

    (1) 浅谈Apache Tez中的优化技术

    (2) Apache Tez:一个运行在YARN之上支持DAG作业的计算框架

    (3) Tez:运行在YARN上的DAG计算框架

    总结起来,Tez有以下几个特色:

    (1) 丰富的数据流(dataflow,NOT Streaming!)编程接口;

    (2) 扩展性良好的“Input-Processor-Output”运行模型;

    (3) 简化数据部署(充分利用了YARN框架,Tez本身仅是一个客户端编程库,无需事先部署相关服务)

    (4) 性能优于MapReduce

    (5)  优化的资源管理(直接运行在资源管理系统YARN之上)

    (6) 动态生成物理数据流(dataflow)

    声明:本文大部分内容源自Apache Tez官方主页中的说明文档,有兴趣的读者可进入http://tez.incubator.apache.org/了解更多内容,你也可以根据文档说明安装Tez(需要apache最新版本 2.1.0-beta或者3.0.0,CDH暂不支持,版本太老),进而对它有一个更加直观的理解。

    1. 优化举例

    为了方便大家理解Tez的优化效果,接下来给出两个例子 予以说明。

    (1)MRR*应用

    比如以下Hive SQL会翻译成两个MR作业,而采用Tez则生成一个DAG作业,可大大减少磁盘IO:

    SELECT DeptName, COUNT(*) as c FROM EmployeeTable GROUP BY DeptName ORDER BY c;

    (2)Join应用

    比如以下Hive SQL会翻译成四个MR作业,而采用Tez则生成一个DAG作业,可大大减少磁盘IO:

    SELECT a.state, COUNT(*), AVERAGE(c.price)

    FROM a

    JOIN b ON(a.id = b.id)

    JOIN c ON(a.itemId = c.itemId)

    GROUP BY a.state

    2. 术语介绍

    可类比数据库中的概念理解这些术语,比如数据库中的逻辑计划和物理计划:Job Vertex、Job Edge和Static Plan属于逻辑计划概念;Vertex、Edge和Dynamic Plan属于物理计划概念。

    (1)Job Vertex:作业规划中的一个阶段(Stage);

    (2) Job Edge:两个不同Job Vertex之间的逻辑关联;

    (3) Vertex: 运行时生成的物化阶段,由若干个可以执行的Task构成;

    (4) Edge: Task之间数据移动方式;

    (5) Task: 能够完成计算任务的线程,实际运行在YARN Container中;

    (6) Task cardinality: 任务基数,即Vertex产生的Task数目

    (7)  Static plan: 作业提交时确定的逻辑执行计划

    (8) Dynamic plan:在ApplicationMaster执行时产生的物理执行计划

    3. Tez中的通信类型

    (1) 1对于1

    第一阶段中的任务按照1:1的映射关系将数据传递给下一个阶段中的任务,典型应用是hash join,如下图所示:

    (2) 1对于N

    第一阶段中的每个任务会产生N份数据(N是下一个阶段中的任务数目),每份数据由下一个阶段的一个任务读取,这类似与MapReduce的Shuffle阶段,具体有两种实现方式:

    方式1:每个任务产生的N份数据放到N个文件中,供下一个阶段的任务直接获取,这种方式可能产生过多的文件,可能难以扩展到上千个任务的场景;

    方式2:每个任务产生的N份数据放放到一个文件中,并增加一个索引文件记录每份数据中偏移量,这种方式的扩展性非常好,Hadoop MapReduce正是采用了这种实现(设计之初,Hadoop MapReduce层采用方式1中的方案)。

    4. Tez新引入的优化机制

    (1) 动态确定任务基数

    DAG中每个Vertex需启动一定数目的任务并行处理对应的数据,Tez可根据用户设置的策略动态确定每个Vertex需启动的任务数,比如根据数据量、最大并发数等。

    (2)解决数据倾斜问题

    数据倾斜是分布式计算中影响数据处理效率的最大顽疾之一,很多工作在这方面开展但一直没有非常好的解决方案。目前看来,比较有效的方案是在应用程序层解决,即用户根据实际数据特点编写最有效的应用程序,尽可能避免数据倾斜问题。

    数据倾斜的一种典型场景是大批量的数据的key值是相同的,这使得按key划分数据后,大量数据落到一个任务上,从而使得该任务成为“拖后腿”任 务,甚至导致运行失败。为了解决该问题,在数据引擎层面,Tez可根据每个任务的处理数据量调整占用的资源,对于那些处理数据量大的任务,可多分配一些资 源。

    5. Tez未来发展

    在将来,Tez将增加以下几个特性:

    (1) 任务抢占,即可通过资源抢占的方式,让优先级更高的任务优先运行;

    (2) 任务执行断点检查,通过对任务执行过程记录断点,可在任务失败时从断点恢复运行,以避免任务重算(这个功能难度很大);

    (3) ApplicationMaster执行断点检查,这个可借鉴MapReduce ApplicationMaster实现,就目前YARN的架构设计而言,只能做到(ApplicationMaster失败后)已经完成的任务不重新计 算,对于正在运行的任务需重新计算;

    (4) 应用程序的Container重用,同一个应用程序的多个任务可重用一个Container中,该功能是一个非常重要的feature,很多YARN上框架都在做!

    (5)  不同应用程序的Container重用,即不同应用程序的多个任务可重用一个Container,这个功能难度较大!

    6. 参考资料

    (1)Tez官方网站:http://tez.incubator.apache.org/

    (2)Tez官方文档:https://issues.apache.org/jira/secure/attachment/12588887/Tez%20Design%20v1.1.pdf

    (3)Tez SVN:https://issues.apache.org/jira/browse/TEZ

    参考:

    http://dongxicheng.org/mapreduce-nextgen/apache-tez-newest-progress/

  • 相关阅读:
    用一次就会爱上的cli工具开发
    npm与package.json快速入门
    检查服务器端口状态
    浅谈数据库用户表结构设计
    CAP 定理的含义
    蓝绿部署、金丝雀发布(灰度发布)、A/B测试
    Dockerfile多阶段构建原理和使用场景
    Dockerfile 中的 CMD 与 ENTRYPOINT
    maven全局配置文件settings.xml详解
    Linux之根目录说明
  • 原文地址:https://www.cnblogs.com/haore147/p/5105262.html
Copyright © 2011-2022 走看看