【Trino实战】Trino下ORC与Parquet查询性能分析

news2024/11/25 22:41:50

Trino下ORC与Parquet查询性能分析

环境

  • OS:CentOS 6.5

  • JDK:1.8

  • 内存:256G

  • 磁盘:HDD

  • CPU:Dual 8-core Intel® Xeon® CPU (32 Hyper-Threads) E5-2630 v3 @ 2.40GHz

  • HDFS:2.9.2

  • Hive:2.3.9

  • Trino:418

借助Trino对以下格式文件的查询耗时,来分析不同格式文件的查询效率

  • ORC
  • Parquet
  • TextFile
  • RCFile

实验数据准备

  1. 创建对应hive表

    ## 创建json临时表
     create table tmpjson(line string) row format delimited fields terminated by "\n";
    ## 利用hive客户端加载本地json数据文件
     LOAD DATA LOCAL INPATH '/opt/documents.json' OVERWRITE INTO TABLE test_trino.tmpjson;
    
    ## 创建国家主要城市表
     CREATE TABLE `test_trino.all_countries_orc`(
      `geonameid` bigint COMMENT '地名ID', 
      `name` string COMMENT '地名', 
      `latitude` double COMMENT '纬度',
      `longitude` double COMMENT '经度', 
      `country_code` string COMMENT '国家编码',
      `population` bigint COMMENT '城市人口数')
    COMMENT '国家城市表'
    ROW FORMAT SERDE 
      'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
    STORED AS INPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
    OUTPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat';
      
     CREATE TABLE `test_trino.all_countries_parquet`(
      `geonameid` bigint COMMENT '地名ID', 
      `name` string COMMENT '地名', 
      `latitude` double COMMENT '纬度',
      `longitude` double COMMENT '经度', 
      `country_code` string COMMENT '国家编码',
      `population` bigint COMMENT '城市人口数')
    COMMENT '国家城市表' STORED AS PARQUET;
    
     CREATE TABLE `test_trino.all_countries_rcf`(
      `geonameid` bigint COMMENT '地名ID', 
      `name` string COMMENT '地名', 
      `latitude` double COMMENT '纬度',
      `longitude` double COMMENT '经度', 
      `country_code` string COMMENT '国家编码',
      `population` bigint COMMENT '城市人口数')
    COMMENT '国家城市表' STORED AS RCFILE;
    
     CREATE TABLE `test_trino.all_countries_text`(
      `geonameid` bigint COMMENT '地名ID', 
      `name` string COMMENT '地名', 
      `latitude` double COMMENT '纬度',
      `longitude` double COMMENT '经度', 
      `country_code` string COMMENT '国家编码',
      `population` bigint COMMENT '城市人口数')
    COMMENT '国家城市表' STORED AS TEXTFILE;
     
     DESCRIBE hive.test_trino.all_countries_parquet;
     DESCRIBE hive.test_trino.all_countries_orc;
    
  2. 不采用任务压缩算法,将数据写入hive表

    # 不采用压缩,hive客户端会话配置
    SET hive.exec.compress.output=false;
    SET mapreduce.output.fileoutputformat.compress=false;
    
    # 数据复写到内部表all_countries_parquet中
     insert overwrite table `test_trino.all_countries_parquet` select json_tuple(line,'geonameid','name','latitude','longitude','country_code','population')as(geonameid,name,latitude,longitude,country_code,population) from test_trino.tmpjson;
     
    # 数据复写到内部表all_countries_orc中
      insert overwrite table `test_trino.all_countries_orc` select json_tuple(line,'geonameid','name','latitude','longitude','country_code','population')as(geonameid,name,latitude,longitude,country_code,population) from test_trino.tmpjson;
      
    # 数据复写到内部表all_countries_rcf中
      insert overwrite table `test_trino.all_countries_rcf` select json_tuple(line,'geonameid','name','latitude','longitude','country_code','population')as(geonameid,name,latitude,longitude,country_code,population) from test_trino.tmpjson;
      
    # 数据复写到内部表all_countries_text中
      insert overwrite table `test_trino.all_countries_text` select json_tuple(line,'geonameid','name','latitude','longitude','country_code','population')as(geonameid,name,latitude,longitude,country_code,population) from test_trino.tmpjson;
    

查询范围

验证范围

  • 单列
    • long型
    • string型
    • double型
  • 多列
  • 聚合
  • 条件聚合

查询语句

