Apache Tez

1、参考
http://dongxicheng.org/mapreduce-nextgen/apache-tez/

Tez(Hortonworks介绍:这里,源代码下载:这里,今天刚刚发布的源代码)是Apache最新开源的支持DAG作业的计算框架,它直接源于MapReduce框架,核心思想是将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,这样,这些分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业。
Tez可以将多个有依赖的作业转换为一个作业(这样只需写一次HDFS,且中间节点较少),从而大大提升DAG作业的性能。Tez已被Hortonworks用于Hive引擎的优化,经测试,性能提升约100倍

【Tez实现】
Tez对外提供了6种可编程组件,分别是:
(1)Input:对输入数据源的抽象,它解析输入数据格式,并吐出一个个Key/value
(2)Output:对输出数据源的抽象,它将用户程序产生的Key/value写入文件系统
(3)Paritioner:对数据进行分片,类似于MR中的Partitioner
(4)Processor:对计算的抽象,它从一个Input中获取数据,经处理后,通过Output输出
(5)Task:对任务的抽象,每个Task由一个Input、Ouput和Processor组成
(6)Maser:管理各个Task的依赖关系,并按顺依赖关系执行他们
除了以上6种组件,Tez还提供了两种算子,分别是Sort(排序)和Shuffle(混洗),为了用户使用方便,它还提供了多种Input、Output、Task和Sort的实现,具体如下:
(1)Input实现:LocalMergedInput(文件本地合并后作为输入),ShuffledMergedInput(远程拷贝数据且合并后作为输入)
(2)Output实现:InMemorySortedOutput(内存排序后输出),LocalOnFileSorterOutput(本地磁盘排序后输出),OnFileSortedOutput(磁盘排序后输出)
(3) Task实现:RunTimeTask(非常简单的Task,基本没做什么事)
(4)Sort实现:DefaultSorter(本地数据排序),InMemoryShuffleSorter(远程拷贝数据并排序)
为了展示Tez的使用方法和验证Tez框架的可用性,Apache在YARN MRAppMaster基础上使用Tez编程接口重新设计了MapReduce框架,使之可运行在YARN中。为此,Tez提供了以下几个组件:
(1)Input:SimpleInput(直接使用MR InputFormat获取数据)
(2)Output:SimpleOutput(直接使用MR OutputFormat获取数据)
(3)Partition:MRPartitioner(直接使用MR Partitioner获取数据)
(4)Processor:MapProcessor(执行Map Task),ReduceProcessor(执行Reduce Task)
(5)Task:FinalTask,InitialTask,initialTaskWithInMemSort,InitialTaskWithLocalSort ,IntermediateTask,LocalFinalTask,MapOnlyTask

MR任务
-D mapreduce.framework.name=yarn-tez
Hive任务
set hive.execution.engine=tez;

1、不使用 tez 默认为mr
select * from t_origin_ugc_stat_online where datecol = '2016-03-06' limit 100;
Time taken: 0.983 seconds, Fetched: 100 row(s)

select appid, count(distinct userid) as uv,count(1) as pv from t_origin_ugc_stat_online where datecol = '2016-03-06' group by appid order by pv desc limit 100;

分解为2个job
Total jobs = 2
Launching Job 1 out of 2

1000    578467  21582350
1001    188925  2394000
1002    39418   913989
2003    1665    23734
NULL    0       15
Time taken: 501.692 seconds, Fetched: 5 row(s)

2、使用tez
select * from t_origin_ugc_stat_online where datecol = '2016-03-06' limit 100;
Time taken: 0.917 seconds, Fetched: 100 row(s)

select appid, count(distinct userid) as uv,count(1) as pv from t_origin_ugc_stat_online where datecol = '2016-03-06' group by appid order by pv desc limit 100;

分解为1个job
Total jobs = 1
Launching Job 1 out of 1


Status: Running (Executing on YARN cluster with App id application_1456812439807_226211)

显示:
--------------------------------------------------------------------------------
        VERTICES      STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED
--------------------------------------------------------------------------------
Map 1 ...            RUNNING    261        104       37      120       0       0
Reducer 2            RUNNING     12          0        3        9       0       0
Reducer 3             INITED      1          0        0        1       0       0
--------------------------------------------------------------------------------
VERTICES: 00/03  [=========>>-----------------] 37%   ELAPSED TIME: 38.51 s   
--------------------------------------------------------------------------------

1000    578467  21582350
1001    188925  2394000
1002    39418   913989
2003    1665    23734
NULL    0       15
Time taken: 141.719 seconds, Fetched: 5 row(s)

3.5倍的速度差距!

猜你喜欢

转载自wangqiaowqo.iteye.com/blog/2281095
今日推荐