Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >关于Presto对lzo压缩的表查询使用记录

关于Presto对lzo压缩的表查询使用记录

作者头像
WHYBIGDATA
发布于 2023-01-31 03:47:07
发布于 2023-01-31 03:47:07
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

关于Presto对lzo压缩的表查询使用记录

  • 0.写在前面
  • 1.正文
    • 0.提前说明
    • 1.查询ads层表
    • 2.查询dwd|dws|dwt层表
    • 3.查询ods层表


0.写在前面

  • 实验背景:离线数仓项目
  • Presto版本:0.196
  • Hive版本:3.1.2
  • Hadoop版本:3.1.3

1.正文

0.提前说明

  • 纯lzo压缩:ods层
  • parquet列式存储加lzo压缩:dwd,dws,dwt层
  • 普通文本文件:ads层

1.查询ads层表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from ads_visit_stats;

❝ads层的查询没有任何问题。 ❞

2.查询dwd|dws|dwt层表

❝「Presto不支持parquet列式存储加lzo压缩的表的查询」 ❞

Presto-Client查询语句:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from dwd_start_log;

Presto-Client查询出错:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Query 20220914_021316_00014_sthct, FAILED, 2 nodes
Splits: 22 total, 0 done (0.00%)
0:01 [0 rows, 0B] [0 rows/s, 0B/s]

查看Presto-Client查询出错的日志文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node01 presto]$ tail -500 data/var/log/server.log

信息如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Query 20220914_021316_00014_sthct failed: Can not read value at 0 in block -1 in file hdfs://node01:8020/warehouse/gmall/dwd/dwd_start_log/dt=2020-06-15/000001_0
vim /opt/module/presto-0.196/data/var/log/server.log
Caused by: parquet.hadoop.BadConfigurationException: Class com.hadoop.compression.lzo.LzoCodec was not found
	at parquet.hadoop.CodecFactory.getCodec(CodecFactory.java:161)
	at parquet.hadoop.CodecFactory.getDecompressor(CodecFactory.java:178)
	at parquet.hadoop.ParquetFileReader$Chunk.readAllPages(ParquetFileReader.java:610)
	at parquet.hadoop.ParquetFileReader.readNextRowGroup(ParquetFileReader.java:496)
	at parquet.hadoop.InternalParquetRecordReader.checkRead(InternalParquetRecordReader.java:127)
	at parquet.hadoop.InternalParquetRecordReader.nextKeyValue(InternalParquetRecordReader.java:208)
	... 16 more

很明显,error显示为com.hadoop.compression.lzo.LzoCodec没有找到

❝对接lzo压缩包的要放置在presto安装目录下的 plugin/hive-hadoop2目录下 ❞

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node01 hive-hadoop2]$ cp /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar ./
  • 分发lzo的jar包
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node01 hive-hadoop2]$ my_rsync ./hadoop-lzo-0.4.20.jar
  • 重启Presto-server
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node01 presto]$ xcall.sh /opt/module/presto-0.196/bin/launcher stop
[root@node01 presto]$ xcall.sh /opt/module/presto-0.196/bin/launcher start
  • 超时|集群仍在初始化,没有足够的活跃的worker节点去执行查询语句 需要等待一会。
  • 执行查询语句,不再报错
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
presto:gmall> select * from dwd_start_log

3.查询ods层表

  • ods_log表是纯lzo压缩
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
presto:gmall> select * from ods_log;

美团技术团队文章关于「Presto二次开发和BUG修复」提到:Presto不支持查询lzo压缩的数据,需要修改hadoop-lzo的代码

❝https://tech.meituan.com/2014/06/16/presto.html ❞

  • 解释说明

Presto是即席查询工具,ods层的数据含有敏感数据脏数据通常情况下,数据查询不需要对ods层查询,对于本项目而言,即便Presto读取不了ods层数据,也影响不大。

  • 解决方案

对于这个问题,需要修改hadoop-lzo的代码,美团的解决方案开源在Github上:

❝https://github.com/MTDATA/presto/commits/mt-0.60 ❞


❝顺利结束 ❞

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WHYBIGDATA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验