vlambda博客
学习文章列表

你应该知道Tez比MapReduce好用

你应该知道Tez比MapReduce好用

1、什么是Tez?

Tez是Hontonworks开源的支持DAG作业的计算框架,它可以将多个有依赖的作业转换为一个作业从而大幅提升MapReduce作业的性能。Tez并不直接面向最终用户,事实上它允许开发者为最终用户构建性能更快、扩展性更好的应用程序。

2、TEZ引擎特性

根据Apache TEZ官网的介绍,主要有以下几个新特性:

  • 任务抢占,即可通过资源抢占的方式,让优先级更高的任务优先运行。

  • 任务执行断点检查。通过对任务执行过程记录断点,可在任务失败时从断点恢复运行,以避免任务重算。这个功能实现的难度不小,就从当前YARN的设计架构而言,只能做到已经完成的任务不重新计算,对于正在运行的任务需要重新开始计算。

  • Container重用
    首先理解一下概念:Container也就是容器,容器中封装了大数据机器资源,如内存,CPU,磁盘,网络等,每个任务(Task)会被分配一个容器,该任务只能在该容器中执行,并使用该容器封装的资源。

    重用主要涉及两个方面:一方面,同一个应用程序的多个任务可重用一个Container,该功能是一个非常重要的Feature,这样就不会像MR频繁的申请导致执行时间变长。另一方面,不同应用程序的Container重用,即不同应用程序的多个任务可重用一个Container。

3、Tez和MapReduce哪个好用

先说结论:Tez比MR好太多,至少快5倍

【基于MR的Job】

你应该知道Tez比MapReduce好用

  • 在YARN中,每个作业的AM会先向RM申请资源(Container),申请到资源之后开始运行作业,作业处理完成后释放资源,期间没有资源重新利用的环节。这样会使作业大大的延迟。

  • 基于MR的Hive/Pig的DAG数据流处理过程”,可以看出图中的每一节点都是把结果写到一个中间存储(HDFS/S3)中,下个节点从中间存储读取数据,再来继续接下来的计算。可见中间存储的读写性能对整个DAG的性能影响是很大的。

【基于Tez的Job】

你应该知道Tez比MapReduce好用


  • 使用Tez后,yarn的作业不是先提交给RM了,而是提交给AMPS。

  • AMPS在启动后,会预先创建若干个AM,作为AM资源池,当作业被提交到AMPS的时候,AMPS会把该作业直接提交到AM上,这样就避免每个作业都创建独立的AM,大大的提高了效率。

  • AM缓冲池中的每个AM在启动时都会预先创建若干个container,以此来减少因创建container所话费的时间。每个任务运行完之后,AM不会立马释放Container,而是将它分配给其它未执行的任务。

【Tez实操】

网上安装Tez的资料简直能眼膜人,就不在这里赘述了,学会google。

  • 安装好Tez之后启动hive,随意写一个sql即可

你应该知道Tez比MapReduce好用

  • 打开web端查看任务,如下图所示,可以看出引擎已经变成了Tez。

你应该知道Tez比MapReduce好用

总结

  • MR计算,会对磁盘进行多次的读写操作,这样启动多轮job的代价略有些大,不仅占用资源,更耗费大量的时间。

  • 采用TEZ计算框架,就会生成一个简洁的DAG作业,算子跑完不退出,下轮继续使用上一轮的算子,这样大大减少磁盘IO操作,从而计算速度更快。

  • TEZ比MR至少快5倍。

个人心得

  • TEZ执行引擎的问世,可以帮助我们解决现有MR框架的一些不足,另外,TEZ是基于YARN的,所以可以与原有的MR共存,不会相互冲突。
  • 工作中,我们只需在hadoop-env.sh文件中配置TEZ的环境变量,并在mapred-site.xml设置执行作业的架构为yarn-tez,这样在YARN上运行的作业就会跑TEZ计算模式,所以原有的系统接入TEZ很便捷。



PS: 另外,笔者刚建了个学习交流群,禁广告、推广,大家有啥问题也可以在群里提问,有需要的小伙伴可以加一下~

加群方式 - 扫描下方👇笔者二维码,备注:大数据