kettle经验篇:Pentaho Repository 类型资源库卡顿问题
2024年马上就结束了,终于在结束前解决了困扰许久的一个问题:kettle的Pentaho Repository 资源库异常卡顿。所以在此也梳理、记录下2024年的最后一个大问题。
项目场景
工作中一个重要内容是数据中心项目,也就必不可少的要用到ETL技术,项目选用的是kettle工具来实现数据中心的ETL需求。
kettle资源库是类似于TFS、GIT等代码管理工具;不同的是kettle资源库是用来管理kettle的ktr,kjb文件。具备内容管理、版本管理、依赖完整性检查等用途。
kettle的资源库又分为以下3种
| 资源库类型 | 描述 | 适用性 |
| Database Repository(数据库资源库) | kettle的资源文件存储到数据库中 | 适合团队协同开发管理 |
| File Repository(文件资源库) | kettle的资源文件存储到本地 | 适合个人本地练习 |
| Pentaho Repository | 需要部署kettle的服务端,kettle的资源文件存储在服务端。具备内容管理、版本管理、依赖完整性检查等用途。 | 适合团队协同开发管理 |
所负责的项目使用的是Pentaho Repository类型资源库;其实有看到网上很多朋友对Pentaho Repository的评价不高,很多文章都推荐使用Database Repository类型资源库。起初在kettle8.3及之前的版本,Pentaho Repository类型资源库确实体验感不好,非常卡顿!但是从9.2版本开始,Pentaho Repository类型资源库的体验感其实非常不错了,使用流畅的基础上再加上强大的管理功能让我们坚定的选择了Pentaho Repository类型资源库。
但是此次的问题是我负责的项目上使用的9.4版本的Pentaho Repository类型资源库使用起来莫名其妙卡顿,卡的佛系的人都要摔鼠标的那种卡。具体体现举例如下:
1、kettle客户端在连接服务端的Pentaho Repository资源库时,需要几十秒甚至几分钟才能连上;
2、在打开kettle的转换或者作业时,有时卡顿,有时不卡顿;
3、在保存kettle的转换或者作业时,每次都卡顿;
4、导入一个5M大小的资源库,甚至需要10分钟才能完成导入;
........
这些问题,让小伙伴们苦不堪言。实在无奈,我让大家先临时使用本地资源库进行ETL开发,但几百甚至上千个ETL转换作业管理起来实在是难受。在技术总监看了两次表达了“欸,其他项目都是没问题的,怎么你这不行...”的观点后,我开始了自研之路 ~
问题排查
先说下问题解决前的Pentaho Repository资源库情况。
| 项目 | 描述 |
| Pentaho Server版本 | Pentaho Server 9.4.0.0-343 |
| 操作系统 | Anolis OS 8.9(龙蜥) |
| 操作系统内核 | rhel |
| 内存 | 32G |
| CPU | Intel至强金牌,8核 |
| 平台 | 华为云 |
| kettle客户端版本 | pdi-ce-9.3.0.0-428 |
对于这种卡顿问题,我也梳理了下几个方向开始排查:
| 序号 | 方向 |
| 1 | 客户端与服务端的版本不一致 |
| 2 | JVM内存太小 |
| 3 | 磁盘读写速度太慢 |
| 4 | IO速度太慢 |
| 5 | 网络问题,传输速度太慢 |
| 6 | 其他 |
下面就开始了逐步排查:
1、客户端与服务端的版本不一致
重新下载了9.4的kettle客户端,客户端配置与资源库用户配置完成后,第一步连接资源库就还是老样子开始卡顿;然后开始测试ETL开发、保存转换、导入资源库,均和之前的效果一致,卡顿的不得了。所以这个方向不对,解决失败。
2、JVM内存太小
Pentaho Server是用tomcat发布的,所以会从JVM内存这个方向上考虑。但和一个tomcat颇有研究的同事聊完后,了解了tomcat会自动调配内存。而且其他项目的服务在发布时也从未调整过初始内存大小。所以这个方向不对,解决失败。
3、磁盘读写速度太慢
使用dd命令测试磁盘读写速度,测试发现磁盘读写速度每秒300多M,读写速度正常。所以这个方向不对,解决失败。
[root@ETLServer home]# dd if=/dev/zero of=/home/testfile bs=1M count=1024 conv=fdatasync,notrunc status=progress
记录了1024+0 的读入
记录了1024+0 的写出
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 2.84533 s, 377 MB/s
4、 IO速度太慢
因为在打开资源库文件和保存时也会涉及到IO,所以怀疑磁盘与CPU及内存之间的通信接口的性能是不是存在问题。于是使用iostat命令测试服务器的IO性能,发现其实服务器首先是没什么IO,其次是仅有的IO体现出的性能并没有问题。因为从iostat的输出上,等待是小于平均每次设备IO操作的服务时间的。所以这个方向不对,解决失败。
我曾经也见过一台数据库服务器IO性能极差,可以分享给大家做对比:
5、网络问题
在上述基本资源配置排查完后,开始排查网络。其实我潜意识里不认为网络有问题,因为很多数据库服务器和应用服务器都同属于一个网段,路由追踪发现其实都是只跳了两个路由。但实在是没招了,所以用wireshark在服务端和客户端同时抓包开始分析。
这次还真发现了一个问题,就是每次保存kettle转换时,总会固定有个seq位1的包延迟。但是对比发包和收包发现网络传输速度没有问题,是服务端那边响应太慢。
所以网络问题这个方向也不对,解决失败。

