如何部署WebSpoon9.0.0(Kettle的Web版本)

news2025/2/27 5:30:02

前言

Kettle 是小有名气的开源ETL工具,现已改名为PDI(Pentaho Data Integration),其Web版本为:WebSpoon,本文记录了从官方Git仓库中拉取代码并成功运行的过程。

一、在本地拉取并编译项目

参考来源:Kettle的Git官方页面的webspoon-9.0分支的README文件

编译依赖项目

根据 _Build and locally publish dependent libraries _部分可知,需要预先在本地编译部分依赖项目。

pentaho-xul-swt

$ git clone -b webspoon-9.0 https://github.com/HiromuHota/pentaho-commons-xul.git
$ cd pentaho-commons-xul
$ mvn clean install -pl swt

rap

$ git clone -b webspoon-3.12.0 https://github.com/HiromuHota/rap.git
$ cd rap
$ mvn clean install

在mvn install出现报错时,可能的解决方案:
jetty-repo 版本修改为:9.4.48.v20220622
rap-extra-repo 修改为: https://download.eclipse.org/rt/rap/base-platforms/3.14/extra-dependencies/

pentaho-vfs-browser

$ git clone -b webspoon-9.0 https://github.com/HiromuHota/apache-vfs-browser.git
$ cd apache-vfs-browser
$ mvn clean install

将上述三个依赖项目编译后,在maven仓库的对应目录下会生成相应的jar文件。

编译本体项目

$ git clone -b webspoon-9.0 https://github.com/HiromuHota/pentaho-kettle.git
$ cd pentaho-kettle
$ mvn clean install

成功示例:
(在assemblies模块下的client模块中的target文件夹内生成对应的wer包)
WebSpoon编译成功示例

可能的报错:

  1. 大面积报错找不到pom文件

解决方法:根据 Kettle官方Git页面master分支的README文件 中的setting.xml文件配置maven

  1. 找不到某个依赖的artifact文件

下图为示例:
WebSpoon编译报错示例
原因分析及解决方案:maven配置的pentaho-public镜像地址所在的仓库有一些依赖版本缺失,当出现此错误后分析了项目源码,并未搜索到缺失依赖版本的明文引用,但是在编译时仍有报错,所以可以认为是在编译时由于间接引用了特定版本导致了报错。通过去pentaho-public仓库中逐个查找发现确实没有报错的pom版本(恰好丢失了该版本),一个取巧的解决方法是在本地的maven仓库目录中新建该版本,并将最临近的最新一版的pom及签名文件复制进去,在按需改名后即可通过编译。如: 报错1.2版本丢失,经仓库地址查找发现确实不存在1.2版本,但是有1.3版本,就可以把1.3版本复制到本地1.2对应目录下并改成对应的名字,以实现绕过maven的检查机制。

二、在本地运行项目

  1. 将war包放在 \webapps 文件夹下(示例:pdi-ce-9.0.0.0-423-22.war)

  2. 修改tomcat主目录/conf/server.xml文件, 在标签内加入:

<Context path="/pdi" docBase="pdi-ce-9.0.0.0-423-22" reloadable="false" source="org.eclipse.jst.jee.server:tsj-spring"/>
<!-- /pdi为浏览器地址栏ip:port后的访问地址 -->
<!-- docBase中的pdi-ce-9.0.0.0-423-22为项目在webapps目录下的实际路径 -->
  1. 访问本地url:http://localhost:8080/pdi/spoon

  2. 完成数据库的连接工作(数据库的准备工作略去)

    • 下载MySQL的jdbc驱动文件:mysql-connector-java-5.1.49.jar(因版本过高的jdbc文件目录结构改变,kettle无法支持)
    • 将驱动文件放置于:tomcat主目录\webapps\pdi-ce-9.0.0.0-423-22\WEB-INF\lib

三、在服务器运行项目

  1. 拉取docker镜像
docker pull hiromuhota/webspoon
  1. 创建并运行docker容器
docker run -d -p 8080:8080 hiromuhota/webspoon --name webspoon --restart=always
#-d 后台映射
#8080:8080 服务器实际端口:映射的容器端口
#hiromuhota/webspoon 要运行的镜像名称
#--name webspoon 容器名设定为webspoon
#--restart=always 容器设定为随docker重启而自动重启
#记得打开服务器的端口防火墙
  1. 测试运行结果:http://服务器IP:8080/spoon/spoon
  2. 汉化界面(可选)
  3. 上传MySQL驱动文件至容器内
cd /home/upload_files/
#无此文件夹则创建,将驱动文件上传至本目录下

docker cp mysql-connector-java-5.1.49.jar webspoon:/usr/local/tomcat/webapps/spoon/WEB-INF/lib
#将MySQL驱动复制到容器webspoon的/usr/local/tomcat/webapps/spoon/WEB-INF/lib路径下面

