暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Hive On LLAP搭建&常见问题

数舟 2021-07-26
1034



什么是LLAP


Hive在2.0之后,推出一个新特性LLAP(Live Long And Process),可以显著提高查询效率。


LLAP是一个常驻于Yarn的进程,并不是一个执行引擎,它将DataNode数据预先缓存到内存中,然后交由DAG引擎进行查询、处理任务使用。部分查询、权限控制将由LLAP执行,短查询任务的结果会很快的返回。


相对于Hive 1.x,提升大约25倍的性能。


LLAP架构


本文PDF版手册,可以在文末查看获取方式,便于大家阅读。



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-incubating
                export 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

                          启动Zookeeper



                          环境搭建


                          首先编辑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 unzipped
                                    cd unzipped/package/files
                                    tar -zxvf llap-20Jan2021.tar.gz
                                    # 替换Hadoop Jar包
                                    cd lib/tez


                                    cp ../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.zip
                                    cp 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 reconnect
                                      Exception 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-20Jan2021
                                        cd llap-slider-20Jan2021/
                                        ./run.sh

                                        llap运行后,可以在yarn监控节点看到运行的task进程。


                                        LLAP运行情况


                                        在各个节点上使用 jps 命令进行查看。


                                        可以找到SliderApplicationMaster进程,还有两个LlapDaemon守护进程,说明已经成功运行。


                                        LLAP守护进程


                                        可以使用命令停止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版手册。


                                              如果有帮助的,记得点赞、关注,这里是数舟,我们下期再会!


                                              【大数据】那些简化操作的辅助脚本


                                              大数据一键安装脚本升级了!


                                              企业常用Hive SQL配置


                                              爆肝一周后,HUE也可以一键编译安装了?


                                              提了这么多年的面向对象,你真的懂它的含义吗?





                                              扫描二维码

                                              获取更多精彩

                                              数 舟



                                              文章转载自数舟,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                              评论