Tez上线部署记录

本文详细记录了Hive on Tez的上线部署过程,包括适用场景、使用方法以及遇到的挑战。在Tez中,Map和Reduce任务可以独立,提升了运算效率,特别适合多阶段Reduce和多路Join操作。在实际部署中,遇到了容器初始化失败的错误,原因是垃圾回收器设置冲突。此外,还讨论了一个诡异的问题:文件时间戳不一致导致的资源下载失败,通过忽略时间戳差异解决了问题。最后,提出了Tez作业resource分发原理和会话超时两个待研究问题。
摘要由CSDN通过智能技术生成
前言:

        Tez在Hive 0.13.0版本引入,全称Hive on Tez。顾名思义就是基于Tez之上的运行Hive作业的形式。具体Tez是什么?Tez是一种运算框架,MapReduce是一种运算框架,这么说应该懂了。

更具体的讲,Tez是一种内存运算框架,类似Spark的核心——RDD。

        正如刚才提到的Tez类似RDD的特性,适用于DAG运算,多路并行聚合运算,迭代运算。得益于Tez采用Map,Reduce分离的执行策略,传统意义的MapReduce作业,Map和Reduce不可分离,必须成对出现,缺一不可。这在不需要Map环节的作业中会耗费不少的内存和IO开销——这里的IO指磁盘和内存之间。同时这也拖曳了Map和Reduce之间的并行度。

        然而Tez就完全不一样了,Tez通过把MapReduceWork分解成MapWork和ReduceWork,这个过程中抛弃了不必要的MapWork。

        就像这样:

Flow for a Hive or Pig Query on Tez

          可以看到,过程中没有Map了,这样的形式,我们称为MRR。

          更为重要的一点,基于内存模式,任何中间数据不再flush到磁盘,全程在内存当中,IO和CPU之间不再有瓶颈。

适用场景:

          简单点说就是,任何复杂语句,任何长语句。具体一点就是下面场景:

  • MRR 多阶段的Reduce操作。
  • MPJ 多路Join操作。

使用方法:

         在你的执行语句中加上以下参数即可:

set hive.execution.engine=tez;
set mapreduce.reduce.java.opts=-Xmx1536m -verbose:gc -Xloggc:/opt/hadoop/bfdhadoop26/logs/hadoop/ @taskid @.gc;
set mapreduce.map.java.opts=-Xmx1536m -verbose:gc -Xloggc:/opt/hadoop/bfdhadoop26/logs/hadoop/ @taskid @.gc;

踩坑记录:

        在运行时,报错:

2015 - 04 - 20  10 : 19 : 59 , 437  WARN org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: Exception from container-launch with container ID: container_1429505171727_0001_02_000001 and exit code: - 1
ExitCodeException exitCode=- 1 :
     at org.apache.hadoop.util.Shell.runCommand(Shell.java: 538 )
     at org.apache.hadoop.util.Shell.run(Shell.java: 455 )
     at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java: 702 )
     at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java: 195 )
     at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java: 300 )
     at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java: 81 )
     at java.util.concurrent.FutureTask.run(FutureTask.java: 262 )
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1145
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值