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 核心优势尽显(一)简洁高效,契合思维(二)易于上手,调试便捷(三)社区繁荣&#…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
