Impala3.4是Impala3.x最后一个版本,对比CDH6.3.2的Impala 3.2版本,在查询性能,内存优化,元数据管理方面都有一定的提升。目前Cloudera不再提供免费的安装包,要在CDH6集成Impala3.4,需要对Aapche Impala进行编译和打包,Cloudera官方并不建议这样做,因为与已有CDH组件的兼容性问题并没有得到测试,需要根据实际情况选择是否升级到Impala3.4版本。

在CDH中单独升级Impala,可以通过以下步骤:
1. 对Apache Impala 3.4进行编译
2. 根据Cloudera Impala的目录结构,构建Impala目录
3. 在CM管理平台修改环境变量指向Impala3.4版本

注:安装包已经编译打包好,可直接查看第三步,前两个步骤可作为了解。

一、编译Impala

1、环境要求
最小内存:4GB,低于4G编译将失败
操作系统:仅支持以下操作系统,选择和CDH集群一样的操作系统即可
● Ubuntu 14.04、16.04、18.04
● CentOS 7
硬盘:20G

2、下载Apache Impala3.4

# 克隆impala 3.4
git clone --single-branch --branch 3.4.0 https://github.com/apache/impala.git impala-3.4

# 打上 IMPALA-9815 的commit
cd impala-3.4
git fetch origin 481ea4ab0d476a4aa491f99c2a4e376faddc0b03
git cherry-pick 481ea4ab0d476a4aa491f99c2a4e376faddc0b03

# 克隆impala-lzo和hadoop-lzo
git clone --branch master https://github.com/cloudera/impala-lzo.git impala-3.4/../Impala-lzo
git clone https://github.com/cloudera/hadoop-lzo.git impala-3.4/../hadoop-lzo

3、修改apache-ant下载地址

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

redhat sudo wget -nv \
   https://downloads.apache.org/ant/binaries/apache-ant-1.10.12-bin.tar.gz
redhat sha512sum -c - <<< '2287dc5cfc21043c14e5413f9afb1c87c9f266ec2a9ba2d3bf2285446f6e4ccb59b558bf2e5c57911a05dfa293c7d5c7ad60ac9f744ba11406f4e6f9a27b2403  apache-ant-1.10.12-bin.tar.gz'
redhat sudo tar -C /usr/local -xzf apache-ant-1.10.12-bin.tar.gz
redhat sudo ln -s /usr/local/apache-ant-1.10.12/bin/ant /usr/local/bin

4、修改ivy下载地址

vim impala-3.4/../hadoop-lzo/build.xml
96   <property name="ivy_repo_url" value="https://repo.maven.apache.org/maven2/org/apache/ivy/ivy/${ivy.version}/ivy-${ivy.version}.jar"/>

vim impala-3.4/../hadoop-lzo/ivy/ivysettings.xml
15    value="https://repo.maven.apache.org/maven2/"

5、安装编译依赖
$IMPALA_HOME/bin/bootstrap_system.sh

6、编译

# 设置环境变量
source $IMPALA_HOME/bin/impala-config.sh

# 编译过程会下载python依赖和其他静态依赖,会比较耗费时间
$IMPALA_HOME/buildall.sh -noclean -notests -release

编译完后可以找到impalad可执行文件和impala-frontend的jar包

$ ll -h be/build/latest/service/impalad fe/target/impala-frontend-0.1-SNAPSHOT.jar
-rwxrwxr-x 1 root root 460M 6月  20 11:30 be/build/latest/service/impalad
-rw-rw-r-- 1 root root 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

二、构建目录

按照Cloudera impala的目录结构,打包新版本相关可执行文件和依赖包
1、拷贝Cloudera Impala目录结构

cd /opt/cloudera/parcels/CDH/lib
cp -r impala apache-impala-3.4
cd apache-impala-3.4

2、构建lib目录
把lib目录里原来的jar包都删了,剩下so文件,拷贝libkudu_client.so.0和新版本的jar包到lib目录

rm -f lib/*.jar

cp $IMPALA_HOME/fe/target/dependency/* lib/
cp $IMPALA_HOME/fe/target/impala-frontend-0.1-SNAPSHOT.jar lib/

# 替换 libkudu_client.so.0 是因为impala3.4使用了impala3.2的kudu client不支持的功能。
# Impala 3.3开始支持kudu表的列注释,升级了依赖的Kudu client版本
cp $IMPALA_HOME/toolchain/kudu-4ed0dbbd1/release/lib64/libkudu_client.so.0 lib/
cp $IMPALA_HOME/toolchain/kudu-4ed0dbbd1/release/lib64/libkudu_client.so.0.1.0 lib/

3、构建sbin-retail目录
把里面的impalad换成编译后的impalad

cp $IMPALA_HOME/be/build/latest/service/impalad sbin-retail/

rm -rf sbin-debug
ln -s sbin-retail sbin-debug

4、更新WWW目录
这个目录是WebUI用的,把旧版的删了,复制新版的过来

rm -rf www
cp -r $IMPALA_HOME/www www

三、更改CM配置

把打包好的apache-impala-3.4目录放到所有机器上,确保它们一致。
在CM中Impala -> 配置 -> env,加一个环境变量 IMPALA_HOME=/opt/cloudera/parcels/CDH/lib/apache-impala-3.4

然后重启整个Impala集群。重启成功后,可以看到catalogd、statestored、impalad启用了新页面,并且版本号是3.4

四、验证和回滚

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