历经15个月,Apache Impala 4.0终于发布了!本次发布一共包含700多个JIRA,新增了很多特性,包括但不限于:
支持所有TPC-DS 99个查询的语法,查询不再需要重写就可以在Impala上执行。新增的语法主要有
GroupBy语句里支持 ROLLUP、CUBE 和 GROUPING SETS (IMPALA-7204)
SelectList中支持非关联子查询 (IMPALA-8954)
支持 INTERSET 和 EXCEPT 集合操作 (IMPALA-9943、IMPALA-4974)
透明的查询重试 (IMPALA-9124)
支持按Z-Order写入数据 (IMPALA-8755)
支持异步Codegen (IMPALA-5444)
支持读取Hive full-ACID ORC表的数据 (IMPALA-9042)
支持Apache Iceberg (IMPALA-10149)
支持更多的存储,如Ozone、GCS(Google云存储)等
支持aarch64 (ARM)平台 (IMPALA-9376)
……
具体参考《Apache Impala 4.0 发布了!》,因为Impala4.0的发布同时提供了Docker集群供快速试用 (IMPALA-9793),本文档主要是根据Github上的Impala项目中docker镜像快速构建Impala4.0的本地测试环境,测试工具:
Windows 10 家庭中文版
MobaXterm Personal Edition v21.2
Docker Desktop v20.10.8
1.通过以下链接下载docker的安装包并安装,安装过程略,使用以下链接下载安装包并进行安装:
https://docs.docker.com/desktop/windows/install/
2.确认Docker Desktop安装成功,运行以下命令
docker run -d -p 80:80 docker/getting-started
通过Container/Apps可以看到起来了一个docker
也可以访问本地的80端口查看网页
说明你的Docker Desktop已经安装成功并能正常使用。
1.从以下地址下载文件quickstart.yml放到Xterm的家目录
https://github.com/apache/impala/blob/master/docker/quickstart.yml
2.在Xterm的家目录新建文件夹quickstart_conf,并从以下地址下载hive.xml文件放到该目录
https://github.com/apache/impala/blob/master/docker/quickstart_conf/hive-site.xml
3.运行以下命令进行Impala的Docker环境的前置设置
docker network create -d bridge quickstart-network
export QUICKSTART_LISTEN_ADDR=0.0.0.0
export IMPALA_QUICKSTART_IMAGE_PREFIX="apache/impala:4.0.0-"
4.运行以下命令创建Impala4.0的集群,会同时创建4个docker,包括Catalogd, StateStore和Impalad各一个,还有一个HMS
docker-compose -f quickstart.yml up -d
我这个环境因为已经下载过这些image,所以非常快,否则这个步骤会需要等待较长的时间。
5.从Docker Desktop可以查看到已经起来了4个docker
6.验证可以从本地访问Coordinator的25000界面
自此Impala4.0本地基于Docker的环境已经创建完成。
1.执行以下命令导入数据
docker-compose -f ./quickstart.yml -f ./quickstart-load-data.yml up -d
2.通过Docker Desktop可以看到多了一个docker
3.单击点开来可以发现正在导入TPC_DS的数据
4.登录到home_impalad-1_1的CLI获取该docker的ip地址
5.将该ip地址和docker_impalad-1_1的主机名配置到自己Windows的hosts文件中
172.18.0.5 docker_impalad-1_1
6.使用以下命令登录到impala-shell
docker run --network=quickstart-network -it ${IMPALA_QUICKSTART_IMAGE_PREFIX}impala_quickstart_client impala-shell
此时已经登录到impala-shell
7.执行select命令确认之前的数据已经导入成功
1.测试rollup语法支持
select cc_call_center_id, cc_rec_start_date,sum(cc_call_center_sk) from call_center group by rollup(cc_call_center_id,cc_rec_start_date);
2.测试except语法
(select t_time_sk from time_dim) except (select t_time_sk from time_dim_test) limit 20;
3.测试intersect语法
select t_time_sk from time_dim_test intersect select t_time_sk from time_dim;
4.测试cube语法
select i_item_id, i_brand, sum(i_item_sk) as sss from item group by i_item_id, i_brand with cube limit 10;
5.测试grouping sets语法
select i_item_id, i_class_id, sum(i_current_price) from item group by grouping sets(i_item_id, i_class_id) limit 10;
6.测试NDV支持设置精度
select count(distinct ws_list_price),count(distinct ws_sales_price) from web_sales;
select ndv(ws_list_price,10),ndv(ws_sales_price,10) from web_sales;
select ndv(ws_list_price,2),ndv(ws_sales_price,2) from web_sales;
可以发现当把NDV的精度设为10比设为2的时候更接近于真实的count distinct的值。
参考文档:
https://github.com/apache/impala/tree/master/docker
本文分享自微信公众号 - Hadoop实操(gh_c4c535955d0f)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。