docker restart webspoon
#重启以生效,并在浏览器进行数据库连接测试
  1. 挂载服务器本地路径至容器内,方便文件的生成与交换

参考文章
可能出现的问题:

  1. systemctl start docker启动失败
    解决办法:使用systemctl status docker确认启动状态,根据报错信息修复配置文件
doker ps 
cd /var/lib/docker/containers/容器id
systeamctl stop docker
#获取容器id,进入容器配置路径修改配置文件

"/home/pdi_files": {"Source": "/home/kettle/pdi_files","Destination": "/home/pdi_files","RW": true,"Name": "","Driver": "","Type": "bind","Propagation": "rprivate","Spec": {"Type": "bind","Source":"/home/kettle/pdi_files","Target": "/home/pdi_files"},"SkipMountpointCreation": false}
## 修改config.v2.json,将本地的/home/kettle/pdi_files 路径映射到容器的 /home/pdi_files

"Binds":["/home/kettle/pdi_files:/home/pdi_files"]
#修改hostconfig.json

systemctl start docker
docker start 容器名
#重启docker及容器
# 挂载失败时会无法找到并启动容器,需要二次确认配置文件是否修改正确

docker exec -it 容器名 /bin/bash 
# 进入容器路径确认是否挂载成功
  1. 配置文件夹权限

如果没有对容器内的路径做权限配置,文件将无法读取和写入

sudo docker exec -it -u root 容器id bash
# 以root权限进入容器

cd /home/
chmod 777 ./pdi_files
#给特定目录赋权
  1. 自定义数据库表并测试转换任务

测试数据库表组成示例

成功的转换示例

该作业涉及到表输入、文件输出、文件输入、表输出、日志记录,可以简单测试pdi是否成功工作。

结束语

  • Git拉项目确实要多看一下README文件,该有的准备工作不可少
  • PDI的C/S和B/S架构、页面都差不多,可看作是孪生项目
  • 市面上支持Web端且免费的ETL工具不多,WebSpoon可作为一个选择

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Echarts实现可视化数据大屏大数据可视化

前言 &#x1f680; 基于 Echarts 实现可视化数据大屏响应式展示效果的源码,&#xff0c;基于htmlcssjavascriptecharts制作&#xff0c; 可以在此基础上重新开发。 本项目中使用的是echarts图表库&#xff0c;ECharts 提供了常规的折线图、柱状图、散点图、饼图、K线图&…

flex 的 三个参数:flex-grow、flex-shrink、flex-basis

前言&#xff1a; 之前对于 flex 布局没有太深刻的理解&#xff0c;往往就只是给 父元素加上 display&#xff1a;flex 属性&#xff0c;在近期学习的过程中了解到 flex 属性是 flex-grow、flex-shrink、flex-basis 三个属性的缩写&#xff0c;来看下面这一个例题&#xff0c…

基于Java Web的图书管理系统

目录 1.系统简要概述 2.系统主要用到的数据库表 3.主要功能 管理员&#xff1a; 用户&#xff1a; 3.1管理员功能 3.11登录 3.12添加学生 3.13查看学生 3.14删除学生 3.15添加书籍 3.16查看书籍 3.2用户端功能 3.2.1登录 3.2.2注册 3.2.3查询图书 3.2.4借阅书籍…

前端实现分页效果

前言 在实际开发中&#xff0c;大部分分页都是配合后端完成的。但是&#xff0c;有时候并不是这样&#xff0c;并非不是这样。后端会一次性返回所有的数据&#xff0c;而我们前端不可能展示所有数据&#xff0c;而是弄一个分页效果。还有一些场景也是需要前端自己弄的分页&…

JavaWeb项目(登录注册页面)全过程详细总结

JavaWeb项目(登录注册页面)全过程总结 文章目录JavaWeb项目(登录注册页面)全过程总结一、环境准备与开发工具二、创建 JavaWeb 项目2.1 新建Dynamic Web Project项目2.2 创建前端页面2.2.1 登录页面1.login.jsp2. login.js3. time.js4. focus.js animate.js2.2.2 注册页面&…

如何使用nvm切换npm版本

我比较懒惰,如非必要,不喜欢npm版本切换来切换去,感觉浪费我编程的时间.后来发现,现在偷的懒都是为将来的忙碌埋下的祸根. 言归正传,本文主要是讲解一下,如何使用nvm进行npm版本的切换. 工欲善其事必先利其器,我们先下载nvm;直接上下载链接(针对windows哈,毕竟我没mac本); 下载…

前端开发工程师简历

简历是什么 找工作之前投递的个人信息和工作能力----不全面 应该是&#xff1a;个人当前阶段的价值体现 前者&#xff1a;我能卖多少钱&#xff1b;后者&#xff1a;我现在值多少钱 建议&#xff1a;每隔半年/一年给自己做总结的时候写一份简历&#xff08;相当于个人价值总结…

