Hive导入TPC-H数据集(待补充)

1. 絮絮叨叨

  • 上一篇博客(选择TPC-H作为Presto性能测试的benchmark),讲到了选择TPC-H作为Presto性能的测试的benchmark
  • 通过了解TPC-H数据集的生成过程,需要通过Hive的LOAD DATA LOCAL INPATH命令将生成的TPC-H数据集导入textfile格式的Hive表中

1.1 如何创建orc格式的Hive表?

  • 而性能测试需要的是orc格式的Hive表,因此还需要将textfile格式转为orc格式
  • 自己对Hive表之间的格式转换,不是特别了解,网上查阅到的自认为 “简单” 的方法:

2. 生成TPC-H的数据集

  • TPC-H的数据集的生成,由 tpc-h-tools负责完成
  • 从这一part开始,后面的操作都是基于linux系统的

2.1 tpc-h-tools的下载

  • tpc-h-tools,可以从TPC的官网下载
  • 进入链接指向的Downloads页面后,选择TPC-H对应的tools进行下载
  • 下载时,需要填写自己的个人信息、邮箱,TPC会将在链接发送到指定的邮箱
  • 如果记得没错的话,这个链接地址好像只能下载一次,而且下载速度十分缓慢,经常需要失败重试
  • 所以,在这里提供自己2022年5月下载的当时最新的tools云盘链接, 密码: cfu0

2.2 编译tools的代码

  • 将下载好的tools源码上传到一台安装了gcc的linux服务器上,可以通过gcc -v查看linu系统是否安装了gcc

  • 解压缩tools.zip文件,得到tpc-h_tools_v3.0.0文件夹

    unzip tpc-h-tool.zip 
    
  • 进入dbgen目录,创建makefile

    cd tpc-h_tools_v3.0.0/dbgen
    cp makefile.suite makefile
    
  • 编辑makefile文件,找到如下内容,设置对应的值

    ################
    ## CHANGE NAME OF ANSI COMPILER HERE
    ################
    CC      = gcc
    # Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
                                       SQLSERVER, SYBASE, ORACLE, VECTORWISE
    # Current values for MACHINE are:  ATT, DOS, HP, IBM, ICL, MVS, 
    #                                  SGI, SUN, U2200, VMS, LINUX, WIN32 
    # Current values for WORKLOAD are:  TPCH
    DATABASE= HIVE
    MACHINE = LINUX
    WORKLOAD = TPCH
    
  • 其中HIVE类型的DATABASE不存在,需要在tpcd.h文件中进行设置,在#ifdef ORACLE之前添加如下内容:

    #ifdef  HIVE
    #define GEN_QUERY_PLAN  "explain;"
    #define START_TRAN      "start transaction;\n"
    #define END_TRAN        "commit;\n"
    #define SET_OUTPUT      ""
    #define SET_ROWCOUNT    "limit %d;\m"
    #define SET_DBASE       "use %s;\n"
    #endif
    
  • 然后使用make命令编译tools源码

    make -f makefile
    
  • 本人的编译过程,有一些warning提示,但不影响整体使用
    在这里插入图片描述

  • 最终,会在dbgen/目录下,生成dbgenqgen两个可执行文件

  • dbgenqgen的详细介绍,可以读 dbgen/目录下的README文件

2.3 关于dbgen和qgen

dbgen

  • dbgen是一个用于TPC-H基准测试的数据库填充程序,通过dbgen可以在dbgen/目录生成TPC-H所需的8个ascii数据源文件
  • 每个数据源文件以<table>.tbl命名,例如,customer.tbl对应customer表的数据
  • 这些数据之间没使用|作为默认分隔符,可以修改dss.h 文件里面的 #define SEPARATOR '|' 来指定其他分隔符
  • 生成的数据集,默认Scale Factor为1,表示生成约1GB的数据
  • TPC-H支持的scale factor有:1、10、100、300、1000、3000、10000、30000、100000
  • 数据集的大小,不是一定成正比的,一般会比期望值小。
  • 例如,选择1000作为scale factor,生成的表都没有1000GB的,最大的才700多GB

qgen

  • README文件的介绍来看,qgen是一个用于TPC-H benchmark的查询生成程序
  • 笔者发现在编译tools的源代码前,dbgen/queries/目录中,已经存在了TPC-H 对应的22个SQL
  • 所以,到目前为止,笔者尚未体会到qgen的用途,如有新的收获,会再次更新

2.4 后台作业,生成数据集

  • 通过对dbgen的介绍可知,选择不同的scale factor,可以生成不同size的数据集

  • 不管选择什么scale factor,一定要保证自己的磁盘有足够的存储空间 !

  • 笔者选择1000作为scale factor,由于与服务的远程连接过段时间关闭,所以选择使用nohup创建后台作业,以成功生成对应的数据集

    nohup bash -c "./dbgen -s 1000 -f" > dbgen.log 2>&1 &
    
  • 数据生成任务,执行完成后,查看dbgen.log未发现任何报错信息

  • 最终,生成的.tbl的数据如下:

3. 导入数据到Hive表

3.1 创建Hive表

  • dbgen/dss.ddl文件中,已经存在创建表的SQL语句,但是其不符合Hive SQL的语法规范,需要改写为Hive SQL

  • 创建数Hive据库

    CREATE DATABASE tpch_1000x_orc;
    
  • 在Hive数据库中创建表

    USE tpch_1000x_orc;
    
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以按照以下步骤将 Hive 的配置文件 `hive-site.xml` 导入 SparkSQL 中: 1. 将 `hive-site.xml` 文件复制到 Spark 的配置目录下。默认情况下,Spark 的配置目录是 `$SPARK_HOME/conf`,其中 `$SPARK_HOME` 是 Spark 的安装路径。 2. 在 SparkSQL 中创建一个 `SparkSession` 对象,并在创建之前设置一些相关的配置项。可以参考下面的示例代码: ```scala import org.apache.spark.sql.SparkSession val spark = SparkSession .builder() .appName("SparkSQL with Hive integration") .config("spark.sql.warehouse.dir", "/user/hive/warehouse") // 设置 Hive 仓库目录 .config("hive.metastore.uris", "thrift://localhost:9083") // 设置 Hive Metastore 的连接地址 .enableHiveSupport() // 启用 Hive 支持 .getOrCreate() ``` 在上面的示例中,您需要根据您的实际环境修改 `spark.sql.warehouse.dir` 和 `hive.metastore.uris` 的值。`spark.sql.warehouse.dir` 是 Hive 仓库目录的路径,`hive.metastore.uris` 是 Hive Metastore 的连接地址。 3. 使用 `spark.sql` 对象执行 Hive 相关的操作。例如,您可以执行 SQL 查询、创建表等。下面是一个简单的示例: ```scala spark.sql("SELECT * FROM my_table").show() ``` 上述代码将执行一条查询语句,从名为 `my_table` 的 Hive 表中检索数据,并将结果显示在控制台上。 请注意,您还需要确保 Spark 和 Hive 的版本兼容,并且 Hive Metastore 服务正在运行。另外,如果您的 Spark 集群和 Hive Metastore 服务部署在不同的机器上,您需要相应地修改 `hive.metastore.uris` 的值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值