在CDH6.3中单独升级Impala到Apache Impala 3.4

您所在的位置:网站首页 impala版本查看 在CDH6.3中单独升级Impala到Apache Impala 3.4

在CDH6.3中单独升级Impala到Apache Impala 3.4

2024-04-23 07:23| 来源: 网络整理| 查看: 265

1. 实验环境 一个CDH6.3.3集群,部署在三台Ubuntu16.04机器上 一台同样环境的Ubuntu16.04机器用来编译Apache Impala 3.4

CDH6.3.3对应的Impala基础版本是Apache Impala 3.2,当然还打了不少补丁。从Impala网页上能看到版本号是3.2.0-cdh6.3.3

2. 编译Apache Impala 3.4

Apache Impala是以源码的形式release的,因此需要自行在对应的平台上编译。找一个跟集群环境一致的机器,我这里是64位的ubuntu16.04。

根据文档中的“Building Impala without Test Data (for testing Impala)”章节来编译Impala: https://cwiki.apache.org/confluence/display/IMPALA/Building+Impala 所不同的是我们要编译的是3.4版本,不是最新的master分支,所以clone时要选好版本:

12git clone --single-branch --branch 3.4.0 https://github.com/apache/impala.git impala-3.4 cd impala-3.4

然后用 bin/bootstrap_system.sh 脚本来安装编译依赖:

12export IMPALA_HOME=`pwd` $IMPALA_HOME/bin/bootstrap_system.sh

如果之前在这台机器上编译过Impala,也可以跳过上面这一步。 接下来是 source 一下 impala-config.sh 设置环境变量

1source $IMPALA_HOME/bin/impala-config.sh

然后开始编译:

1$IMPALA_HOME/buildall.sh -noclean -notests

编译过程还要下载很多依赖,配好VPN速度会快很多。我这边编译大概花了一个小时,编译完后可以找到impalad可执行文件和impala-frontend的jar包:

12345$ ll -h be/build/latest/service/impalad fe/target/impala-frontend-0.1-SNAPSHOT.jar -rwxrwxr-x 1 quanlong quanlong 460M 6月  20 11:30 be/build/latest/service/impalad* -rw-rw-r-- 1 quanlong quanlong 7.5M 6月  20 11:33 fe/target/impala-frontend-0.1-SNAPSHOT.jar $ strings be/build/latest/service/impalad | grep 3.4.0 3.4.0-RELEASE

上面最后一条指令,应该可以在impalad可执行文件中找到 3.4.0-RELEASE 这样的字符串。impala默认使用静态编译,但还是有一些动态依赖,用 ldd 指令查看:

1234567891011121314151617181920212223$ ldd be/build/latest/service/impalad     linux-vdso.so.1 =>  (0x00007ffce6354000)     /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjsig.so (0x00007f95f07f2000)     libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f95f05d5000)     libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007f95f03ba000)     libjvm.so => /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so (0x00007f95ef465000)     libkudu_client.so.0 => /home/quanlong/workspace/impala-3.4/toolchain/kudu-4ed0dbbd1/debug/lib/libkudu_client.so.0 (0x00007f95eecf8000)     librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f95eeaf0000)     libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f95ee8ec000)     libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f95ee683000)     libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f95ee23e000)     libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f95edf6c000)     libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f95edd22000)     libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f95ed9a0000)     libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f95ed697000)     libgcc_s.so.1 => /home/quanlong/workspace/impala-3.4/toolchain/snappy-1.1.4/lib/libgcc_s.so.1 (0x00007f95ed481000)     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f95ed0b7000)     /lib64/ld-linux-x86-64.so.2 (0x00007f95f09f6000)     libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f95ece88000)     libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f95ecc84000)     libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f95eca79000)     libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f95ec875000)     libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f95ec65a000)

这些 so 文件大部分是系统自带的或者已安装的,我们只要复制跟Impala版本相关的就好,比如说 libkudu_client.so.0,其它的不需要一并复制。

注:Impala 3.4没法用Impala 3.2依赖的kudu client,因为在Impala 3.3开始支持kudu表的列注释,升级了依赖的Kudu client版本,具体见IMPALA-5351.

3. 部署研究

登到集群机器上,查看impalad、statestored、catalogd这些进程用的是哪些可执行文件,用类似 “ps aux | grep catalogd” 的指令可以找到它们的启动命令分别是:

