Hive运行引擎Tez

文章目录

    • tez是什么
    • 安装
      • 1.下载地址
      • 2.安装目录
      • 3.hive中配置tez
    • 测试
    • 问题总结
        • 1.Tez运行时检查到用过多内存而被NodeManager杀死进程
        • 2.解决方案

tez是什么

Tez是一个Hive的运行引擎,性能优于MR。为什么优于MR呢?看下图。
Hive运行引擎Tez_第1张图片

用Hive直接编写MR程序,假设有四个有依赖关系的MR作业,上图中,绿色是Reduce Task,云状表示写屏蔽,需要将中间结果持久化写到HDFS。Tez可以将多个有依赖的作业转换为一个作业,这样只需写一次HDFS,且中间节点较少,从而大大提升作业的计算性能。

安装

前提先部署好hadoop与hive的运行环境并能够正确的运行,至于原因大家都懂。

1.下载地址

http://tez.apache.org # apache-tez-0.9.1-bin.tar.gz

2.安装目录

#tez的解压目录
/opt/module/tez-0.9.1
#hive安装目录
/opt/module/hive-1.2.1

3.hive中配置tez

  • hive-env.sh
vi hive-env.sh
# 添加如下配置
# Set HADOOP_HOME to point to a specific hadoop install directory
export HADOOP_HOME=/opt/module/hadoop-2.7.2

# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/opt/module/hive/conf

# Folder containing extra libraries required for hive compilation/execution can be controlled by:
export TEZ_HOME=/opt/module/tez-0.9.1    #是你的tez的解压目录
export TEZ_JARS=""
for jar in `ls $TEZ_HOME |grep jar`; do
    export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/$jar
done
for jar in `ls $TEZ_HOME/lib`; do
    export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/lib/$jar
done

export HIVE_AUX_JARS_PATH=/opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar$TEZ_JARS

这一步在hive-env.sh文件中添加tez环境变量配置和依赖包环境变量配置

  • hive-site.xml
<property>
    <name>hive.execution.enginename>
    <value>tezvalue>
property>

更改hive计算引擎

  • tez-site.xml(conf目录下需要自己创建)


<configuration>
<property>
    
	<name>tez.lib.urisname>
    <value>${fs.defaultFS}/tez/tez-0.9.1,${fs.defaultFS}/tez/tez-0.9.1/libvalue>
property>
     
<property>
	<name>tez.lib.uris.classpathname>    		 <value>${fs.defaultFS}/tez/tez-0.9.1,${fs.defaultFS}/tez/tez-0.9.1/libvalue>
property>
<property>
     <name>tez.use.cluster.hadoop-libsname>
     <value>truevalue>
property>
<property>
     <name>tez.history.logging.service.classname>        <value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingServicevalue>
property>
configuration>
  • 上传文件
 # 注意和上述xml中的路径一致
 hadoop fs -put /opt/module/tez-0.9.1/ /tez

测试

  • 启动hive执行查询检测结果

问题总结

1.Tez运行时检查到用过多内存而被NodeManager杀死进程

[pid=11116,containerID=container_1546781144082_0005_02_000001] is running beyond virtual memory limits. Current usage: 216.3 MB of 1 GB physical memory used; 2.6 GB of 2.1 GB virtual memory used. Killing container.

tez将mr基于磁盘的计算转换成基于内存的计算,那么会导致机器上运行的Container试图使用过多的内存,而被NodeManager kill掉了。

2.解决方案

  • 关闭内存检查

    修改yarn-site.xml(实际生产不推荐)

<property>
	<name>yarn.nodemanager.vmem-check-enabledname>
	<value>falsevalue>
property>
  • 修改MR任务的内存配置

    修改mapred-site.xml(根据实际情况)

<property>
  <name>mapreduce.map.memory.mbname>
  <value>1536value>
property>
<property>
  <name>mapreduce.map.java.optsname>
  <value>-Xmx1024Mvalue>
property>
<property>
  <name>mapreduce.reduce.memory.mbname>
  <value>3072value>
property>
<property>
  <name>mapreduce.reduce.java.optsname>
  <value>-Xmx2560Mvalue>
property>

你可能感兴趣的:(#,Hive,hive,hadoop,大数据,hdfs)