FCon7折倒计时最后一周:日程已上线70%!查看详情>>> 了解详情
写点什么

性能提升 400%,ClickHouse 在携程酒店数仓的实践

  • 2020-10-07
  • 本文字数:1670 字

    阅读完需:约 5 分钟

性能提升400%,ClickHouse在携程酒店数仓的实践

一、背景

随着时间推移和业务的快速发展,携程酒店数据累积越来越多。目前流量日数据在 3T 左右,再加上各种订单、价、量、态等数据更是庞大。现有 Hive(Spark 引擎)执行速度虽然相对较快,但在国际化发展背景下,一些海外业务由于时差问题,数据需要比国内提前数小时完成,性能提升迫在眉睫。2020 年初,我们开始研究 ClickHouse 在数据仓库领域应用。


本文将从技术方案选型、集成开发环境封装、ClickHouse 代码优化技巧、异常问题处理、服务器故障处理五个方面分享 ClickHouse 实践,希望给关注同样问题的同学有所启发。

二、技术预研与技术方案选型

1)公司内部有无 ClickHouse 集群使用环境。经过了解知晓,原 ClickHouse 验证集群正准备下线,无可用环境;


2)办公电脑通过 Vmware 搭建 ClickHouse 集群,部分同学基于单机练习 ClickHouse 语法以及验证各项 ClickHouse 特性,部分专攻 ClickHouse 集群搭建及各项配置、集成开发环境的封装等底层功能。


3)2020 年 3 月,Vmware 搭建 ClickHouse 集群基本完成各项验证,同时 4 台物理服务器(配置:内存-256G,CPU-40core,硬盘-3.5T)到位。为保证对生产平稳过渡(不给生产 DB 造成额外压力),我们从 Hive ODS 层同步数据至 ClickHouse ODS 层,技术方案如下图 1(橙色部分是 ClickHouse 实现部分):



图 1

三、集成开发环境封装

1)数据同步工具封装

我们发现消耗在数据同步上的时间太多,是数据计算时间的十几倍。于是开始研究ClickHouse数据导入方式,其中一种如下:

cat filename.orc | clickhouse-client -- query="INSERTINTO some_table FORMAT ORC"

在此基础上通过缓存、批处理等机制封装成新的orc2ck.sh同步工具,使同步速度比原先工具的性能提高500%以上。

2)集成开发工具封装

为了提高开发效率,减少代码冗余,我们封装了ClickHouse代码执行工具ck.sh,执行环境如下图2(橙色部分是应用代码部分,红色框部分是封装工具及参数)。

图2

四、ClickHouse代码优化技巧

1)小表置于join右侧降低内存消耗

2)用in替代join提高执行速度

3)减少数据扫描提高执行速度

通过增加过滤逻辑可以减少数据扫描,达到提高执行速度及降低内存消耗的目的。

五、异常问题处理

Code: 252, e.displayText() = DB::Exception: Too many parts (301) . Merges are processing significantly slower than inserts.

解决这个问题需要先分析Merge过程,如下图所示:

Merge过程是异步的,插入速度过快会导致以上错误,一般建议速度100w/s。

Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded

这种错误是请求内存高于系统分配内存导致,解决这类问题可以从两方面入手:

  • 在服务器内存充裕的情况下增加内存配额,一般通过max_memory_usage来实现;

  • 在服务器内存不充裕的情况下,建议将超出部分内容分配到系统硬盘上,但会降低执行速度;一般通过max_bytes_before_external_group_by 、max_bytes_before_external_sort参数来实现。

如果以上方法仍然无法解决问题,需要检查代码是否合理,从代码角度去优化(参考代码优化技巧部分)。

六、服务器故障处理

故障背景 :故障演练导致ClickHouse服务器被强行重启,ClickHouse服务无法正常启动。

解决办法 :根据ClickHouse错误日志 (clickhouse-server.err.log) 定位问题,发现ClickHouse服务启动时无法加载表的元数据,处理方式有两种:

1)删除或移走该表对应数据文件(本次故障使用了该方式,下图为错误日志)。

