无法使用 Pentaho PDI CE 连接到 MongoDb

Posted

技术标签:

【中文标题】无法使用 Pentaho PDI CE 连接到 MongoDb【英文标题】:Unable to connect to MongoDb using Pentaho PDI CE 【发布时间】:2016-03-14 09:01:36 【问题描述】:

我是 Pentaho 的新手。我正在尝试使用 Pentaho Data Integration Community Edition 从 MongoDB 读取数据。在尝试执行 MongoDB 输入步骤时,我收到身份验证失败错误。我发现,错误是由于 PDI 中缺少 MongoDb 驱动程序。

后来我下载了mongodb-driver-3.2.2.jar文件,添加到位置E:\pdi-ce-6.0.1.0-386\data-integration\lib。但问题仍然存在。

在尝试通过在 Pentaho MongoDb 输入步骤中提供 MongoDb 连接详细信息来获取 Dbs 时,我收到错误 java.nullpointerException。

有人可以告诉我我在这里做错了什么吗?

尝试通过在 Spoon 中提供有效的 Mongo 服务器详细信息来获取 DB 时出现错误消息:

Unable to connect to MongoDB - check connection details : 'ok' should never be null...

错误详情和可能异常的堆栈跟踪:

org.pentaho.di.core.exception.KettleException: 
java.lang.IllegalArgumentException: 'ok' should never be null...
'ok' should never be null...

    at org.pentaho.mongo.wrapper.NoAuthMongoClientWrapper.getDatabaseNames(NoAuthMongoClientWrapper.java:358)
    at org.pentaho.di.ui.trans.steps.mongodbinput.MongoDbInputDialog.setupDBNames(MongoDbInputDialog.java:1442)
    at org.pentaho.di.ui.trans.steps.mongodbinput.MongoDbInputDialog.access$300(MongoDbInputDialog.java:82)
    at org.pentaho.di.ui.trans.steps.mongodbinput.MongoDbInputDialog$4.widgetSelected(MongoDbInputDialog.java:450)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
    at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
    at org.pentaho.di.ui.trans.steps.mongodbinput.MongoDbInputDialog.open(MongoDbInputDialog.java:1079)
    at org.pentaho.di.ui.spoon.delegates.SpoonStepsDelegate.editStep(SpoonStepsDelegate.java:124)
    at org.pentaho.di.ui.spoon.Spoon.editStep(Spoon.java:8797)
    at org.pentaho.di.ui.spoon.trans.TransGraph.editStep(TransGraph.java:3027)
    at org.pentaho.di.ui.spoon.trans.TransGraph.mouseDoubleClick(TransGraph.java:744)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
    at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
    at org.pentaho.di.ui.spoon.Spoon.readAndDispatch(Spoon.java:1316)
    at org.pentaho.di.ui.spoon.Spoon.waitForDispose(Spoon.java:7979)
    at org.pentaho.di.ui.spoon.Spoon.start(Spoon.java:9310)
    at org.pentaho.di.ui.spoon.Spoon.main(Spoon.java:654)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.pentaho.commons.launcher.Launcher.main(Launcher.java:92)
Caused by: java.lang.IllegalArgumentException: 'ok' should never be null...
    at com.mongodb.CommandResult.ok(CommandResult.java:43)
    at com.mongodb.CommandResult.throwOnError(CommandResult.java:109)
    at com.mongodb.DBPort$NativeAuthenticator.authenticate(DBPort.java:545)
    at com.mongodb.DBPort.authenticate(DBPort.java:322)
    at com.mongodb.DBPort.checkAuth(DBPort.java:333)
    at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:243)
    at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216)
    at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:288)
    at com.mongodb.DB.command(DB.java:261)
    at com.mongodb.DB.command(DB.java:243)
    at com.mongodb.DB.command(DB.java:300)
    at com.mongodb.Mongo.getDatabaseNames(Mongo.java:384)
    at org.pentaho.mongo.wrapper.NoAuthMongoClientWrapper.getDatabaseNames(NoAuthMongoClientWrapper.java:353)

【问题讨论】:

您的 mongodb 数据库是否位于另一台服务器上? 是的.. MongoDB 托管在另一个活动服务器中。 您使用哪个版本的 PDI ? 能否给出错误信息? @maximilienAndile。请在上面更新的帖子中找到错误消息的详细信息。 PDI 版本也是 6.0.1.0-386 【参考方案1】:

在 MongoDB 输入步骤中,仅使用服务器主机名配置连接,无需指定用户名和密码,即可解决问题.. !!

【讨论】:

【参考方案2】:

嗨 Aarthi Priyadharshini - 为了完成这项工作,我在此处找到了一个链接,该链接向您展示了该做什么 - http://wiki.pentaho.com/display/BAD/Read+Data+From+MongoDB

由于 MongoDB 是一个大数据平台,它位于设计视图的大数据选项下。观看链接上的视频以准确了解如何使用。

【讨论】:

在spoon中,新的数据库连接提供了一个选项列表,但不适用于MongoDB。你能帮我完成创建它的步骤吗? 嗨 Aarthi Priyadharshini - 为了完成这项工作,我在此处找到了一个链接,该链接向您展示了确切的操作 - wiki.pentaho.com/display/BAD/Read+Data+From+MongoDB 由于 MongoDB 是一个大数据平台,它位于大数据选项下设计视图。观看链接上的视频,了解如何使用。 我完全按照上面链接中的说明做了,但没有任何帮助。即使我尝试从同一个链接下载另一个版本的 PDI(pdi-ce-5.0.1.A-stable),但问题仍然存在。【参考方案3】:

我解决了我下载 PDI 最新版本的问题

http://ci.pentaho.com/view/Data%20Integration/job/Kettle/

包含 mongo 3.2.2 的身份验证并且可以工作!

不适用于生产环境!

【讨论】:

以上是关于无法使用 Pentaho PDI CE 连接到 MongoDb的主要内容,如果未能解决你的问题,请参考以下文章

Pentaho PDI 9(水壶):厨房无法继续,因为无法加载作业

Pentaho 数据集成 (PDI) 8.3 CE 显示错误“localhost:9051”页面在除浏览存储库之外的所有对话框中都找不到

Pentaho PDI - 从 MongoDB 读取数据

pentaho水壶无法连接到cloudera cdh4 HDFS

无法连接到 Pentaho Kettle 中的 PostgreSQL 数据库

Pentaho PDI 无法将 ESAPI.properties 作为类加载器资源加载