select count(1) from hive.test_trino.all_countries_parquet;
select count(1) from hive.test_trino.all_countries_orc;
select count(1) from hive.test_trino.all_countries_rcf;
select count(1) from hive.test_trino.all_countries_text;

select geonameid from hive.test_trino.all_countries_orc limit 10;
select geonameid from hive.test_trino.all_countries_parquet limit 10;
select geonameid from hive.test_trino.all_countries_rcf limit 10;
select geonameid from hive.test_trino.all_countries_text limit 10;

select name from hive.test_trino.all_countries_orc limit 10;
select name from hive.test_trino.all_countries_parquet limit 10;
select name from hive.test_trino.all_countries_rcf limit 10;
select name from hive.test_trino.all_countries_text limit 10;

select latitude from hive.test_trino.all_countries_orc limit 10;
select latitude from hive.test_trino.all_countries_parquet limit 10;
select latitude from hive.test_trino.all_countries_rcf limit 10;
select latitude from hive.test_trino.all_countries_text limit 10;

select geonameid,name from hive.test_trino.all_countries_orc limit 10;
select geonameid,name from hive.test_trino.all_countries_parquet limit 10;
select geonameid,name from hive.test_trino.all_countries_rcf limit 10;
select geonameid,name from hive.test_trino.all_countries_text limit 10;

select country_code,sum(population) from hive.test_trino.all_countries_orc group by country_code;
select country_code,sum(population) from hive.test_trino.all_countries_parquet group by country_code;
select country_code,sum(population) from hive.test_trino.all_countries_rcf group by country_code;
select country_code,sum(population) from hive.test_trino.all_countries_text group by country_code;

select country_code,sum(population) from hive.test_trino.all_countries_orc group by country_code order by country_code;
select country_code,sum(population) from hive.test_trino.all_countries_parquet group by country_code order by country_code;
select country_code,sum(population) from hive.test_trino.all_countries_rcf group by country_code order by country_code;
select country_code,sum(population) from hive.test_trino.all_countries_text group by country_code order by country_code;


select country_code,sum(population) from hive.test_trino.all_countries_orc where country_code='CN' and population>10000 group by country_code;
select country_code,sum(population) from hive.test_trino.all_countries_parquet where country_code='CN' and population>10000 group by country_code;
select country_code,sum(population) from hive.test_trino.all_countries_rcf where country_code='CN' and population>10000 group by country_code;
select country_code,sum(population) from hive.test_trino.all_countries_text where country_code='CN' and population>10000 group by country_code;

结果分析

千万级数据Hive存储对比
Trino对格式文件的查询
Trino千万级数据查询耗时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/651695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[n00bzCTF 2023] CPR 全

Crypto AES 给了java的加密原码,AES加密,有key import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.SecretKeySpec; import java.n…

arima模型原理及实战

