Hive On LLAP搭建&常见问题
Hive On LLAP搭建&常见问题
基本概述
Hive在2.0之后,推出一个新特性LLAP(Live Long And Process),可以显著提高查询效率。
LLAP是一个常驻于Yarn的进程,并不是一个执行引擎,它将DataNode数据预先缓存到内存中,然后交由DAG引擎进行查询、处理任务使用。部分查询、权限控制将由LLAP执行,短查询任务的结果会很快的返回。
相对于Hive 1.x,提升大约25倍的性能。
安装准备
Apache Slider安装
LLAP需要常驻于Yarn之上,所以需要提前安装Apache Slider。当然,在Hadoop 3.x中,Yarn已经支持常驻任务的运行,就不需要对Apache Slider进行安装了。
首先下载Slider,如果网速较慢,可以先从Github中下载zip包,再上传到服务器进行解压。
git clone https://github.com/apache/incubator-retired-slider/tree/branches/branch-0.90.2
这里将slider安装包放置到/opt/frames/目录下,然后对安装包进行解压。
因为编译过程需要maven,所以使用脚本对maven进行安装。
# 进入自动化脚本安装目录cd /home/hadoop/automaticDeploy/# 编辑frames.txt,添加maven配置apache-maven-3.6.3-bin.tar.gz true# 使用脚本安装maven./systems/configureMaven.sh # 初始化环境变量source /etc/profile# 查看是否安装成功mvn --version
进入到Slider源码目录下,进行编译。
# 进入slider源码目录cd apache-slider-0.90.2-incubating/# 进行编译mvn clean site:site site:stage package -DskipTests
解压编译后的文件。
mkdir /opt/app/slider/tar -zxvf slider-assembly/target/slider-0.90.2-incubating-all.tar.gz -C /opt/app/slider/
编辑conf/slider-env,添加环境变量。
# 进入slider安装目录cd /opt/app/slider/slider-0.90.2-incubating# 编辑conf/slider-env,添加以下内容export JAVA_HOME=${JAVA_HOME}export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop/
编辑conf/slider-client.xml,指定Zookeeper地址,Zookeeper稍后使用脚本进行安装,这里提前规定它安装到node01、node02、node03节点。
<property><name>hadoop.registry.zk.quorum</name><value>node01:2181,node02:2181,node03:2181</value></property>
将Slider添加到PATH环境变量中。
vim /etc/profile# 配置环境变量export SLIDER_HOME=/opt/app/slider/slider-0.90.2-incubatingexport PATH=$PATH:$SLIDER_HOME/bin# 配置完成后,初始化环境变量source /etc/profile
查看是否配置成功。
slider version
Zookeeper安装
因为Slider依赖Zookeeper,所以需要在各个节点提前进行安装。这里直接使用脚本来完成。
首先进入脚本目录,分别在node01、node02、node03中编辑frames.txt配置文件,添加zookeeper的安装信息。
cd /home/hadoop/automaticDeploy/vim frames.txt# 添加如下信息zookeeper-3.4.10.tar.gz true node01,node02,node03
然后将zookeeper-3.4.10.tar.gz安装包上传到各节点的/opt/frames目录下,如果使用frames.zip包,则安装包已经在对应目录中。这里也可以安装其它版本,自行更改配置即可。
在node01、node02、node03上调用脚本进行一键安装。
/home/hadoop/automaticDeploy/hadoop/installZookeeper.sh
然后初始化环境变量即可。
source /etc/profile
因为启动时需要在各个节点执行启动命令,为了方便起见,使用脚本安装Zookeeper后,启动命令已经被封装为脚本zookeeper.sh,在任意一台节点执行便可以一键完成Zookeeper集群的启停:
# 在任意一台节点执行即可zookeeper.sh start
环境搭建
首先编辑hive-site.xml,配置LLAP,这里hive.llap.daemon.service.hosts配置为运行在yarn上的LLAP服务名,这里可以自定义设置,但要与下一步中使用hive命令生成的LLAP环境包中的服务名一致。
<property> <name>hive.zookeeper.quorum</name> <value>node01:2181,node02:2181,node03:2181</value></property> <property> <name>hive.execution.mode</name> <value>llap</value></property><property> <name>hive.llap.execution.mode</name> <value>all</value></property><property> <name>hive.llap.daemon.service.hosts</name> <value>@llap_server</value></property>
然后,使用Hive命令生成LLAP环境包,它包含LLAP运行所需依赖、LLAP启动脚本。其中–name参数指定的便是LLAP服务名。
# 使用命令生成的llap环境包会存放在当前目录中# 所以提前进入/opt/app目录,避免llap环境包生成到其它目录cd /opt/app# instances指定节点数量;executors指定每个节点执行器数量# iothread指定实例的IO线程数# size指定container内存大小# xmx指定container JVM堆大小hive --service llap --name llap_server --instances 2 --cache 512m --executors 2 --iothreads 2 --size 1024m --xmx 512m --loglevel INFO --args "-XX: UseG1GC -XX: ResizeTLAB -XX: UseNUMA -XX:-ResizePLAB -XX:MaxGCPauseMillis=200" --javaHome $JAVA_HOME
在运行前,需要在各个节点确认关闭python的ssl功能,避免因为在集群中进行https校验,而导致llap从节点无法向主节点汇报心跳而关闭。
vim /etc/python/cert-verification.cfg # 确保以下参数为disable[https]verify=disable
然后,因为llap使用的执行引擎为tez,而当前安装的tez-0.9.1版本自带的hadoop依赖为2.7.0,集群hadoop版本为2.7.7,所以在执行SQL时会抛出异常:
org.apache.hadoop.tracing.SpanReceiverHost.getInstance(Lorg/apache/hadoop/conf/Configuration;)Lorg/apache/hadoop/tracing/SpanReceiverHost;
这是因为hadoop 2.7.3中更改了SpanReceiverHost.getInstance方法而导致的,所以,需要替换掉llap中的tez依赖(如果使用更高版本的tez,则不需要进行替换):
# 进入生成的llap目录中,这里以llap-slider-20Jan2021为例cd llap-slider-20Jan2021/# 解压llap依赖包unzip llap-20Jan2021.zip -d unzippedcd unzipped/package/filestar -zxvf llap-20Jan2021.tar.gz# 替换Hadoop Jar包cd lib/tezcp ../hadoop-common-2.7.7.jar ./cp /opt/app/hadoop-2.7.7/share/hadoop/common/lib/hadoop-annotations-2.7.7.jar ./cp /opt/app/hadoop-2.7.7/share/hadoop/common/lib/hadoop-auth-2.7.7.jar ./cp /opt/app/hadoop-2.7.7/share/hadoop/hdfs/hadoop-hdfs-2.7.7.jar ./cp /opt/app/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-client-common-2.7.7.jar ./cp /opt/app/hadoop-2.7.7/share/hadoop/yarn/hadoop-yarn-api-2.7.7.jar ./rm -rf hadoop-common-2.7.0.jar hadoop-annotations-2.7.0.jar hadoop-auth-2.7.0.jar hadoop-hdfs-2.7.0.jar hadoop-mapreduce-client-common-2.7.0.jar hadoop-yarn-api-2.7.0.jar # 返回到llap-slider-20Jan2021/unzipped/package/files目录cd ../../# 删除旧的压缩包rm -rf llap-20Jan2021.tar.gz # 重新打包tar -zcvf llap-20Jan2021.tar.gz *# 删除旧的文件rm -rf bin conf config.json lib# 返回到llap-slider-20Jan2021/unzipped目录cd ../../# 将unzipped文件重新打包zip -r llap-20Jan2021.zip *# 拷贝到原目录中覆盖旧的zip包rm -rf ../llap-20Jan2021.zipcp llap-20Jan2021.zip ../# 回到llap-slider-20Jan2021目录,删除unzipped目录rm -rf unzipped/
在启动LLAP前,保证zookeeper已经启动,否则会报错:
2021-01-21 07:08:36,668 [main-SendThread(node02:2181)] WARN zookeeper.ClientCnxn - Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnectException in thread Thread-2:Traceback (most recent call last): File "/usr/lib64/python2.7/threading.py", line 811, in __bootstrap_inner self.run() File "/usr/lib64/python2.7/threading.py", line 764, in run self.__target(*self.__args, **self.__kwargs) File "/opt/app/slider/slider-0.90.2-incubating/bin/slider.py", line 172, in print_output (line, done) = read(src, line) File "/opt/app/slider/slider-0.90.2-incubating/bin/slider.py", line 149, in read o = c.decode('utf-8') File "/usr/lib64/python2.7/encodings/utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True)UnicodeDecodeError: 'utf8' codec can't decode byte 0xe6 in position 0: unexpected end of data
最后,进入到生成的llap目录中,执行run.sh。
# 这里,生成的llap目录为llap-slider-20Jan2021cd llap-slider-20Jan2021/./run.sh
llap运行后,可以在yarn监控节点看到运行的task进程。
在各个节点上使用 jps 命令进行查看,可以找到SliderApplicationMaster进程,还有两个LlapDaemon守护进程,说明已经成功运行。
可以使用命令停止llap。
slider stop llap_server
也可以使用hive命令查看llap状态。
hive --service llapstatus --name llap_server
最后,创建表,并插入数据,看是否执行成功。
create table llap_test (id int ,name string);insert into llap_test values(1, 'zs');
后话
至此,LLAP已经搭建完成,如果有帮助的,记得点赞、关注。在公众号《数舟》中,回复【10124】获取当前PDF版手册,也可以免费获取专栏《数据仓库》配套的视频课程、大数据集群自动安装脚本,并获取进群交流的途径。
我所有的大数据技术内容也会优先发布到公众号中。如果对某些大数据技术有兴趣,但没有充足的时间,在群里提出,我为大家安排分享。
公众号自取: