跳至内容
- 1.将网上找的编译好的Hive-testbench包放到大数据集群主节点(EMR集群Master节点,CDH,AMbari的Namenode所在节点)

- 2.生产测试数据
- cd hive-testbench #如果已在此目录无需执行
- # tpcds 数据表生成的目录,如果目录不存在,就自动生成,
- # 注意这里需要根据数据集大小设置,例如 1000 代表 1TB,5 代表 5GB
- ./tpcds-setup.sh 10 /tpcdata/tpcds
- 10G数据会生成好并加载到HDFS


- 3.创建TPC-DS测试数据集的所有表(外部表)并加载2步骤中的10G数据
- 注:需要对alltables.sql略作修改
- 原本代码如下图:

- 修改示例:

- 4.测试数据集生成之后,运行查询sql语句,产生日志,统计查询时长
- cd spark-queries-tpcds

- 有99个sql脚本

- 编写shell脚本,依次执行这99个sql脚本,并将运行日志放到指定文件夹下
- vim run_all_query_sql.sh
- #!/bin/bash
- #author:mingyu
- start_time=$(date +%s)
- current_path=`pwd`
- db=”zyy_test”
- query=”spark-queries-tpcds”
- queries_dir=${current_path}/${query}
- mkdir logs
- for t in `ls ${queries_dir}`
- do
- echo “========================================”
- echo “current query will be ${queries_dir}/${t}”
- spark-sql -e “use ${db}; source ${queries_dir}/${t};” 2>&1 | tee ${current_path}/logs/${t}.log
- done
- end_time=$(date +%s)
- elapse_time=$(($end_time – $start_time))
- echo “all queries execution are finished, please check logs for the result!”
- echo “elapsed time is ${elapse_time} seconds”
- 5.将运行生成的99个log日志文件下载下来,使用python抓取日志中的 运行时长数据,再结合可视化的方法,制作成图形,写进报告
- 示例 python代码如下

- # -*- coding: utf-8 -*-
- “””
- Created on Thu May 18 15:06:50 2023
- @author: admin
- “””
- # -*- coding: utf-8 -*-
- “””
- Created on Thu May 18 14:21:35 2023
- @author: admin
- “””
- import os
- import pandas as pd
- import matplotlib.pyplot as plt
- # 文件夹路径
- folder_path = r’C:\Users\admin\Desktop\项目文件夹\需对接项目2\谢瑞麟项目\谢瑞麟项目\Hive-testbench压力测试\Hive_testbench_powertest\logs’
- # 创建空的DataFrame用于存储数据
- df = pd.DataFrame(columns=[‘Script’, ‘Duration’])
- # 遍历文件夹中的文件
- for file_name in os.listdir(folder_path):
- if file_name.endswith(‘.log’):
- file_path = os.path.join(folder_path, file_name)
- with open(file_path, ‘r’) as file:
- log_data = file.readlines()
- # 解析日志文件并提取脚本名称和运行时长数据
- for line in log_data:
- if ‘Time taken:’ and ‘Fetched’ in line:
- duration = float(line.split(‘Time taken:’)[1].split(‘s’)[0].strip())
- file_name=file_name.split(‘.’)[0]
- df = df.append({‘Script’: file_name, ‘Duration’: duration}, ignore_index=True)
- plt.figure(figsize=(100, 60))
- #plt.bar(filtered_df[‘Task’], filtered_df[‘Duration’], color=filtered_df[‘Status’].map({‘SUCCESS’: ‘green’, ‘FAILED’: ‘red’}))
- plt.barh(df[‘Script’],df[‘Duration’])
- plt.ylabel(‘Script’)
- plt.xlabel(‘Duration (s)’)
- plt.title(‘Hive SQL Task Runtimes’)
- plt.xticks(rotation=90)
- plt.grid(True)
- # 显示图像
- plt.show()
