Раскрутка кластера Dataproc с помощью Spark BigQuery Connector - PullRequest
2 голосов
/ 02 октября 2019

Чтение инструкций по этому репо: Соединители Google Cloud Storage и BigQuery Я выполнил приведенное ниже действие инициализации, чтобы создать новый кластер Dataproc с установленной версией соединителя Google Cloud Storage и BigQuery:

gcloud beta dataproc clusters create christos-test \
--region europe-west1 \
--subnet <a subnet zone> \
--optional-components=ANACONDA,JUPYTER \
--enable-component-gateway \
--initialization-actions gs://<bucket-name>/init-scripts/v.0.0.1/connectors.sh \
--metadata gcs-connector-version=1.9.16 \
--metadata bigquery-connector-version=0.13.16 \
--zone europe-west1-b \
--master-machine-type n1-standard-4 \
--worker-boot-disk-size 500 \
--image=<an-image> \
--project=<a-project-id> \
--service-account=composer-dev@vf-eng-ca-nonlive.iam.gserviceaccount.com \
--no-address \
--max-age=5h \
--max-idle=1h \
--labels=<owner>=christos,<team>=group \
--tags=allow-internal-dataproc-dev,allow-ssh-from-management-zone,allow-ssh-from-management-zone2 \

- properties = core: fs.gs.implicit.dir.repair.enable = false

Как вы должны видеть, мне пришлось добавить внешние зависимости в корзинумой собственный под: gs://init-dependencies-big-20824/init-scripts/v.0.0.1/connectors.sh. В соответствии с инструкциями Скипа (я имею в виду скрипт connector.sh), мне также пришлось добавить следующие jar в этот контейнер:

  • gcs-connector-hadoop2-1.9.16.jar
  • gcs-connector-1.7.0-hadoop2.jar
  • gcs-connector-1.8.0-hadoop2.jar
  • bigquery-connector-hadoop2-0.13.16.jar

Скрипт работает нормально и кластер успешно создан. Однако использование ноутбука PySpark через Jupyter все равно приводит к исключению BigQuery «класс не найден». То же самое происходит, когда я запускаю PySpark прямо из терминала. Единственный способ избежать этого исключения - скопировать еще один jar (на этот раз spark-bigquery_2.11-0.8.1-beta-shaded.jar) в мастер-узел моего кластера и запустить PySpark с:

pyspark --jars spark-bigquery_2.11-0.8.1-beta-shaded.jar

Очевидно, это бьетцель.

Что я делаю не так? Я думал об изменении сценария connector.sh для включения другой функции copy, поэтому скопируйте spark-bigquery_2.11-0.8.1-beta-shaded.jar в /usr/lib/hadoop/lib, поэтому я попытался просто скопировать туда jar вручную и запустить PySpark, но это все равно не сработало...

1 Ответ

1 голос
/ 03 октября 2019

Действие инициализации коннекторов применяется только к облачным хранилищам и BigQuery коннекторам для Hadoop из репозитория bigdata-interop .

Как правило, не следуетиспользуйте коннектор BigQuery для Hadoop, если вы используете Spark, поскольку в репозитории spark-bigquery-connector , который вы уже добавили с параметром --jars, есть более новый коннектор BigQuery для Spark. 1014 *

Чтобы установить соединитель Spark BigQuery во время создания кластера, вам нужно написать собственное действие инициализации, которое копирует его в каталог /usr/lib/spark/jars/ на узлах кластера. Обратите внимание, что вам не нужно копировать весь код в действии инициализации коннекторов, а просто скопируйте затененный jar коннектора Spark BigQuery из вашего хранилища Cloud Storage в каталог /usr/lib/spark/jars/:

gsutil cp gs://path/to/spark-bigquery-connector.jar /usr/lib/spark/jars/

Лучший подход мог бывстроить Spark BigQuery-коннектор в ваш дистрибутив приложения с другими зависимостями.

...