---
title: 使用OmniCache物化视图推荐视图
description: "本次任务示例使用TPC-DS的数据表作为测试表。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/bds/kunpengomnicache_20_0023.html
sourcePath: /source/zh/kunpengboostkithistory/2200/bds/kunpengomnicache_20_0023.html
indexId: 29708b7d48259523b2d83ebefaf254a053300bdf6664dd9afbc90e3b6f24fe6272
---
# 使用OmniCache物化视图推荐视图

本次任务示例使用TPC-DS的数据表作为测试表。

1. 生成测试数据。

  a. 使用    hive-testbench(https://github.com/hortonworks/hive-testbench)
工具生成tpcds-8T数据。该工具是hortonworks开源的Hive测试工具。下载网址：    https://github.com/hortonworks/hive-testbench(https://github.com/hortonworks/hive-testbench)
，或者使用如下命令下载。

```
wget https://github.com/hortonworks/hive-testbench/archive/hdp3.zip --no-check-certificate
```


  b. 安装Maven。下载并安装到指定目录（此处以指定“/opt/tools/installed/”目录为例）。

```
wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
tar -zxf apache-maven-3.5.4-bin.tar.gz
mv apache-maven-3.5.4 /opt/tools/installed/
```


  c. 修改Maven环境变量。

    1. 打开“/etc/profile”文件。

```
vim /etc/profile
```


    2. 按“i”进入编辑模式，在文件末尾增加下面代码。

```
export MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4
export PATH=$MAVEN_HOME/bin:$PATH
```


    3. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
    4. 使环境变量生效。

```
source /etc/profile
```


  d. 检查Maven是否安装成功。

```
mvn -v
```


2. TPC-DS编译。

  a. 进入“tpcds-gen”目录。

```
cd tpcds-gen
```


  b. 打开pom文件。

```
vim pom.xml
```


  c. 按“i”进入编辑模式，将<dependencies>标签内的Hadoop版本修改成环境的版本进行编译。例如：本文档使用的是Hadoop版本为3.1.1（开源自带的版本为2.2.0）。
    在进行编译前需要保证自己的环境是联网的，能下载各种包，也可以先在联网环境编译成功后，放到非联网环境。

  d. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  e. 编译TPC-DS。如果安装的时候，证书引起报错，请参见    编译TPC-DS时证书引起报错
解决。

```
cd /opt/hive-testbench-hdp3/
sh tpcds-build.sh
```


3. TPC-DS脚本修改。
由于该脚本是针对HDP3版本的，所以当用户使用的是Apache的版本时，需要对tpcds-setup.sh做如下修改。

  a. 修改Beeline命令。

    1. 打开“/opt/hive-testbench-hdp3/tpcds-setup.sh”脚本。

```
vim /opt/hive-testbench-hdp3/tpcds-setup.sh
```


    2. 按“i”进入编辑模式，脚本指定了HIVE的命令为Beeline，这里需要根据自己的环境修改，为了测试方便，此处修改为HIVE="hive "。
    3. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  b. 注释hive.optimize.sort.dynamic.partition.threshold参数。

    1. 打开/opt/hive-testbench-hdp3/settings/load-partitioned.sql文件。

```
vim /opt/hive-testbench-hdp3/settings/load-partitioned.sql
```


    2. 按“i”进入编辑模式，“#”注释最后一行。
    3. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  c. 注释set hive.optimize.sort.dynamic.partition.threshold=0;参数。

    1. 打开/opt/hive-testbench-hdp3/settings/load-flat.sql文件。

```
vim /opt/hive-testbench-hdp3/settings/load-flat.sql
```


    2. 按“i”进入编辑模式，“#”注释最后一行。
      注释后如下所示：

    3. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
4. TPC-DS数据生成。
  测试生成8TB数据（一般进行Hive性能测试时可以选8000GB的数据量）。

```
sh tpcds-setup.sh 8000
```


5. 修改配置文件。

  a. 打开文件。

```
vim config/omnicache_config.cfg
```


  b. 按“i”进入编辑模式，修改如下参数。

```
# 数据库名称
database = tpcds_bin_partitioned_decimal_orc_8000
# 日志解析的JAR包路径
logparser_jar_path = /opt/omnicache/boostkit-omnicache-logparser-spark-3.1.1-1.0.0-aarch64.jar
# OmniCache Plugin的路径
cache_plugin_jar_path = /opt/omnicache/boostkit-omnicache-spark-3.1.1-1.0.0-aarch64.jar
# spark-defaults.conf路径下面配置的spark history输出的路径
hdfs_input_path = hdfs://server1:9000/spark2-history
# SQL语句的存放路径，这里以tpcds sql为例
sqls_path = hdfs://server1:9000/omnicache_0919/tpcds
```


**表1 OmniCache物化视图部分配置**

| 配置项 | 含义 | 参考值 |
| --- | --- | --- |
| database | 用于测试的数据库名称 | \- |
| logparser\_jar\_path | 日志解析JAR包路径 | /opt/omnicache/boostkit\-omnicache\-logparser\-spark\-3.1.1\-1.0.0\-aarch64.jar |
| cache\_plugin\_jar\_path | OmniCache物化视图的JAR包路径 | /opt/omnicache/boostkit\-omnicache\-spark\-3.1.1\-1.0.0\-aarch64.jar |
| hdfs\_input\_path | Spark任务运行日志在HDFS上的访问地址 | hdfs://server1:9000/spark2\-history |
| sqls\_path | 测试SQL在HDFS上的访问地址 | hdfs://server1:9000/omnicache\_0919/tpcds |


  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
6. 获取测试SQL（以tpcds为例）。

  a. 下载    Spark源码(https://github.com/apache/spark)
并解压，在“spark-master/sql/core/src/test/resources/tpcds/”路径下获取TPC-DS测试SQL。
  b. 将测试SQL传到HDFS上(路径为配置文件中sqls_path的值)。

```
hdfs dfs -mkdir -p hdfs://server1:9000/omnicache_0919/tpcds
hdfs dfs -put /spark源码目录/sql/core/src/test/resources/tpcds/* hdfs://server1:9000/omnicache_0919/tpcds/
```


7. 初始化数据库。这一步主要是获取目标表的建表信息，用于后续创建推荐视图。
  屏幕打印“init_database succeed!”说明执行成功。

```
python3 main.pyc init_database
```


8. 运行测试SQL(以TPC-DS测试SQL为例)。
  屏幕打印“run_original_sqls succeed!”说明执行成功。

```
python3 main.pyc run_original_sqls
```


9. 解析运行日志。

  a. 通过http://ip:18080地址访问Spark History Server查看原生SQL任务起止时间。
  b. 打开配置文件“config/omnicache_config.cfg”。

```
vim config/omnicache_config.cfg
```


  c. 按“i”进入编辑模式，修改如下参数。

```
# 测试sql运行开始时间
q_log_start_time = 2022-09-15 11:58
# 测试sql运行结束时间
q_log_end_time = 2022-09-15 17:15
```


  d. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  e. 运行日志解析脚本。
    屏幕打印“parse_query_logs succeed!”说明执行成功。

```
python3 main.pyc parse_query_logs
```


10. 生成候选视图。

  a. 可选：修改配置文件“config/omnicache_config.cfg”。

    1. 可选：打开文件。

```
vim config/omnicache_config.cfg
```


    2. 按“i”进入编辑模式，在文件中修改以下内容。

```
# 候选TOP mv的数量限制，实际推荐数量小于等于该值
cnt_limit = 40
```


    3. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  b. 运行脚本。
    屏幕打印“generate_candidate_view_spark succeed!”说明执行成功。

```
python3 main.pyc generate_views
```


11. 运行创建topN视图（需要人为确认，是否可以真实的创建这个候选的视图）。
  屏幕打印“create_top_views succeed!”说明执行成功。

```
python3 main.pyc create_top_views
```


12. 运行物化视图重写任务。
  屏幕打印“run_rewrite_sqls succeed!”说明执行成功。

```
python3 main.pyc run_rewrite_sqls
```


13. 解析重写任务日志。

  a. 通过http://ip:18080地址访问Spark History Server查看重写任务起止时间。
  b. 修改配置文件“config/omnicache_config.cfg”。

    1. 打开文件。

```
vim config/omnicache_config.cfg
```


    2. 按“i”进入编辑模式，在文件中修改以下内容。

```
# 重写任务开始时间
q_mv_log_start_time = 2022-09-15 20:18
# 重写任务结束时间
q_mv_log_end_time = 2022-09-15 21:17
```


    3. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  c. 运行脚本。
    屏幕打印“parse_query_mv_logs succeed!”说明执行成功。

```
python3 main.pyc parse_query_mv_logs
```


14. 训练代价评估模型。
  屏幕打印“train_cost_estimation_model succeed!”说明执行成功。

```
python3 main.pyc cost_estimation
```


15. 训练推荐模型。
  屏幕打印“train_recommend_model succeed!”说明执行成功。

```
python3 main.pyc recommend
```


16. 获取推荐的物化视图。
  屏幕打印“get_recommend_mvs succeed!”说明执行成功。

```
python3 main.pyc get_recommend_mvs
```


17. 创建推荐的物化视图（需要人为确认，是否可以真实的创建这个推荐的视图）。
  屏幕打印“create_recommend_views succeed!”说明执行成功。

```
python3 main.pyc create_recommend_views
```
