多次入坑最终总结出了经验
tez相比MapReduce而言少了中间阶段向hdfs持久化的过程,多作业转化为单作业,只需要一次hdfs,提升计算性能。
刚开始情况比较复杂,还想了很多,针对我的情况最终结论就是,只要节点是hadoop集群的一个节点,那么就在这个节点配置你的hive就行,也就是任意,因为你不可能不存在集群中的。
hive1.2.1tez0.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
建表等等…复杂操作出箭头,完美
集群复杂,就这么行云流水?上面就可以成功,那么因为我们是模拟集群,资源不同,环境不同,会有以下问题
丢包,缺包 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及其数据仓库学习,尽在博客之中
