【问题标题】:Google Cloud Search Database Connector IssuesGoogle Cloud Search 数据库连接器问题
【发布时间】:2020-04-23 21:43:07
【问题描述】:

我正在使用 Google Cloud 搜索 (https://developers.google.com/cloud-search/docs/guides/?_ga=2.124920714.-122300216.1578247736),并且正在尝试为 Cloud SQL 实例编制索引。目前我正在使用此处所示的指南 (https://developers.google.com/cloud-search/docs/guides/database-connector#important-considerations)。我已经在 G-Suite 中注册了源代码。我有一个 Cloud Search 服务帐户,我测试了我可以从我的 Compute Engine 实例连接到 Cloud SQL 实例。

我的配置文件如下,必要的信息替换为XXXX:

#
# data source access
api.sourceId=xxxxxxxxxxx
api.identitySourceId=xxxxxxxxxxxxxxxx
api.serviceAccountPrivateKeyFile=./private-key.json
#
# database access
db.url=jdbc:mysql:///<database>?cloudSqlInstance=<cloud_sql_instance>&socketFactory=mysql-socket-factory-connector-j-8&useSSL=false&user=xxxxxxxxx&password=xxxxxxxxx
#
# traversal SQL statements
db.allRecordsSql=select field_1, field_2, field_3 from table;
#
# schedule traversals
schedule.traversalIntervalSecs=36000
schedule.performTraversalOnStart=true
schedule.incrementalTraversalIntervalSecs=3600
#
# column definitions
db.allColumns= field1, field2, field3
db.uniqueKeyColumns=field1
url.columns=field1
#
# content fields
contentTemplate.db.title=field1
db.contentColumns=field1, field2, field3
#
# setting ACLs to "entire domain accessible"
defaultAcl.mode=fallback
defaultAcl.public=true

jdbc 连接字符串基于https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory。我正处于我跑步的阶段:

java \
   -cp "google-cloudsearch-database-connector-v1-0.0.3.jar:mysql-connector-java-5.1.41-bin.jar" \
   com.google.enterprise.cloudsearch.database.DatabaseFullTraversalConnector \
   [-Dconfig=mysql.config]

但我收到错误 Failed to initialize connector。完整的堆栈跟踪是:

Jan 05, 2020 6:29:38 PM com.google.enterprise.cloudsearch.sdk.indexing.IndexingApplication startUp
SEVERE: Failed to initialize connector
com.google.enterprise.cloudsearch.sdk.StartupException: Failed to initialize connector
        at com.google.enterprise.cloudsearch.sdk.Application.startConnector(Application.java:150)
        at com.google.enterprise.cloudsearch.sdk.indexing.IndexingApplication.startUp(IndexingApplication.java:96)
        at com.google.common.util.concurrent.AbstractIdleService$DelegateService$1.run(AbstractIdleService.java:62)
        at com.google.common.util.concurrent.Callables$4.run(Callables.java:122)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
        at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:871)
        at com.google.common.io.BaseEncoding$StandardBaseEncoding.trimTrailingPadding(BaseEncoding.java:672)
        at com.google.common.io.BaseEncoding.decodeChecked(BaseEncoding.java:226)
        at com.google.common.io.BaseEncoding.decode(BaseEncoding.java:212)
        at com.google.api.client.util.Base64.decodeBase64(Base64.java:93)
        at com.google.api.services.cloudsearch.v1.model.Item.decodeVersion(Item.java:329)
        at com.google.enterprise.cloudsearch.sdk.indexing.IndexingServiceImpl.indexItem(IndexingServiceImpl.java:678)
        at com.google.enterprise.cloudsearch.sdk.indexing.DefaultAcl.<init>(DefaultAcl.java:203)
        at com.google.enterprise.cloudsearch.sdk.indexing.DefaultAcl.<init>(DefaultAcl.java:93)
        at com.google.enterprise.cloudsearch.sdk.indexing.DefaultAcl$Builder.build(DefaultAcl.java:466)
        at com.google.enterprise.cloudsearch.sdk.indexing.DefaultAcl.fromConfiguration(DefaultAcl.java:266)
        at com.google.enterprise.cloudsearch.sdk.indexing.template.FullTraversalConnector.init(FullTraversalConnector.java:182)
        at com.google.enterprise.cloudsearch.sdk.indexing.template.FullTraversalConnector.init(FullTraversalConnector.java:97)
        at com.google.enterprise.cloudsearch.sdk.Application.startConnector(Application.java:142)
        ... 4 more
