kettle使用MongoDB Input连接mongodb获取数据异常处理记录

kettle 使用 连接mongodb ,报错处理

com.mongodb.MongoCommandException: Command failed with error 16436: 'Unrecognized pipeline stage name: 'ADD_TIME'' on server 192.168.2.144:27017. The full response is { "ok" : 0.0, "errmsg" : "Unrecognized pipeline stage name: 'ADD_TIME'", "code" : 16436 }
Command failed with error 16436: 'Unrecognized pipeline stage name: 'ADD_TIME'' on server 192.168.2.144:27017. The full response is { "ok" : 0.0, "errmsg" : "Unrecognized pipeline stage name: 'ADD_TIME'", "code" : 16436 }
    at org.pentaho.di.trans.steps.mongodbinput.MongoDbInput.processRow(MongoDbInput.java:137)
    at org.pentaho.di.trans.step.RunThread.run(RunThread.java:62)
    at java.lang.Thread.run(Thread.java:745)
Caused by: com.mongodb.MongoCommandException: Command failed with error 16436: 'Unrecognized pipeline stage name: 'ADD_TIME'' on server 192.168.2.144:27017. The full response is { "ok" : 0.0, "errmsg" : "Unrecognized pipeline stage name: 'ADD_TIME'", "code" : 16436 }

先借鉴以下这篇文章

http://www.spring4all.com/article/19550  

未解决问题,所有尝试其他配置(注意 上面参考文章和本篇解决问题的根本区别是 replica 模式)

取消 use all replica set members/mongos 选项

然后在query选项卡中,取消  query is aggregation pipeline

再测,通过测试,可以正常下载数据了

其他页面参考如下图:

 

----  关于 kettle 参数传入的方式记录

 

#!/bin/bash
set -e
basepath="$( cd "$( dirname "$0"  )" && pwd  )"
source /etl/etl-fr/setting/parArg.sh $@
source /etl/etl-fr/setting/kettle.conf

if [ -z "${startDate}" ]; then
    echo "ERROR: startDate is lost"
    exit -1
fi

if [ -z "${endDate}" ]; then
    echo "ERROR: endDate is lost"
    exit -1
fi

echo $startDate
echo $endDate
$KETTLE -rep kettle -job data_check/JOB_ORDER_CHECK -param:startDate="$startDate" -param:endDate="$endDate" | tee -a $KETTLE_LOG/job_a01_order_check_month.log`date +"%Y%m%d" -d "-0 day"` 2>&1

 

在所被调起的job中需要配置 “命名参数”

然后便可以在job中任意位置使用变量了,比如如下的sql中:(注意  使用变量替换的选项需要选中)

当然,根据传入查数,生成更多的参数也是非常有必要的,可以在job的靠前位置,使用tran来生成多个参数

结构如下:

getdate阶段,现在过去job的传入参数

然后在script中,计算各种变变量,并发布字段

在最后阶段进行变量的job内全局发布

 

Kettle(现称 **Pentaho Data Integration**)中配置 MongoDB Input 步骤的游标超时设置,通常需要对 MongoDB 的驱动程序行为进行调整。MongoDB 的游标默认情况下会在一定时间无操作后自动关闭,以释放服务器资源。在数据抽取过程中,如果处理的数据量较大或网络延迟较高,可能需要延长此超时时间。 ### 游标超时机制 MongoDB 的游标超时默认为 **10 分钟(600,000 毫秒)**,这个值可以通过在连接字符串中指定 `socketTimeoutMS` 和 `maxTimeMS` 等参数来影响其行为。虽然 KettleMongoDB Input 步骤本身没有直接提供“游标超时”字段供填写,但可以通过以下方式进行间接配置: --- ### 方法一:通过 MongoDB 连接字符串设置 `maxTimeMS` 在 MongoDB 输入步骤的连接配置中,可以将 `maxTimeMS` 参数添加到 URI 中,例如: ```plaintext mongodb://localhost:27017/test.collection?maxTimeMS=3600000 ``` 此配置表示该查询最多可执行 **1 小时**,若在此时间内未完成,则会抛出超时异常。此参数会影响整个查询生命周期,包括游标的活跃时间[^2]。 --- ### 方法二:修改 Kettle 配置文件以增强类加载支持 Kettle 依赖于 OSGi 容器管理类加载和组件生命周期。如果使用的是较旧版本的 Kettle,并且发现 MongoDB 插件在长时间查询中出现异常或连接中断,可以在以下路径中的配置文件添加相关委托: ``` data-integration\system\karaf\etc\config.properties ``` 找到如下行: ```properties org.osgi.framework.bootdelegation=sun.*,com.sun.*,javax.crypto,javax.net.ssl,javax.security.auth.x500,javax.xml.bind.annotation.adapters ``` 并在末尾追加: ```properties ,javax.crypto.* ``` 保存后重启 Kettle,这样可以确保 MongoDB 驱动正确加载并维持更稳定的连接状态。 --- ### 方法三:在 MongoDB 输入步骤中使用聚合管道并显式设置 `noCursorTimeout` 如果你使用的是聚合查询(Aggregation),可以在聚合命令中添加 `{ "cursor": { "batchSize": 1000 }, "maxTimeMS": 3600000 }` 或者在原生 JSON 查询中启用 `noCursorTimeout` 选项,防止游标过早关闭: ```json { "aggregate": "", "pipeline": [ ... ], "options": { "noCursorTimeout": true } } ``` 请注意,该选项需 MongoDB 服务端支持,并且应谨慎使用,避免因长期不释放游标导致内存占用过高。 --- ### 总结建议 - 使用 MongoDB URI 参数控制最大执行时间 `maxTimeMS` 是最直接的方法。 - 对于复杂作业,结合聚合管道和 `noCursorTimeout` 可提升稳定性。 - 若遇到连接问题,检查 Kettle 的 OSGi 类加载配置,适当扩展 `bootdelegation` 列表。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

htmljsp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值