Как избежать ошибки «IN_USED_ADDRESSES» при запуске нескольких заданий потока данных из одного шаблона? - PullRequest
1 голос
/ 16 апреля 2020

Я создал шаблон потока данных, который позволяет мне импортировать данные из файла CSV в облачном хранилище в BigQuery. Я использую Cloud Function для Firebase, чтобы создавать задания из этого шаблона каждый день в определенное время. Это код в функции (с удалением некоторых ненужных частей).

const filePath = object.name?.replace(".csv", "");

      // Exit function if file changes are in temporary or staging folder
      if (
        filePath?.includes("staging") ||
        filePath?.includes("temp") ||
        filePath?.includes("templates")
      )
        return;

      const dataflow = google.dataflow("v1b3");
      const auth = await google.auth.getClient({
        scopes: ["https://www.googleapis.com/auth/cloud-platform"],
      });

      let request = {
        auth,
        projectId: process.env.GCLOUD_PROJECT,
        location: "asia-east1",
        gcsPath: "gs://my_project_bucket/templates/csv_to_bq",
        requestBody: {
          jobName: `csv-to-bq-${filePath?.replace(/\//g, "-")}`,
          environment: {
            tempLocation: "gs://my_project_bucket/temp",
          },
          parameters: {
            input: `gs://my_project_bucket/${object.name}`,
            output: biqQueryOutput,
          },
        },
      };

      return dataflow.projects.locations.templates.launch(request);

Эта функция запускается каждый раз, когда любой файл записывается в облачное хранилище. Я работаю с датчиками, поэтому, по крайней мере, мне нужно импортировать 89 разных данных, т.е. разные файлы CSV, в течение 15 минут.

Весь процесс работает нормально, если одновременно работают только 4 задания. Однако, когда функция пыталась создать пятое задание, API возвратил много разных типов ошибок.

Ошибка 1 (не точная, так как я больше не могу найти ошибку):

Error Response: [400] The following quotas were exceeded: IN_USE_ADDRESSES

Ошибка 2:

Dataflow quota error for jobs-per-project quota. Project *** is running 25 jobs.
Please check the quota usage via GCP Console.
If it exceeds the limit, please wait for a workflow to finish or contact Google Cloud Support to request an increase in quota.
If it does not, contact Google Cloud Support.

Ошибка 3:

Quota exceeded for quota metric 'Job template requests' and limit 'Job template requests per minute per user' of service 'dataflow.googleapis.com' for consumer 'project_number:****'.

Я знаю, что могу пропустить начальные задания, чтобы избежать ошибок 2 и 3. Однако я не знаю, как начать работы таким образом, чтобы не заполнить адреса. Итак, как мне этого избежать? Если я не могу, то какой подход я должен использовать?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

Я ответил на это в другом посте здесь - Какие квоты Compute Engine необходимо обновить, чтобы запустить поток данных с 50 рабочими (IN_USE_ADDRESSES, CPUS, CPUS_ALL_REGIONS ..)? .

Дайте мне знать, если это поможет.

0 голосов
/ 22 апреля 2020

Это проблема квоты внешнего IP-адреса GCP, и лучшим решением является не использовать какие-либо публичные c IP-адреса для заданий потока данных, пока ресурсы вашего конвейера остаются в сетях GCP. Чтобы включить publi c IP в заданиях потока данных:

  1. Создайте или обновите свою подсеть, чтобы разрешить Private google access. это довольно просто сделать с помощью консоли - VP C> сети> подсети> отметьте галочкой включить частный доступ к Google

  2. В параметрах вашего задания Cloud Dataflow укажите --usePublicIps=false и --network=[NETWORK] или --subnetwork=[SUBNETWORK].

Примечание: - Для внутренних ошибок IP IN_USED просто измените свой диапазон su bnet CIDR, чтобы он соответствовал большему числу адресов, таких как 20.0.0.0/16. Внутренний IP-адрес 60 КБ.

При этом вы никогда не превысите свой внутренний диапазон IP-адресов

...