2)重建该表元数据(此方式更为合理)。

七、小结

截止2020年上半年,携程酒店订单主题以及P1体系报表已经全部实现完毕,大部分性能提升在200%以上,整体性能提升平均在400%左右,基本解决大部分应用场景的问题,后期我们将整合更多主题入仓,充分发挥ClickHouse的性能优势,进一步提升效率。此外,我们也在研究Flink+ClickHouse技术,推进实时数仓建设。

作者介绍

小琴,携程高级数据经理,负责酒店BI、数仓工作,专注于大数据应用领域多年。

本文转载自公众号携程技术(ID:ctriptech)。

原文链接

性能提升400%,ClickHouse在携程酒店数仓的实践




2020-10-07 10:003016

评论

发布
暂无评论
发现更多内容

第十届中国云计算标准和应用大会落幕 灵雀云Kube-OVN斩获优秀开源项目奖

York

灵雀云 Kubernetes k8s Kube-OVN

把成员变量转换成局部变量会更快吗?

雨后小溪

Java

DeFi去中心化金融借贷系统开发有哪些需要了解的?

W13902449729

defi 去中心化金融借贷系统开发

面向开发者的播客清单

LeanCloud

程序员 开发者 苹果 私有云 播客

架构师训练营第十二周作业

李日盛

作业

细节爆炸!腾讯用13个案例实战讲明白MySQL,没想到这么全

996小迁

Java MySQL 架构 面试 程序人生

视频课程|Kube-OVN 入门与应用实战 (第4期)

York

灵雀云 Kubernetes k8s Kube-OVN

架构师训练营第 1 期 -大作业2

习习

@Repeatable注解作用

张健

又双叕更新,开源网络插件Kube-OVN 1.4.0 版发布!支持跨集群容器网络、NetworkPolicy 日志

York

灵雀云 Kubernetes k8s Kube-OVN

区块链挖矿软件系统开发|区块链挖矿APP开发

系统开发

灵雀云Kube-OVN 1.5.0新版本发布,支持鲲鹏云平台网络平面部署

York

灵雀云 Kubernetes k8s Kube-OVN

MDF智能合约系统开发技术

薇電13242772558

智能合约 dapp

Spark 扫描 HDFS lzo/gz/orc异常压缩文件

笨小康

大数据 spark hdfs

一文读懂HTML和CSS的关系

博文视点Broadview

架构师第七周总结

Geek_xq

参加模拟交易活动,抢先一步体验全新升级版EternalWallet!

Geek_c610c0

数字货币 crypto 数字货币钱包开发

架构师训练营第十二周笔记

李日盛

灵雀云亮相KubeCon 揭秘Kube-OVN IPAM容器网络实践

York

灵雀云 Kubernetes k8s Kube-OVN

SpringCloud 从入门到精通 03---自动生成数据模型

Felix

Serverless 在 SaaS 领域的最佳实践

阿里巴巴云原生

云计算 阿里云 开发者 云原生 消息中间件

Linux Socket 编程

赖猫

c++ Linux linux编程 linux运维 linux开发

【得物技术】App需要什么样移动网关

得物技术

App 后端 网关 得物技术 移动端

视频课程|Kube-OVN 入门与应用实战 (第3期)

York

灵雀云 Kubernetes k8s Kube-OVN

【架构中的物联网】影子机制

soolaugust

架构 物联网 28天写作

架构师训练营第 1 期 - 大作业 1

习习

当我们谈论云原生网络时,Kube-OVN 究竟能带来什么?(下)|视频回顾

York

灵雀云 Kubernetes k8s Kube-OVN

用 JSX 建立组件 Parser(解析器)

三钻

JavaScript 大前端 组件化

联通链:5G时代的信任链

CECBC

中国联通

区块链多币种钱包系统软件开发|区块链多币种钱包APP开发

系统开发

TCP波场拼智能合约系统开发技术

薇電13242772558

智能合约 dapp

  • 扫码添加小助手
    领取最新资料包
性能提升400%,ClickHouse在携程酒店数仓的实践_大数据_小琴_InfoQ精选文章