Проблемы с соединителем базы данных Google Cloud Search - PullRequest
1 голос
/ 06 января 2020

Я работаю с поиском в 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 - соображения ). Я зарегистрировал источник в G-Suite. У меня есть учетная запись службы поиска в облаке, я протестировал подключение к экземпляру Cloud SQL из своего экземпляра Compute Engine, который я могу.

Мой файл конфигурации выглядит следующим образом с необходимой информацией, замененной на 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

со строкой подключения jdb c, основанной на 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)

Ответы [ 3 ]

1 голос
/ 12 января 2020

Если бы я догадался, что вы не устанавливаете соединение с вашей базой данных. Ваш файл конфигурации выглядит хорошо для меня, за исключением db.url. Из моего опыта это должно выглядеть примерно так: jdb c: mysql: // localhost: 1433; DatabaseName = ExampleDatabase. Ошибки, которые вы обычно получаете для других свойств, точно говорят вам, в чем проблема (например, field_1 не существует в таблице), но в этом случае это не установление соединения. Попробуйте переписать db.url.

1 голос
/ 06 января 2020

Эта проблема вызвана: java .lang.NullPointerException ". Вы должны проверить строку, указанную в трассировке стека, чтобы найти переменную преступника, которая должна быть раскрыта путем расширения представления «еще 4» строк ошибок в стеке.

0 голосов
/ 10 января 2020

Не удалось инициализировать соединитель -> Это исключение возникает, если с вашим файлом конфигурации что-то не так. Но обычно он говорит вам, что не так с сообщением.

Вы пробовали запустить прокси-сервер Cloud SQL на виртуальной машине Compute Engine и подключиться через него?

...