使用Spark BigQuery Connector启动Dataproc集群

时间:2019-10-02 10:38:23

标签: apache-spark pyspark google-bigquery google-cloud-dataproc

阅读此仓库中的说明:Google Cloud Storage and BigQuery connectors 我按照以下初始化操作创建了一个新的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下的一个存储桶中添加外部依赖项。按照Scipt的说明(我指的是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,但这仍然行不通...

2 个答案:

答案 0 :(得分:1)

Connectors初始化操作仅适用于Cloud Storage中的Hadoop的BigQuerybigdata-interop repository连接器。

如果使用的是Spark,通常不应该将BigQuery连接器用于Hadoop,因为在BigQuery connector存储库中,已经使用--jars参数添加了更新的spark-bigquery-connector用于Spark。 / p>

要在集群创建期间安装Spark BigQuery连接器,您将需要编写自己的初始化操作,并将其复制到集群节点上的/usr/lib/spark/jars/目录中。请注意,您无需复制连接器init操作中的所有代码,而只需将Spark BigQuery连接器带阴影的jar从您的Cloud Storage存储桶复制到/usr/lib/spark/jars/目录:

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

更好的方法可能是将Spark BigQuery连接器与其他依赖项一起嵌入到您的应用程序分发中。

答案 1 :(得分:1)

使用包含依赖项的Google公共spark-lib

--jars "gs://spark-lib/bigquery/spark-bigquery-latest_2.12.jar

--jars "gs://spark-lib/bigquery/spark-bigquery-latest.jar

取决于部署了Dataproc集群的Scala版本

对我来说效果很好。