Сбой при создании конвейера потока данных Google: 400: неверный запрос / недействительное разрешение - PullRequest
0 голосов
/ 25 сентября 2018

Я создаю и создаю шаблоны для потока данных Google уже более года.У меня никогда не было проблем с созданием шаблонов и загрузкой их в gcs с помощью вызова options.setTemplateLocation(templatePath);.С сегодняшнего дня, когда я создаю конвейер с Pipeline.create(options); и запускаю java-программу в eclipse, я получаю следующее исключение:

Exception in thread "main" java.lang.RuntimeException: Failed to construct instance from factory method DataflowRunner#fromOptions(interface org.apache.beam.sdk.options.PipelineOptions)
    at org.apache.beam.sdk.util.InstanceBuilder.buildFromMethod(InstanceBuilder.java:233)
    at org.apache.beam.sdk.util.InstanceBuilder.build(InstanceBuilder.java:162)
    at org.apache.beam.sdk.PipelineRunner.fromOptions(PipelineRunner.java:52)
    at org.apache.beam.sdk.Pipeline.create(Pipeline.java:142)
    at mypackage.PipelineCreation.getTemplatePipeline(PipelineCreation.java:34)
    at myotherpackage.Main.main(Main.java:51)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.beam.sdk.util.InstanceBuilder.buildFromMethod(InstanceBuilder.java:222)
    ... 5 more
Caused by: java.lang.RuntimeException: Unable to verify that GCS bucket gs://my-projects-staging-bucket exists.
    at org.apache.beam.sdk.extensions.gcp.storage.GcsPathValidator.verifyPathIsAccessible(GcsPathValidator.java:92)
    at org.apache.beam.sdk.extensions.gcp.storage.GcsPathValidator.validateOutputFilePrefixSupported(GcsPathValidator.java:61)
    at org.apache.beam.runners.dataflow.DataflowRunner.fromOptions(DataflowRunner.java:228)
    ... 10 more
Caused by: com.google.api.client.http.HttpResponseException: 400 Bad Request
{
  "error" : "invalid_grant",
  "error_description" : "Bad Request"
}
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1070)
    at com.google.auth.oauth2.UserCredentials.refreshAccessToken(UserCredentials.java:207)
    at com.google.auth.oauth2.OAuth2Credentials.refresh(OAuth2Credentials.java:149)
    at com.google.auth.oauth2.OAuth2Credentials.getRequestMetadata(OAuth2Credentials.java:135)
    at com.google.auth.http.HttpCredentialsAdapter.initialize(HttpCredentialsAdapter.java:96)
    at com.google.cloud.hadoop.util.ChainingHttpRequestInitializer.initialize(ChainingHttpRequestInitializer.java:52)
    at com.google.api.client.http.HttpRequestFactory.buildRequest(HttpRequestFactory.java:93)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.buildHttpRequest(AbstractGoogleClientRequest.java:300)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
    at com.google.cloud.hadoop.util.ResilientOperation$AbstractGoogleClientRequestExecutor.call(ResilientOperation.java:166)
    at com.google.cloud.hadoop.util.ResilientOperation.retry(ResilientOperation.java:66)
    at org.apache.beam.sdk.util.GcsUtil.getBucket(GcsUtil.java:505)
    at org.apache.beam.sdk.util.GcsUtil.bucketAccessible(GcsUtil.java:492)
    at org.apache.beam.sdk.util.GcsUtil.bucketAccessible(GcsUtil.java:457)
    at org.apache.beam.sdk.extensions.gcp.storage.GcsPathValidator.verifyPathIsAccessible(GcsPathValidator.java:88)
    ... 12 more

Сегодня я вошел в систему с другой учетной записью в gcloud, но вошел снова сучетная запись, связанная с проектом как «Владелец» с gcloud auth login.Я также перезапустил Eclipse, но эта ошибка повторяется.Также, при попытке запустить конвейер локально, я получаю еще одну ошибку, но также с содержимым «invalid_grant» «плохой запрос».Перезагрузка ноутбука также не имела никакого эффекта.

Мой pom определяет google-cloud-dataflow-java-sdk-all с версией 2.2.0, а обновление до 2.5.0 - безрезультатно.

Я могу скопировать данные в корзину с помощью gsutil из командной строки.Но при запуске java-программы из командной строки с mvn compile exec:java -Dexec.mainClass=mypackage.Main я все равно получаю те же ошибки.

Моя функция для создания шаблона Pipeline выглядит следующим образом:

public static Pipeline getTemplatePipeline(String jobName, String templatePath){
        DataflowPipelineOptions options = PipelineOptionsFactory.as(DataflowPipelineOptions.class);
        options.setProject("my-project-id");
        options.setRunner(DataflowRunner.class);
        options.setStagingLocation("gs://my-projects-staging-bucket/binaries");
        options.setTempLocation("gs://my-projects-staging-bucket/binaries/tmp");
        options.setGcpTempLocation("gs://my-projects-staging-bucket/binaries/tmp");
        options.setZone("europe-west3-a");
        options.setWorkerMachineType("n1-standard-2");
        options.setJobName(jobName);
        options.setMaxNumWorkers(2);
        options.setDiskSizeGb(40);
        options.setTemplateLocation(templatePath);
        return Pipeline.create(options);
    }

Любая помощьвысоко ценится.

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Вам не нужно использовать служебную учетную запись, и все же вы можете использовать gcloud , вы должны использовать следующую команду и войти в систему под своей учетной записью:

gcloud auth application-default login
0 голосов
/ 27 сентября 2018

Я нашел решение в кратком обзоре docs .

Кажется, что аутентификация gcloud больше не используется, и вам нужно использовать служебную учетную запись.Как и в документации, я создал служебную учетную запись с ролью «проект / владелец» и загрузил ее файл json в $ path.

Затем на моем Mac я использовал export GOOGLE_APPLICATION_CREDENTIALS="$path" и в том же сеансе использовал упомянутую командув вопросе для компиляции и выполнения java-программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...