hive配置tez引擎(最管用直插)
-
多次入坑最终总结出了经验
-
tez相比MapReduce而言少了中间阶段向hdfs持久化的过程,多作业转化为单作业,只需要一次hdfs,提升计算性能。
集群
- 我的集群比较复杂,基本所有情况都涵盖了,所以大家放心大胆来吧。
- 罗列一些相关的服务供参考
组件 | 服务 | master | slave1 | slave2 | slave3 | slave4 |
---|---|---|---|---|---|---|
hdfs | namenode | √ | √ | |||
zookeeper | QuorumPeerMain | √ | √ | √ | √ | √ |
HIVE | RunJar:hive开启监听服务 | 客户端 | 服务 | |||
mysql | √ |
刚开始情况比较复杂,还想了很多,针对我的情况最终结论就是,只要节点是hadoop集群的一个节点,那么就在这个节点配置你的hive就行,也就是任意,因为你不可能不存在集群中的。
- hive1.2.1
- tez0.9.1
开始吧↓↓↓
-
解压缩apache-tez-0.9.1-bin.tar.gz
$ tar -zxvf apache-tez-0.9.1-bin.tar.gz
-
修改名称
$ mv apache-tez-0.9.1-bin/ tez-0.9.1
-
进入到Hive的配置目录:/opt/apps/hive/conf
$ vi hive-env.sh添加以下内容
export TEZ_HOME=/opt/apps/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/apps/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar$TEZ_JARS
目的是将tez下的所有jar包引到你的hive的lib下,启动hive需要加载
-
在hive-site.xml文件中添加如下配置,更改hive计算引擎
<property> <name>hive.execution.engine</name> <value>tez</value> </property>
-
在Hive的/opt/apps/hive/conf下面创建一个tez-site.xml文件
添加如下内容
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>tez.lib.uris</name> <value>${fs.defaultFS}/tez/tez-0.9.1,${fs.defaultFS}/tez/tez-0.9.1/lib</value> </property> <property> <name>tez.lib.uris.classpath</name> <value>${fs.defaultFS}/tez/tez-0.9.1,${fs.defaultFS}/tez/tez-0.9.1/lib</value> </property> <property> <name>tez.use.cluster.hadoop-libs</name> <value>true</value> </property> <property> <name>tez.history.logging.service.class</name> <value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService</value> </property> </configuration>
相当于你的tez引擎直接在集群共享
-
上传Tez到集群
将/opt/apps/tez-0.9.1上传到HDFS的/tez路径
$ hadoop fs -mkdir /tez
$ hadoop fs -put /opt/module/tez-0.9.1/ /tez
$ hadoop fs -ls /tez
/tez/tez-0.9.1
测试
-
激动人心的测试环节
-
启动Hive
$ bin/hive
-
建表等等…复杂操作出箭头,完美
-
- 集群复杂,就这么行云流水?
BUG:
-
上面就可以成功,那么因为我们是模拟集群,资源不同,环境不同,会有以下问题
- 丢包,缺包
Exception in thread "main" java.lang.RuntimeException: org.apache.tez.dag.api.SessionNotRunning: TezSession has already shutdown
- **原因**:环境变量问题导致前面配置的脚本失效
- **解决**:将tez根目录的所有jar包和tez/lib下的所有jar包拷贝到hive的/lib下---解决
- 资源不够
- **原因**:运行Tez时检查到用过多内存而被NodeManager杀死进程问题:
这种问题是从机上运行的Container试图使用过多的内存,而被NodeManager kill掉了。
- **解决**:**解决方法:**
方案一:或者是关掉虚拟内存检查。我们选这个,修改yarn-site.xml(集群所有)
```
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
```
- 最后:
还是成功滴
更多hive及其数据仓库学习,尽在博客之中