新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

Spark(Google Dataproc)からMySQLにアクセスする方法

Spark(Google Dataproc)から、MySQLにアクセスする方法です。

JDBCを使ってアクセスするので、PostgreSQL等、他のRDBにも応用可能です。

手順

Spark設定

下記のSparkの設定をすると、SparkからMySQLのデータの読み書きができるようになります。

  • MySQLのJDBCのjarファイルをダウンロードします
  • SparkにJDBCのjarファイルを読み込みます
    • 「spark-defaults.conf」の「spark.jars」にjarファイルのパスを設定します
  • SparkのClassPathにJDBCのjarファイルを設定します
    • 「spark-defaults.conf」の「spark.driver.extraClassPath」にjarファイルのパスを設定します

Dataproc設定

Dataproceはマネージドサービスのため、Sparkを直接いじることができません。

代わりに、Dataproceの「クラスタープロパティ」と「初期化アクション」を使って、 クラスター作成時にSparkの設定します。

事前に、MySQLのJDBCのjarファイルを、Google Cloud Storageにアップしておきます。

下記の初期化アクションを作って、Google Cloud Storageにアップします。

init_action.sh

#!/bin/bash

JAR_PATH=/usr/local/lib/jars
mkdir $JAR_PATH

# JDBC MySQL
JDBC_MYSQL=mysql-connector-java-8.0.16.jar
gsutil cp gs://xxxx/xxxx/$JDBC_MYSQL $JAR_PATH/

初期化アクションでは、Sparkに追加するjarファイルの置き場所を作って、StorageにアップしたJDBCのjarファイルをダウンロードしています。

クラスター作成

Spark(Google Dataproc)からMySQLにアクセスする方法

  • 初期化アクション
    • 先程Google Cloud Storageにアップした初期化アクションファイルを指定します
    • クラスター作成時に、このアクションが実行されます
  • プロジェクトアクセス
    • チェックを入れる
    • 初期化アクションで、StorageからJDBCのjarファイルをダウンロードしているため、クラスターにStorageへのアクセス権限を付与します
  • クラスタプロパティ
    • [spark]:[spark.jars]:[/usr/local/lib/jars/*]
      • 「spark」でSparkの設定「spark-defaults.conf」を設定します
      • 「spark.jars」「/usr/local/lib/jars/*」で、SparkにJDBCのjarファイルを読み込ませます
    • [spark]:[spark.driver.extraClassPath]:[/usr/local/lib/jars/*]
      • 「spark」でSparkの設定「spark-defaults.conf」を設定します
      • 「spark.driver.extraClassPath」「/usr/local/lib/jars/*」で、SparkにClassPass情報として、JDBCのjarファイルを読み込ませます

利用例

options = {
    "url":"jdbc:mysql://<server>:3306/<db_name>",
    "driver":"com.mysql.jdbc.Driver",
    "dbtable":"<table_name>",
    "user":"xxxx",
    "password":"xxxx"
}

df = spark.read.format("jdbc").options(**options).load()
df.show()

その他感想等

読み書き両方が可能です。

タイムアウトになりやすいので、「spark-defaults.conf」の「spark.executor.heartbeatInterval」と「spark.network.timeout」を 長めに設定した方がいいかと思います。

Spark2.4以降なら、「dbtable」の代わりに「query」として、クエリでデータを取得できて便利なので、 イメージはSpark2.4が使えるバージョン1.4以上にした方がいいです。

参考記事

関連カテゴリー記事

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com