render函数

render函数 通常我们都会把我们的页面结构逻辑都写在 template 中&#xff0c;然后再通过vue将我们的代码转换成虚拟DOM&#xff0c;相比于真实DOM&#xff0c;虚拟DOM是通过js代码处理的&#xff0c;所以消耗的性能相对较小&#xff0c;当然大部分情况下使用 template 创建我…

(详解)Vue设置select下拉框的默认选项(解决select空白的bug)

最近在用vue设置表单数据时发现了一个小问题&#xff1a;用vue动态渲染select下拉框时&#xff0c;select下拉框会出现空白的bug。 <template><div><select name"art-cate" v-model"select"><option disabled selected style"d…

Vue项目启动出现的问题及解决方法

今天在公司入职第二天&#xff0c;昨天拉下来的代码没有跑起来&#xff0c;看了各种博客也没有解决这个报错 今天一大早来公司&#xff0c;捋了一下顺序 ①删除要启动项目里的 node_modules 文件夹&#xff0c;这是vue项目的依赖包。 因为“node_modules”文件夹太大&#x…

《Vue插件》瀑布流插件vue-masonry的使用与踩坑记录

这是一个没有套路的前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e; 主页: oliver尹的主页 格言: 跌倒了爬起来就好&#xff5e; 《Vue插件…

Moment.js的基本使用

一、Moment.js的简介 Moment.js是一个轻量级的JavaScript时间库&#xff0c;以前我们转化时间&#xff0c;都会进行很复杂的操作&#xff0c;而Moment.js的出现&#xff0c;简化了我们开发中对时间的处理&#xff0c;提高了开发效率。日常开发中&#xff0c;通常会对时间进行下…

React面试题最全

1.什么是虚拟DOM&#xff1f; 虚拟DOM是真实DOM在内存中的表示&#xff0c;ul的表示形式保存在内存中&#xff0c;并且与实际的DOM同步&#xff0c;这是一个发生在渲染函数被调用和元素在屏幕上显示的步骤&#xff0c;整个过程被称为调和 2.类组件和函数组件之间的区别是什么…

【uni-app】小程序实现微信在线聊天(私聊/群聊)

之前学习使用uni-app简单实现一个在线聊天的功能&#xff0c;今天记录一下项目核心功能的实现过程。页面UI以及功能逻辑全部来源于微信&#xff0c;即时聊天业务的实现使用socket.io&#xff0c;前端使用uni-app开发&#xff0c;后端服务器基于node实现&#xff0c;数据库选择m…

vue3生命周期及setup介绍

&#x1f337; 生命周期 下图对比了vue3&#xff08;左&#xff09;和vue2&#xff08;右&#xff09;的生命周期&#xff1a;vue3将destoryed该名成了unmounted&#xff0c;相应的beforeDestory改成了beforeUnmounted。除此之外在组合式API中新增了个钩子函数&#xff1a;set…

vue项目:大屏自适应解决方案(两种)

css缩放方案&#xff1a; 利用transform&#xff1a;scale 进行适配 推荐使用v-scale-screen 值得注意的是&#xff1a; vue 2.6、2.7 要使用 npm install v-scale-screen1.0.2 vue3&#xff1a;要使用v-scale-screen版本 npm install v-scale-screen2.0.0 用法&#x…

解决npm ERR! Cannot read properties of null (reading ‘pickAlgorithm‘)

文章目录1. 复现问题2. 分析问题3. 解决问题1. 复现问题 今天准备克隆Redis桌面(GUI)管理客户端&#xff0c;故按照官方文档给出的指令运行时&#xff0c;如下图所示&#xff1a; 但在执行指令npm install --platformwin32却报出如下图错误&#xff1a; PS D:\Software\Redis…

Vue中使用Datav 完成大屏基本布局

效果图 大屏前言 在实际开发过程中&#xff0c;我们经常需要一个大屏进行一些常规数据的展示。在Vue中也是提供了这样的容器组件 我们可以使用基于Vue的 Datav组件 Vue-Baidu-Map地图组件 Echarts图表组件 时间戳就实现基本布局 在Vue中配置大屏路由的时候&#xff0c;我们…

vue播放rtsp视频流

工作有要播放视频监控的需求&#xff0c;最近就自己先了解了一下网页播放rtsp视频流的方法&#xff0c;以下是我的个人经验。 最终选择了vuewebrtc-streamer实现在网页播放rtsp流这种方法进行测试。 个人经验 第一次尝试了vue-video-playervideojs的方法&#xff0c;发现只适…

WPS JS宏入门案例集锦

JS宏官方API文档&#xff1a;https://qn.cache.wpscdn.cn/encs/doc/office_v19/index.htm 批量创建工作表/簿 批量创建工作表&#xff1a; function 批量创建工作表(){for (var city of ["成都","上海","北京"]){let sht Worksheets.Add();s…