使用 Spark BigQuery 连接器启动 Dataproc 集群
Spinning up a Dataproc cluster with Spark BigQuery Connector
阅读此 repo 下的说明: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=核心:fs.gs.implicit.dir.repair.enable=false
如您所见,我不得不将外部依赖项添加到我自己的存储桶中:gs://init-dependencies-big-20824/init-scripts/v.0.0.1/connectors.sh
。根据 scipt 的说明(我指的是 connector.sh
脚本),我还必须在此存储桶中添加以下罐子:
- 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
脚本运行正常,集群创建成功。但是,通过 Jupyter
使用 PySpark
笔记本仍然会导致 BigQuery
"class not found" 异常。当我直接从终端 运行 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
但这仍然无效...
连接器初始化操作仅适用于 Cloud Storage and BigQuery connectors for Hadoop from GoogleCloudDataproc/hadoop-connectors。
如果您使用的是 Spark,通常您不应将 BigQuery 连接器用于 Hadoop,因为您已经使用 --jars
参数添加了较新的 BigQuery connector for Spark in the spark-bigquery-connector 存储库。
要在集群创建期间安装 Spark BigQuery 连接器,您需要编写自己的初始化操作,将其复制到集群节点上的 /usr/lib/spark/jars/
目录中。请注意,您不需要复制 connectors init 操作中的所有代码,只需将 Spark BigQuery connector shaded jar 从您的 Cloud Storage 存储桶复制到 /usr/lib/spark/jars/
目录:
gsutil cp gs://path/to/spark-bigquery-connector.jar /usr/lib/spark/jars/
更好的方法是将 Spark BigQuery 连接器与其他依赖项一起嵌入到您的应用程序分发中。
更新
Connectors initialization action 现在支持 Spark BigQuery 连接器,可用于在集群创建期间在 Dataproc 集群上安装 Spark BigQuery 连接器:
REGION=<region>
CLUSTER_NAME=<cluster_name>
gcloud dataproc clusters create ${CLUSTER_NAME} \
--region ${REGION} \
--initialization-actions gs://goog-dataproc-initialization-actions-${REGION}/connectors/connectors.sh \
--metadata spark-bigquery-connector-version=0.15.1-beta
使用 Google public 包含依赖项的 spark-lib
--jars "gs://spark-lib/bigquery/spark-bigquery-latest_2.12.jar
或
--jars "gs://spark-lib/bigquery/spark-bigquery-latest.jar
取决于部署 Dataproc 集群的 Scala 版本
它对我来说效果很好。
阅读此 repo 下的说明: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=核心:fs.gs.implicit.dir.repair.enable=false
如您所见,我不得不将外部依赖项添加到我自己的存储桶中:gs://init-dependencies-big-20824/init-scripts/v.0.0.1/connectors.sh
。根据 scipt 的说明(我指的是 connector.sh
脚本),我还必须在此存储桶中添加以下罐子:
- 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
脚本运行正常,集群创建成功。但是,通过 Jupyter
使用 PySpark
笔记本仍然会导致 BigQuery
"class not found" 异常。当我直接从终端 运行 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
但这仍然无效...
连接器初始化操作仅适用于 Cloud Storage and BigQuery connectors for Hadoop from GoogleCloudDataproc/hadoop-connectors。
如果您使用的是 Spark,通常您不应将 BigQuery 连接器用于 Hadoop,因为您已经使用 --jars
参数添加了较新的 BigQuery connector for Spark in the spark-bigquery-connector 存储库。
要在集群创建期间安装 Spark BigQuery 连接器,您需要编写自己的初始化操作,将其复制到集群节点上的 /usr/lib/spark/jars/
目录中。请注意,您不需要复制 connectors init 操作中的所有代码,只需将 Spark BigQuery connector shaded jar 从您的 Cloud Storage 存储桶复制到 /usr/lib/spark/jars/
目录:
gsutil cp gs://path/to/spark-bigquery-connector.jar /usr/lib/spark/jars/
更好的方法是将 Spark BigQuery 连接器与其他依赖项一起嵌入到您的应用程序分发中。
更新
Connectors initialization action 现在支持 Spark BigQuery 连接器,可用于在集群创建期间在 Dataproc 集群上安装 Spark BigQuery 连接器:
REGION=<region>
CLUSTER_NAME=<cluster_name>
gcloud dataproc clusters create ${CLUSTER_NAME} \
--region ${REGION} \
--initialization-actions gs://goog-dataproc-initialization-actions-${REGION}/connectors/connectors.sh \
--metadata spark-bigquery-connector-version=0.15.1-beta
使用 Google public 包含依赖项的 spark-lib
--jars "gs://spark-lib/bigquery/spark-bigquery-latest_2.12.jar
或
--jars "gs://spark-lib/bigquery/spark-bigquery-latest.jar
取决于部署 Dataproc 集群的 Scala 版本
它对我来说效果很好。