123/opt/cloudera/parcels/CDH-6.3.3-1.cdh6.3.3.p0.1796617/lib/impala/sbin-retail/catalogd --flagfile=/var/run/cloudera-scm-agent/process/39-impala-CATALOGSERVER/impala-conf/catalogserver_flags /opt/cloudera/parcels/CDH-6.3.3-1.cdh6.3.3.p0.1796617/lib/impala/sbin-retail/statestored --flagfile=/var/run/cloudera-scm-agent/process/38-impala-STATESTORE/impala-conf/state_store_flags /opt/cloudera/parcels/CDH-6.3.3-1.cdh6.3.3.p0.1796617/lib/impala/sbin-retail/impalad --flagfile=/var/run/cloudera-scm-agent/process/37-impala-IMPALAD/impala-conf/impalad_flags

这里用的 flagfile 是CM生成的,我们不需要管,只需要让CM使用新的可执行文件就行了。我们来生成一个和 /opt/cloudera/parcels/CDH-6.3.3-1.cdh6.3.3.p0.1796617/lib/impala 目录结构一样的目录,然后通过在 CM 里设置 IMPALA_HOME 环境变量来使用它。目录结果如下:

123456789101112# ll /opt/cloudera/parcels/CDH-6.3.3-1.cdh6.3.3.p0.1796617/lib/impala total 52 drwxr-xr-x  9 root root  4096 Jan 20 05:42 ./ drwxr-xr-x 31 root root  4096 Jan 20 05:42 ../ drwxr-xr-x  2 root root  4096 Jan 20 05:20 bin/ drwxr-xr-x  2 root root  4096 Jan 20 05:21 cloudera/ drwxr-xr-x  2 root root 20480 Jan 20 05:42 lib/ lrwxrwxrwx  1 root root    11 Jan 20 05:42 sbin -> sbin-retail/ drwxr-xr-x  2 root root  4096 Jan 20 05:42 sbin-debug/ drwxr-xr-x  2 root root  4096 Jan 20 05:42 sbin-retail/ drwxr-xr-x  7 root root  4096 Jan 20 05:21 toolchain/ drwxr-xr-x  7 root root  4096 Jan 20 05:20 www/

逐个看一下,bin目录主要是一些诊断用的脚本,不用管:

12# ls bin collect_diagnostics.py  collect_minidumps.py  collect_shared_libs.sh  __init__.py

cloudera目录是版本信息,不用管。lib里是一些jar包的软链,以及依赖的so文件,这个要复制好。 sbin目录指向sbin-retail,里面主要是impalad可执行文件,catalogd和statestored都是软链,不用复制:

1234567# ll /opt/cloudera/parcels/CDH-6.3.3-1.cdh6.3.3.p0.1796617/lib/impala/sbin-retail/ total 64336 drwxr-xr-x 2 root root     4096 Jan 20 05:42 ./ drwxr-xr-x 9 root root     4096 Jan 20 05:42 ../ lrwxrwxrwx 1 root root        7 Jan 20 05:21 catalogd -> impalad* -rwxr-xr-x 1 root root 65870296 Jan 20 05:42 impalad* lrwxrwxrwx 1 root root        7 Jan 20 05:21 statestored -> impalad*

toolchain目录里都是已经被静态链接进impalad可执行文件的,不知道怎么还带着,不用管:

12# ls toolchain/ breakpad-97a98836768f8f0154f8f86e5e14c2bb7e74132e-p2  cmake-3.14.3  llvm-5.0.1-asserts-p1  llvm-5.0.1-p1  orc-1.5.5-p1

www目录是网页要用的,也需要更新。

最后再用ldd指令确认一下依赖的动态链接库

1234567891011121314151617181920212223# ldd /opt/cloudera/parcels/CDH-6.3.3-1.cdh6.3.3.p0.1796617/lib/impala/sbin-retail/impalad         linux-vdso.so.1 =>  (0x00007ffe9af90000)         libjsig.so => not found         libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa646f00000)         libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007fa646ce4000)         libjvm.so => not found         libkudu_client.so.0 => not found         librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fa646adb000)         libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa6468d7000)         libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007fa64668d000)         libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fa646423000)         libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fa645fde000)         libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007fa645d0c000)         libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa645989000)         libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa645680000)         libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa64546a000)         libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa64509f000)         /lib64/ld-linux-x86-64.so.2 (0x000055d437435000)         libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007fa644e70000)         libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007fa644c6c000)         libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007fa644a60000)         libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007fa64485c000)         libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fa644641000)

这里面有三个找不到,因为有些环境变量没有配,比如说 libjsig.so 和 libjvm.so 是java提供的,CM配置了java相关环境变量就能找到。我们能看到大部分so文件在系统里都有了,只需要复制新版本依赖的libkudu_client.so.0就行了。

4. 生成新Impala目录

先复制一份原目录,然后在它的基础上改。

