• 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()

作者 admin

张宴银,大数据开发工程师

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注