6、其他
经过上面的排查,感觉已经黔驴技穷了,实在不知道还能有什么方向去思考。于是无聊期间在自己本地的VMware虚拟机上部署了台centos7,然后发布了Pentaho Server资源库服务。用客户端连接以后,发现速度很快,体验感很好。这个时候突然想起了高中生物书上的对比实验法,既然发布的程序是一样的,IO、磁盘、网络、内存都没问题;那么有问题的只能是---------华为云平台或者国产龙蜥8.9!
于是我找到负责服务器的老师,和他讨论此事。服务器老师说,除了华为云平台还可以从VMware上给我划一台服务器,但是国产龙蜥不能换,因为会有检查,但龙蜥的操作系统还是可以给我选择红帽的内核。我咬咬牙点头,那就先换到VMware上试试。
很快,在VMware上给划了台龙蜥8.9。我快速发布完Pentaho Server,然后我非常紧张的去打开Pentaho Server的web配置用户,在打开web的一瞬间,我觉得这次成了!因为以前打开web都非常慢,这次非常快!然后客户端连到Pentaho Server资源库,开始测试打开、修改、保存转换,导入导出资源库;一切都非常的流畅!
这个时候已经非常激动了,但还是决定苟一会儿。在多台设备上都测试没有问题后,终于长长的呼出一口气~ 终于解决了!
问题总结
但要说为什么Pentaho Server在华为云上不行,我不知道。我只是通过不断的测试排查,最终定位到了云平台上。当排除了所有的可能选项后,那个看似不可能的选项也是正确的。
至于华为云究竟哪里存在问题,后续研究明白了会再来和大家汇报分享。
提前祝大家2025新年快乐!🎇🎇🎇
相关文章:
kettle经验篇:Pentaho Repository 类型资源库卡顿问题
2024年马上就结束了,终于在结束前解决了困扰许久的一个问题:kettle的Pentaho Repository 资源库异常卡顿。所以在此也梳理、记录下2024年的最后一个大问题。 项目场景 工作中一个重要内容是数据中心项目,也就必不可少的要用到ETL技术&#x…...
python opencv的sift特征检测(Scale-Invariant Feature Transform)
sift 官方文档地址:https://docs.opencv.org/4.10.0/da/df5/tutorial_py_sift_intro.html 创建SIFT实例cv2.SIFT.create()特征检测sift.detect描述子sift.compute/sift.detectAndCompute画特征cv2.drawKeypoints 原图 特征点 代码 import cv2first ./12.pngsif…...
若依定时任务
表结构 目录 quartz框架 SysJobServiceImpl实现类 使用切点,在构造器执行的时候执行定时任务的构建(这个类是交给IOC容器的,所以这个时间点就是项目启动的时候)SysJobServiceImpl实现类的init方法创建任务 /*** 创建定时任务*/public static void createScheduleJob(Scheduler …...
k8s-node2 NotReady 节点NotReady如何解决?
从集群中移除 k8s-node2 [rootk8s-master ~]# kubectl delete node k8s-node2 node "k8s-node2" deleted重置 k8s-node2 登录到 k8s-node2 上,使用以下命令重置该节点,使其退出集群并恢复到初始状态: [rootk8s-node2 ~]# sudo k…...
Ubuntu通过mDNS实现局域网local域名和octoprint域名访问
OctoPrint是一个开源的3D打印机控制软件,它提供了一个Web界面,允许用户远程监控和管理3D打印机。通过USB连接到打印机后,用户可以使用任何带有Web浏览器的设备来控制打印作业,包括开始、停止、暂停打印,以及在打印过程…...
短视频矩阵账号管理技术源码搭建详解,支持OEM
一、引言 在短视频矩阵系统中,账号管理是至关重要的一环,它涉及到多平台账号的接入、用户信息的安全存储与高效管理、权限的精准控制以及账号数据的同步与更新等关键功能。一个健壮、灵活且安全的账号管理技术架构,能够为整个短视频矩阵系统的…...
【源码 导入教程 文档 讲解】基于springboot校园新闻管理系统源码和论文
可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C、python、数据可视化、大数据、文案 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代…...
Spark SQL DML语句
【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 Spark本地模式安装_spark3.2.2本地模式安装-CSDN博客 DML(Data Manipulation Language,数据操作语言)操作主要用来对…...
开发微信小程序的过程与心得
起因 作为家长,我近期参与了学校的护学岗工作。在这个过程中,我发现需要使用水印相机来记录护学活动,但市面上大多数水印相机应用都要求开通会员才能使用完整功能。作为一名程序员,我决定利用自己的技术背景,开发一个…...
【1224】数据结构(sizeof/数组的长度定义/读取字符串函数/线性表长度/左值右值/静态变量/指针与引用)
1.对一维整型数组a的正确说明是 #define SIZE 10 (换行) int a[SIZE];说法是否正确? 正确 数组的SIZE可以用宏定义,但不能用变量 2.如有定义:char str[20];,能将从键盘输入的字符串“How are you”保存到 str 数组的语句是&#x…...
Android笔记(四十一):TabLayout内的tab不滚动问题
背景 假设二级页面是上面图片的布局,当进来时TabLayout和ViewPager2绑定完就马上调setCustomItem,跳转到最后一个tab页面时,会发现tab不滚动,手动滑一下ViewPager2时才会滚动tab到正确的位置 原因分析 调用TabLayoutMediator.at…...
基于pytorch的深度学习基础3——模型创建与nn.Module
三 模型创建与nn.Module 3.1 nn.Module 模型构建两要素: 构建子模块——__init()__拼接子模块——forward() 一个module可以有多个module; 一个module相当于一个运算,都必须实现forward函数; 每一个mod…...
Debian-linux运维-docker安装和配置
腾讯云搭建docker官方文档:https://cloud.tencent.com/document/product/213/46000 阿里云安装Docker官方文档:https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance 天翼云常见docker源配置指导:htt…...
Docker完整技术汇总
Docker 背景引入 在实际开发过程中有三个环境,分别是:开发环境、测试环境以及生产环境,假设开发环境中开发人员用的是jdk8,而在测试环境中测试人员用的时jdk7,这就导致程序员开发完系统后将其打成jar包发给测试人员后…...
在JavaScript文件中定义方法和数据(不是在对象里定以数据和方法,不要搞错了)
在对象里定以数据和方法看这一篇 对象字面量内定义属性和方法(什么使用const等关键字,什么时候用键值对)-CSDN博客https://blog.csdn.net/m0_62961212/article/details/144788665 下是在JavaScript文件中定义方法和数据的基本方式ÿ…...
python爬虫爬抖音小店商品数据+数据可视化
爬虫代码 爬虫代码是我调用的数据接口,可能会过一段时间用不了,欢迎大家留言评论,我会不定时更新 import requests import time cookies {token: 5549EB98B15E411DA0BD05935C0F225F,tfstk: g1vopsc0sQ5SwD8TyEWSTmONZ3cA2u6CReedJ9QEgZ7byz…...
关于 覆铜与导线之间间距较小需要增加间距 的解决方法
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/144776995 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...
uniapp中Nvue白屏问题 ReferenceError: require is not defined
uniapp控制台输出如下 exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught ReferenceError: require is not defined 或者 exception function:createInstanceContext, exception:white s…...
在 Windows 上,如果忘记了 MySQL 密码 重置密码
在 Windows 上,如果忘记了 MySQL 密码,可以通过以下方法重置密码: 方法 1:以跳过权限验证模式启动 MySQL 并重置密码 停止 MySQL 服务: 打开 命令提示符 或 PowerShell,输入以下命令停止 MySQL 服务&#…...
《PyTorch:从基础概念到实战应用》
《PyTorch:从基础概念到实战应用》 一、PyTorch 初印象二、PyTorch 之历史溯源三、PyTorch 核心优势尽显(一)简洁高效,契合思维(二)易于上手,调试便捷(三)社区繁荣&#…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
41道Django高频题整理(附答案背诵版)
解释一下 Django 和 Tornado 的关系? Django和Tornado都是Python的web框架,但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架,鼓励快速开发和干净、实用的设计。它遵循MVC设计,并强调代码复用。Django有…...
GeoServer发布PostgreSQL图层后WFS查询无主键字段
在使用 GeoServer(版本 2.22.2) 发布 PostgreSQL(PostGIS)中的表为地图服务时,常常会遇到一个小问题: WFS 查询中,主键字段(如 id)莫名其妙地消失了! 即使你在…...
