Hive的默认计算引擎是MR,但是mapreduce的速度实在是很慢,所以我们考虑将计算引擎更换为tez
Hadoop-2.7.4
hive-2.3.6
具体版本根据自己实际情况来
首先tez下载:tez版本请参考官网,我这里是下载的0.9.1
这需要jdk8或更高版本,还有maven3或更高版本
https://mirrors.tuna.tsinghua.edu.cn/apache/tez/0.9.1/
这是下载地址,需要注意的是一个是bin.tar.gz,一个是src.tar.gz,src是源码包,下载后需要编译,bin版本不需要
我这里下载的是bin的
下载完之后解压安装
tar -zxvf apache-tez-0.9.1-bin.tar.gz /解压目录
mv apache-tez-0.9.1-bin.tar.gz tez-0.9.1
然后进入Hive的安装目录
cd /app/hive-2.3.6/conf
vim hive-env.sh
#添加以下配置
# Set HADOOP_HOME to point to a specific hadoop install directory
export HADOOP_HOME=/app/hadoop-2.7.4 #这是你hadoop的安装目录
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/app/hive-2.3.6/conf #这是你hive配置文件的目录
# Folder containing extra libraries required for hive compilation/execution can be controlled by:
export TEZ_HOME=/app/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=/app/hadoop-2.7.4/share/hadoop/common/hadoop-lzo-0.4.20.jar$TEZ_JARS #这是引用的hadoop下的jar包路径
/app/hadoop-2.7.4/share/hadoop/common目录下一定要有hadoop-lzo-0.4.20.jar包不然会报错
没有的可以去网上下一个放到目录下面
然后再hive-site.xml中配置
hive.execution.engine
tez
或者你可以使用临时会话性的设置.
set hive.execution.engine=tez;
在hive的conf目录下创建一个tez-site.xml的文件
vim tez-site.xml
添加如下内容
<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>
然后上传tez到hdfs集群
现在hdfs创建文件夹
hadoop fs -mkdir /tez
hadoop fs -put /tez /tez-0.9.1/
hadoop fs -ls /tez
最后显示下面这个信息就正确了
/tez/tez-0.9.1
注意:/tez/tez-0.9.1一定要和上面tez-site.xml的tez.lib.uris路径对应起来
重启hadoop
启动hive…
create table student(
id int,
name string);
insert into student values(1,"zhangsan");
select * from student;
1 zhangsan
Caused by: org.apache.tez.dag.api.SessionNotRunning: TezSession has already shutdown. Application application_1546781144082_0005 failed 2 times due to AM Container for appattempt_1546781144082_0005_000002 exited with exitCode: -103
For more detailed output, check application tracking page:http://hadoop103:8088/cluster/app/application_1546781144082_0005Then, click on links to logs of each attempt.
Diagnostics: Container [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.
这种问题是从机上运行的Container试图使用过多的内存,而被NodeManager kill掉了。
方案一:或者是关掉虚拟内存检查。我们选这个,修改yarn-site.xml
<property>
<name>yarn.nodemanager.vmem-check-enabledname>
<value>falsevalue>
property>
方案二:mapred-site.xml中设置Map和Reduce任务的内存配置如下:(value中实际配置的内存需要根据自己机器内存大小及应用情况进行修改)
<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>
mapreduce.reduce.memory.mb 3072 mapreduce.reduce.java.opts -Xmx2560M ```