目录 1,概念 2,数学知识 3,前提条件 4,序列不平稳时的平稳性方法 5,模型定阶,确定P和Q 6,模型训练与检验 1,概念 ARIMA模型(英语:Autoregressive Integr…

grep及文本处理命令

正则表达式 一.基础命令 1.grep命令 对文本的内容进行过滤,针对行处理 1.1grep格式 grep [选项]…查找条件 目标文件 1.2grep命令选项 -m数字——————匹配几次后停止eg:grep -m 1 root /etc/passwd————————————多个匹配只取 -v …

【编程语言 · C语言 · 递归函数】

递归函数 C 语言的函数都支持递归, 也就是说,每个函数都可以直接或者间接第调用自己。所谓的间接调用,是指在递归函数调用的下层函数中再调用自己。 递归关系图如下: 递归之所以能实现,是因为函数的每个执行过程在栈中都有自己的…

深入理解 SpringBoot 日志框架:从入门到高级应用——(三)Logback 输出日志到 MySQL 数据库

文章目录 添加依赖导入 SQL 文件配置 logback-spring.xml运行结果 Logback 是一个开源的日志框架,它支持多种日志输出方式,包括控制台输出、文件输出、邮件输出等。如果要将 Logback 输出的日志保存到 MySQL 数据库中,可以按照以下步骤进行配…

Tapd在研发团队中的使用技巧-持续更新ing

1.TAPD第三方服务集成能力,支持与代码仓库、流水线进行了深度打通,力求为开发团队提供流畅高效的使用体验。我们梳理了一份攻略,掌握下面几个小技能,让TAPD与代码仓库、流水线一起,成为研发团队的得力助手,…

数据结构算法刷题(27)回溯(子集型)

回溯思想: 思路:这种出现全部xx组合的,基本都是回溯算法。首先,当digits是空,那返回也是空。当回溯到边界条件的时候,就更新答案,在非边界条件的时候,循环该数值下的全部情况。 cla…

125760-33-0,Fmoc-Thr(Ac4Galβ1-3Ac2GalNAcα)-OH,于蛋白质糖基化修饰

文章关键词:糖化学试剂,化学试剂,糖基氨基酸一、试剂基团反应特点(Reagent group reaction characteristics): Fmoc-Thr(Ac4Galβ1-3Ac2GalNAcα)-OH中蛋白质糖基化修饰是在糖基转移酶的催化作用下糖链分子…

色环电阻介绍

复习一下色环电阻,是在电阻封装上(即电阻表面)涂上一定颜色的色环,来代表这个电阻的阻值。色环实际上是早期为了帮助人们分辨不同阻值而设定的标准。色环电阻现在应用还是很广泛的,如家用电器、电子仪表、电子设备中常常可以见到。但由于色环…

Java内存模型(JMM)和volatile原理

一、Java 内存模型 JMM即Java Memory Model,他定义了主存(共享的数据)、工作内存(私有的数据)抽象概念,底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等 JMM体现以下几个方面 原子性-保证指令不会受…

ad18报错:Minimum Solder Mask Sliver Constraint

报告上提示: Minimum Solder Mask Sliver (Gap0.254mm) (All),(All) Minimum Solder Mask Sliver Constraint,PCB焊盘阻焊层之间间距小于0.254报错 修改了这里,把这个报警值改小一些,就不会报警了 翻译过来是:最小…

8.vue3医疗在线问诊项目 - _问诊室模块-websocket学习 ==> 消息卡片、websocket、socket.io、约定通讯规则、建立连接

8.vue3医疗在线问诊项目 - _问诊室模块-websocket学习 > 消息卡片、websocket、socket.io、约定通讯规则、建立连接 问诊室-路由与组件 目标:配置路由和分析结构 1)路由配置 {path: /room,component: () > import(/views/room/index.vue)…

UNIX网络编程卷一 学习笔记 第二十章 广播

本书迄今为止的所有例子都是单播:一个进程与另一个进程通信。TCP只支持单播寻址,而UDP和原始IP还支持其他寻址类型,下图比较了不同的寻址方式: IPv6往寻址体系中增加了任播(anycasting)方式。RFC 1546讲述…

章节5:04-shiro反序列化漏洞

章节5:04-shiro反序列化漏洞 复现环境 本地tomcat或Docker vulhub 基础环境: IDEA Maven Tomcat Burp JDK8版 01 Shiro介绍 Shiro Apache Shiro:开源安全框架 身份验证授权会话管理加密 本地代码 https://github.com/apache/shi…

Iptables防火墙策略

目录 一、iptables netfilter/iptables 关系 二、四表五链 三、iptables的安装 iptables 命令行配置方法 管理选项 一、iptables Linux 系统的防火墙——netfilter/iptables IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables组成。 主要工作在网络…

MATLAB与大数据:如何应对海量数据的处理和分析

第一章:引言 在当今数字化时代,大数据已经成为了各行各业的核心资源之一。海量的数据源源不断地涌现,如何高效地处理和分析这些数据已经成为了许多企业和研究机构面临的重要挑战。作为一种功能强大的数学软件工具,MATLAB为我们提供…

深度剖析InnoDB存储结构

大家都知道 MySQL 的数据都是存储在物理磁盘上的,那具体是保存在哪个文件呢?我们首先要知道MySQL 存储的行为是由存储引擎实现的,不同的存储引擎保存的文件自然也不同。由于InnoDB 是我们常用的存储引擎,也是 MySQL 默认的存储引擎…

Spring Cloud Alibaba - Sentinel源码分析(二)

目录 一、Sentinel源码分析 1、时间窗算法 2、滑动时间窗算法 3、Sentinel滑动时间窗口算法源码解析 4、Sentinel滑动窗口数据统计源码解析 一、Sentinel源码分析 1、时间窗算法 时间窗算法,也可以称之为:固定时间窗算法 概念:固定时…

015:vue项目中常用的正则表达式

第015个 查看专栏目录: VUE — element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使用…

【RV1126】使用gpiolib框架

文章目录 史上最简单:增加GPIO控制功能是如何实现的呢?GPIOLIB框架Linux 驱动实现 控制引脚输出高低电平综合测试 这一套非常方便! 史上最简单:增加GPIO控制功能 如果是想增加GPIO控制只需要修改设备树就可以做到! …