123# cd /opt/cloudera/parcels/CDH-6.3.3-1.cdh6.3.3.p0.1796617/lib/ # cp -r impala apache-impala-3.4 # cd apache-impala-3.4 4.1 lib目录

把lib目录里的jar包都删了,剩下so文件

123456789101112# rm lib/*.jar # ll lib total 15040 drwxr-xr-x 2 root root   20480 Jun 20 00:42 ./ drwxr-xr-x 9 root root    4096 Jun 19 22:37 ../ -rw-r--r-- 1 root root   89864 Jun 19 22:37 libgcc_s.so.1 lrwxrwxrwx 1 root root      36 Jun 19 22:37 libhadoop.so -> ../../hadoop/lib/native/libhadoop.so lrwxrwxrwx 1 root root      42 Jun 19 22:37 libhadoop.so.1.0.0 -> ../../hadoop/lib/native/libhadoop.so.1.0.0 -rw-r--r-- 1 root root 6638528 Jun 19 22:37 libkudu_client.so.0 -rw-r--r-- 1 root root 6638528 Jun 19 22:37 libkudu_client.so.0.1.0 -rw-r--r-- 1 root root 1003416 Jun 19 22:37 libstdc++.so.6 -rw-r--r-- 1 root root 1003424 Jun 19 22:37 libstdc++.so.6.0.20

把 libkudu_client.so.0 替换为我们编译Impala 3.4时用的,从前面ldd的输出可以看到在 $IMPALA_HOME/toolchain/kudu-4ed0dbbd1/debug/lib/libkudu_client.so.0 其它so文件不用管 把 impala-3.4依赖的jar包也都复制进这个lib目录,它们在编译目录里能找到,具体路径是 $IMPALA_HOME/fe/target/dependency/ 把 impala-3.4编译出来的 impala-frontend-0.1-SNAPSHOT.jar 放进lib目录,在编译目录里的路径是 fe/target/impala-frontend-0.1-SNAPSHOT.jar 把 impala-3.4编译出来的 impala-data-source-api-1.0-SNAPSHOT.jar 放进lib目录,在编译目录里的路径是 ext-data-source/api/target/impala-data-source-api-1.0-SNAPSHOT.jar。这个其实也可以复制CDH6.3.3原有的,因为external-data-source这块已经几年没更新了……

4.2 sbin-retail目录

把里面的impalad换成apache impala 3.4编译后的impalad,在编译目录里的路径是 be/build/latest/service/impalad 检查catalogd和statestored两个软链是否指向了impalad:

1234567ll sbin-retail total 470152 drwxr-xr-x 2 root root      4096 Jun 20 00:35 ./ drwxr-xr-x 9 root root      4096 Jun 20 00:57 ../ lrwxrwxrwx 1 root root         7 Jun 19 22:37 catalogd -> impalad* -rwxr-xr-x 1 root root 481420800 Jun 20 00:06 impalad* lrwxrwxrwx 1 root root         7 Jun 19 22:37 statestored -> impalad* 4.3 www目录

这个目录是WebUI用的,把旧版的删了,复制新版的过来。

5. 更改CM配置并重启

把新的Impala目录放到所有机器上,确保它们一致。然后在CM中去到Impala -> Configuration -> Impala Service Environment Advanced Configuration Snippet (Safety Valve),加一个环境变量 IMPALA_HOME=/opt/cloudera/parcels/CDH-6.3.3-1.cdh6.3.3.p0.1796617/lib/apache-impala-3.4 然后重启整个Impala集群。重启成功后,可以看到catalogd、statestored、impalad启用了新页面,并且版本号是3.4

6. 验证和回滚

最后要验证一下集群是否工作正常,包括Impala 3.4的一些新功能。如果有任何不兼容的地方,回滚CM的配置再重启Impala集群就回来了,因为我们并没有动老版本的任何东西。

7. 总结

在CDH中单独升级Impala,可以通过以下步骤:

在 /opt/cloudera/parcels/CDH/lib 目录下生成一个新的impala目录 复制新版本的以下内容到目录对应位置:impalad、impala-frontend-0.1-SNAPSHOT.jar、所有新版FE依赖的jar包、www目录、新版本依赖的 libkudu_client.so.0 在CM的Impala Service Environment Advanced Configuration Snippet (Safety Valve)配置中,设置IMPALA_HOME环境变量指向新目录 重启集群

单独升级Impala需要对Impala有一定的技术储备,Cloudera官方并不建议这样做,因为与已有CDH组件的兼容性问题并没有得到测试。以上只是我个人的升级实验,有任何不兼容的问题,欢迎大家前往Impala技术交流群进行讨论(加微信China_Impala获取进群方式)。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3