Impala tests构造以及执行

2022-05-20 08:25:05 浏览数 (1)

Impala提供了一套比较完整的测试用例,包括FE和BE端的都有,但是要把所有的测试用例都跑通,需要启动相应的依赖服务,包括HDFS、Kudu、HBase、Hive等,最后还需要启动一套impala集群,耗费时间比较久,同时对环境也有一定要求,笔者目前手里没有一个比较干净的环境,因此本次操作都是在docker容器中进行操作的,容器使用的是ubuntu的镜像,详细信息如下所示:

代码语言:javascript复制
LSB Version:    core-9.20160110ubuntu0.2-amd64:core-9.20160110ubuntu0.2-noarch:printing-9.20160110ubuntu0.2-amd64:printing-9.20160110ubuntu0.2-noarch:security-9.20160110ubuntu0.2-amd64:security-9.20160110ubuntu0.2-noarch

Distributor ID: Ubuntu

Description:    Ubuntu 16.04.6 LTS

Release:    16.04

Codename:   xenial

Impala版本:3.3.0

github地址:https://github.com/apache/impala/tree/branch-3.3.0

由于在执行impala tests过程中,需要进行一些配置,我们这里一并使用root用户进行操作,官方文档请参考:https://cwiki.apache.org/confluence/display/IMPALA/How to load, run, and create new Impala tests。由于执行命令比较简单,因此这里主要记录在执行impala tests过程中遇到的一些问题,希望能帮助大家。

编译源码

当我们下载好最新分支branch-3.3.0的源码之后,第一次运行建议通过如下命令进行编译,可以自动安装一些必要的依赖组件:

代码语言:javascript复制
cd $IMPALA_HOME

./bin/bootstrap_build.sh

编译完成之后生成的是没有测试用例的代码,这里我们需要生成测试用例,因此可以通过如下命令进行再次编译:

代码语言:javascript复制
./buildall.sh -noclean -testdata

实际测试过程中发现,第一次编译完成之后,整个路径下的大小是12G左右;使用第二条命令进行编译之后,路径下面大小将近60G,可见测试用例非常大。

依赖服务准备

我们上面提到了impala本身需要依赖hdfs、hbase、kudu等组件,而这些组件的启动本身也会依赖其他的组件,这里主要包括zookeeper和postgresql。因此,我们需要在当前的container里面部署这两个服务。

zookeeper服务

zk的部署比较简单,我们只需要部署一个单机版本的即可,保证通过127.0.0.1:2181能够连接到zk服务即可。

postgresql服务

我们同样也部署一个pg的服务即可,但是除此之外,我们还需要配置相应的用户,并且创建相应的库。

  • 创建Hive服务所需要的用户和库。参考$IMPALA_HOME/fe/src/test/resources/postgresql-hive-site.xml.template文件中的用户名和密码进行配置,这里配置的库名是${METASTORE_DB},实际生成的地方位于bin/impala-config.sh中:export METASTORE_DB=${METASTORE_DB-$(cut -c-63 <<< HMS$ESCAPED_IMPALA_HOME)},在我自己的测试环境,实际的库名为HMS_home_impala。需要注意的是,pg创建数据库的时候,默认是会转成小写的,因此需要在库名加上双引号;
  • 初始化元数据库。步骤1中创建的元数据库是空的,因此我们需要通过schemaTool工具进行初始化,我们将如下的内容作为hive-site.xml放到$IMPALA_HOME/toolchain/cdh_components-xxx/hive-2.1.1-cdh6.x-SNAPSHOT/conf中:
代码语言:javascript复制
<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

 <name>javax.jdo.option.ConnectionURL</name>

 <value>jdbc:postgresql://localhost:5432/HMS_home_impala</value>

</property>

<property>

 <name>javax.jdo.option.ConnectionDriverName</name>

 <value>org.postgresql.Driver</value>

</property>

<property>

 <name>javax.jdo.option.ConnectionUserName</name>

 <value>hiveuser</value>

</property>

<property>

 <name>javax.jdo.option.ConnectionPassword</name>

 <value>password</value>

</property>

</configuration>

然后执行如下命令:

代码语言:javascript复制
cd $IMPALA_HOME

source bin/impala-config.sh

export HADOOP_HOME=toolchain/cdh_components-xxx/hadoop-3.0.0-cdh6.x-SNAPSHOT

./toolchain/cdh_components-xxx/hive-2.1.1-cdh6.x-SNAPSHOT/bin/schematool -initSchema -dbType postgres

执行完成之后,我们就可以psql -h localhost -U hiveuser -W HMS_home_impala命令登陆,并通过dt查看新生成的relations:

  • 创建Sentry服务所需要的用户和库。参考$IMPALA_HOME/fe/src/test/resources/sentry-site.xml.template文件中的用户名和密码进行配置,这里配置的库名是${SENTRY_POLICY_DB},实际生成的地方位于bin/impala-config.sh中:export SENTRY_POLICY_DB=${SENTRY_POLICY_DB-$(cut -c-63 <<< SP$ESCAPED_IMPALA_HOME)},在我自己的测试环境,实际的库名为SP_home_impala。

其他问题

  • 启动hdfs集群的datanode失败,日志位置:$IMPALA_HOME/logs/cluster/cdh6-node-1/hadoop-hdfs/hdfs-datanode.log,错误主要是由于目录不存在,执行mkdir /var/lib/hadoop-hdfs/创建路径即可:
  • Kudu集群master启动失败,日志位置:$IMPALA_HOME/logs/cluster/cdh6-node-1/kudu/master/kudu-master.INFO, 这个可能是由于我们之前已经启动过一次kudu的集群,但是没有正常退出导致的,因此我们删除下面该路径下面的内容:rm -rf testdata/cluster/cdh6/node-1/var/lib/kudu/master/*:

​​​​​​​启动依赖组件,并执行测试用例

现在,我们可以通过如下命令直接启动所有的依赖组件,并且执行所有的测试用例:

代码语言:javascript复制
cd $IMPALA_HOME
source bin/impala-config.sh
./testdata/bin/run-all.sh
./bin/run-all-test.sh

执行进度如下所示:

我们可以在$IMAPLA_HOME/logs下面查看到相应的日志,例如llvm-codegen-test的测试用例日志就位于:logs/be_tests/llvm-codegen-test.INFO。在执行impala tests的过程中,可能会有部分测试用例执行失败,这个就需要我们根据相应的tests日志来排查原因了。

0 人点赞