Jan 05, 2020 6:29:38 PM com.google.enterprise.cloudsearch.sdk.BatchRequestService shutDown
INFO: Shutting down batching service. flush on shutdown: true
Exception in thread "main" java.lang.IllegalStateException: Expected the service IndexingApplication [FAILED] to be RUNNING, but the service has FAILED
        at com.google.common.util.concurrent.AbstractService.checkCurrentState(AbstractService.java:344)
        at com.google.common.util.concurrent.AbstractService.awaitRunning(AbstractService.java:280)
        at com.google.common.util.concurrent.AbstractIdleService.awaitRunning(AbstractIdleService.java:175)
        at com.google.enterprise.cloudsearch.sdk.Application.start(Application.java:122)
        at com.google.enterprise.cloudsearch.database.DatabaseFullTraversalConnector.main(DatabaseFullTraversalConnector.java:30)
Caused by: com.google.enterprise.cloudsearch.sdk.StartupException: Failed to initialize connector
        at com.google.enterprise.cloudsearch.sdk.Application.startConnector(Application.java:150)
        at com.google.enterprise.cloudsearch.sdk.indexing.IndexingApplication.startUp(IndexingApplication.java:96)
        at com.google.common.util.concurrent.AbstractIdleService$DelegateService$1.run(AbstractIdleService.java:62)
        at com.google.common.util.concurrent.Callables$4.run(Callables.java:122)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
        at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:871)
        at com.google.common.io.BaseEncoding$StandardBaseEncoding.trimTrailingPadding(BaseEncoding.java:672)
        at com.google.common.io.BaseEncoding.decodeChecked(BaseEncoding.java:226)
        at com.google.common.io.BaseEncoding.decode(BaseEncoding.java:212)
        at com.google.api.client.util.Base64.decodeBase64(Base64.java:93)
        at com.google.api.services.cloudsearch.v1.model.Item.decodeVersion(Item.java:329)
        at com.google.enterprise.cloudsearch.sdk.indexing.IndexingServiceImpl.indexItem(IndexingServiceImpl.java:678)
        at com.google.enterprise.cloudsearch.sdk.indexing.DefaultAcl.<init>(DefaultAcl.java:203)
        at com.google.enterprise.cloudsearch.sdk.indexing.DefaultAcl.<init>(DefaultAcl.java:93)
        at com.google.enterprise.cloudsearch.sdk.indexing.DefaultAcl$Builder.build(DefaultAcl.java:466)
        at com.google.enterprise.cloudsearch.sdk.indexing.DefaultAcl.fromConfiguration(DefaultAcl.java:266)
        at com.google.enterprise.cloudsearch.sdk.indexing.template.FullTraversalConnector.init(FullTraversalConnector.java:182)
        at com.google.enterprise.cloudsearch.sdk.indexing.template.FullTraversalConnector.init(FullTraversalConnector.java:97)

【问题讨论】:

    标签: java google-cloud-platform google-cloud-sql google-cloud-search


    【解决方案1】:

    此问题是“由:java.lang.NullPointerException 引起的”。 您应该验证堆栈跟踪中引用的行以找到罪魁祸首变量,这应该通过展开堆栈中“另外 4 个”错误行的视图来揭示。

    【讨论】:

      【解决方案2】:

      如果我不得不猜测您没有建立与数据库的连接。除了 db.url,您的配置文件对我来说看起来不错。根据我的经验,它应该看起来像这样 jdbc:mysql://localhost:1433;DatabaseName=ExampleDatabase。您通常会为其他属性得到的错误会告诉您确切的问题是什么(例如 field_1 在表中不存在),但在这种情况下它没有建立连接。尝试重写 db.url。

      【讨论】:

        【解决方案3】:

        无法初始化连接器 --> 当您的配置文件有问题时会发生此异常。但通常它会在消息中告诉您出了什么问题。

        您是否尝试在 Compute Engine 虚拟机上运行 Cloud SQL 代理并通过它进行连接?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-14
          • 2018-02-16
          • 2016-02-06
          • 1970-01-01
          • 2021-02-12
          • 2021-09-16
          • 2021-01-09
          • 1970-01-01
          相关资源
          最近更新 更多