当前位置: 首页 > news >正文

kettle经验篇:Pentaho Repository 类型资源库卡顿问题

        2024年马上就结束了,终于在结束前解决了困扰许久的一个问题:kettle的Pentaho Repository 资源库异常卡顿。所以在此也梳理、记录下2024年的最后一个大问题。

项目场景

        工作中一个重要内容是数据中心项目,也就必不可少的要用到ETL技术,项目选用的是kettle工具来实现数据中心的ETL需求。

        kettle资源库是类似于TFS、GIT等代码管理工具;不同的是kettle资源库是用来管理kettle的ktr,kjb文件。具备内容管理、版本管理、依赖完整性检查等用途。

kettle资源库

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
CPUIntel至强金牌,8核
平台华为云
kettle客户端版本pdi-ce-9.3.0.0-428

对于这种卡顿问题,我也梳理了下几个方向开始排查:

序号方向
1客户端与服务端的版本不一致
2JVM内存太小
3磁盘读写速度太慢
4IO速度太慢
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操作的服务时间的。所以这个方向不对,解决失败。

ETL服务器IO性能

我曾经也见过一台数据库服务器IO性能极差,可以分享给大家做对比:

IO性能极差的服务器iostat输出

 

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、数据可视化、大数据、文案 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代&#xf…...

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文件中定义方法和数据的基本方式&#xff…...

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类型表示的具体时间点。到了时间点后&#xf…...

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

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

41道Django高频题整理(附答案背诵版)

解释一下 Django 和 Tornado 的关系&#xff1f; Django和Tornado都是Python的web框架&#xff0c;但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架&#xff0c;鼓励快速开发和干净、实用的设计。它遵循MVC设计&#xff0c;并强调代码复用。Django有…...

GeoServer发布PostgreSQL图层后WFS查询无主键字段

在使用 GeoServer&#xff08;版本 2.22.2&#xff09; 发布 PostgreSQL&#xff08;PostGIS&#xff09;中的表为地图服务时&#xff0c;常常会遇到一个小问题&#xff1a; WFS 查询中&#xff0c;主键字段&#xff08;如 id&#xff09;莫名其妙地消失了&#xff01; 即使你在…...