Spark コネクタを使用してデータをロードする(推奨)
StarRocks は、Apache Spark™ 用に開発したコネクタである StarRocks Connector for Apache Spark™(以下、Spark コネクタ)を提供しています。これを使用して、Spark を介して StarRocks テーブルにデータをロードできます。基本的な原理は、データを蓄積し、STREAM LOAD を通じて一度に StarRocks にロードすることです。Spark コネクタは Spark DataSource V2 に基づいて実装されています。DataSource は Spark DataFrames または Spark SQL を使用して作成できます。バッチモードと構造化ストリーミ ングモードの両方がサポートされています。
注意
StarRocks テーブルにデータをロードできるのは、SELECT および INSERT 権限を持つユーザーのみです。GRANT の指示に従って、これらの権限をユーザーに付与できます。
バージョン要件
| Spark コネクタ | Spark | StarRocks | Java | Scala |
|---|---|---|---|---|
| 1.1.4 | 4.0, 4.1 | 2.5 以降 | 17 | 2.13 |
| 1.1.4 | 3.3, 3.4, 3.5 | 2.5 以降 | 8 | 2.12 |
| 1.1.3 | 3.2, 3.3, 3.4, 3.5 | 2.5 以降 | 8 | 2.12 |
| 1.1.2 | 3.2, 3.3, 3.4, 3.5 | 2.5 以降 | 8 | 2.12 |
| 1.1.1 | 3.2, 3.3, または 3.4 | 2.5 以降 | 8 | 2.12 |
| 1.1.0 | 3.2, 3.3, または 3.4 | 2.5 以降 | 8 | 2.12 |
注意
- Spark コネクタの異なるバージョン間の動作の変更については、Upgrade Spark connector を参照してください。
- Spark コネクタはバージョン 1.1.1 以降、MySQL JDBC ドライバを提供していません。ドライバを手動で Spark クラスパスにインポートする必要があります。ドライバは MySQL サイト または Maven Central で見つけることができます。
Spark コネクタの取得
Spark コネクタの JAR ファイルは以下の方法で取得できます:
- コンパイル済みの Spark コネクタ JAR ファイルを直接ダウンロードする。
- Maven プロジェクトに Spark コネクタを依存関係として追加し、JAR ファイルをダウンロードする。
- Spark コネクタのソースコードを自分でコンパイルして JAR ファイルを作成する。
Spark コネクタ JAR ファイルの命名形式は starrocks-spark-connector-${spark_version}_${scala_version}-${connector_version}.jar です。
例えば、環境に Spark 3.2 と Scala 2.12 をインストールしており、Spark コネクタ 1.1.0 を使用したい場合、starrocks-spark-connector-3.2_2.12-1.1.0.jar を使用できます。
注意
一般的に、最新バージョンの Spark コネクタは Spark の最新の 3 つのバージョンとのみ互換性を維持します。
コンパイル済みの Jar ファイルをダウンロード
Maven Central Repository から対応するバージョンの Spark コネクタ JAR を直接ダウンロードします。
Maven 依存関係
-
Maven プロジェクトの
pom.xmlファイルに、以下の形式で Spark コネクタを依存関係として追加します。spark_version、scala_version、connector_versionをそれぞれのバージョンに置き換えてください。<dependency>
<groupId>com.starrocks</groupId>
<artifactId>starrocks-spark-connector-${spark_version}_${scala_version}</artifactId>
<version>${connector_version}</version>
</dependency> -
例えば、環境の Spark バージョンが 3.2、Scala バージョンが 2.12 で、Spark コネクタ 1.1.0 を選択した場合、以下の依存関係を追加する必要があります:
<dependency>
<groupId>com.starrocks</groupId>
<artifactId>starrocks-spark-connector-3.2_2.12</artifactId>
<version>1.1.0</version>
</dependency>
自分でコンパイル
-
Spark コネクタパッケージ をダウンロードします。
-
Spark コネクタのソースコードを JAR ファイルにコンパイルするために、以下のコマンドを実行します。
spark_versionは対応する Spark バージョンに置き換えてください。sh build.sh <spark_version>例えば、環境の Spark バージョンが 3.2 の場合、以下のコマンドを実行する必要があります:
sh build.sh 3.2 -
target/ディレクトリに移動し、コンパイル時に生成された Spark コネクタ JAR ファイル(例:starrocks-spark-connector-3.2_2.12-1.1.0-SNAPSHOT.jar)を見つけます。
注意
正式にリリースされていない Spark コネクタの名前には
SNAPSHOTサフィックスが含まれています。
パラメータ
starrocks.fe.http.url
- 必須: YES
- デフォルト値: なし
- 説明: StarRocks クラスター内の FE の HTTP URL。複数の URL を指定することができ、カンマ(,)で区切る必要があります。形式:
<fe_host1>:<fe_http_port1>,<fe_host2>:<fe_http_port2>。バージョン 1.1.1 以降、URL にhttp://プレフィックスを追加することもできます。例:http://<fe_host1>:<fe_http_port1>,http://<fe_host2>:<fe_http_port2>。
starrocks.fe.jdbc.url
- 必須: YES
- デフォルト値: なし
- 説明: FE の MySQL サーバーに接続するために使用されるアドレス。形式:
jdbc:mysql://<fe_host>:<fe_query_port>。
starrocks.table.identifier
- 必須: YES
- デフォルト値: なし
- 説明: StarRocks テーブルの名前。形式:
<database_name>.<table_name>。
starrocks.user
- 必須: YES
- デフォルト値: なし
- 説明: StarRocks クラスターアカウントのユーザー名。ユーザーは StarRocks テーブルに対する SELECT および INSERT 権限 を持っている必要があります。
starrocks.password
- 必須: YES
- デフォルト値: なし
- 説明: StarRocks クラスターアカウントのパスワード。
starrocks.write.label.prefix
- 必須: NO
- デフォルト値:
spark- - 説明: Stream Load で使用されるラベルプレフィックス。
starrocks.write.enable.transaction-stream-load
- 必須: NO
- デフォルト値:
TRUE - 説明: Stream Load トランザクションインターフェース を使用してデータをロードするかどうか。StarRocks v2.5 以降が必要です。この機能は、トランザクション内でより多くのデータを少ないメモリ使用量でロードし、パフォーマンスを向上させます。
注意: バージョン 1.1.1 以降、このパラメータはstarrocks.write.max.retriesの値が非正の場合にのみ有効です。なぜなら、Stream Load トランザクションインターフェースはリトライをサポートしていないためです。
starrocks.write.buffer.size
- 必須: NO
- デフォルト値:
104857600 - 説明: 一度に StarRocks に送信される前にメモリ内に蓄積できるデータの最大サイズ。このパラメータを大きな値に設定すると、ロードパフォーマンスが向上しますが、ロードの遅延が増加する可能性があります。
starrocks.write.buffer.rows
- 必須: NO
- デフォルト値: Integer.MAX_VALUE
- 説明: バージョン 1.1.1 以降でサポートされています。一度に StarRocks に送信される前にメモリ内に蓄積できる行の最大数。
starrocks.write.flush.interval.ms
- 必須: NO
- デフォルト値:
300000 - 説明: データが StarRocks に送信される間隔。このパラメータはロードの遅延を制御するために使用されます。
starrocks.write.max.retries
- 必須: NO
- デフォルト値:
3 - 説明: バージョン 1.1.1 以降でサポートされています。ロードが失敗した場合に同じバッチのデータに対して Stream Load を再試行する回数。
Stream Load トランザクションインターフェースはリトライをサポートしていないため、このパラメータが正の場合、コネクタは常に Stream Load インターフェースを使用し、starrocks.write.enable.transaction-stream-load の値を無視します。
starrocks.write.retry.interval.ms
- 必須: NO
- デフォルト値:
10000 - 説明: バージョン 1.1.1 以降でサポートされています。ロードが失敗した場合に同じバッチのデータに対して Stream Load を再試行する間隔。
starrocks.write.use_bitmap_hash64
- 必須: NO
- デフォルト値:
false - 説明: バージョン 1.1.3 以降でサポートされています。ビットマップの生成に 64 ビットのハッシュ関数を使用するかどうか。デフォルトでは 32 ビットのハッシュ関数が使用されます。
starrocks.columns
- 必須: NO
- デフォルト値: なし
- 説明: データをロードしたい StarRocks テーブルの列。複数の列を指定する ことができ、カンマ(,)で区切る必要があります。例:
"col0,col1,col2"。
starrocks.column.types
- 必須: NO
- デフォルト値: なし
- 説明: バージョン 1.1.1 以降でサポートされています。StarRocks テーブルから推測されるデフォルトのデータ型とデフォルトマッピングを使用する代わりに、Spark 用の列データ型をカスタマイズします。パラメータ値は Spark の StructType#toDDL の出力と同じ DDL 形式のスキーマです。例:
col0 INT, col1 STRING, col2 BIGINT。カスタマイズが必要な列のみを指定する必要があります。使用例として、BITMAP または HLL 型の列にデータをロードすることが挙げられます。
starrocks.write.properties.*
- 必須: NO
- デフォルト値: なし
- 説明: Stream Load の動作を制御するために使用されるパラメータ。例えば、パラメータ
starrocks.write.properties.formatはロードされるデータの形式を指定します。サポートされているパラメータとその説明のリストについては、STREAM LOAD を参照してください。
starrocks.write.properties.format
- 必須: NO
- デフォルト値:
CSV - 説明: Spark コネクタがデータを StarRocks に送信する前に各バッチのデータを変換する際のファイル形式。有効な値:CSV および JSON。
starrocks.write.properties.row_delimiter
- 必須: NO
- デフォルト値:
\n - 説明: CSV 形式のデータの行区切り文字。
starrocks.write.properties.column_separator
- 必須: NO
- デフォルト値:
\t - 説明: CSV 形式のデータの列区切り文字。
starrocks.write.properties.partial_update
- 必須: NO
- デフォルト値:
FALSE - 説明: 部分更新を使用するかどうか。有効な値:
TRUEおよびFALSE。デフォルト値:FALSE、この機能を無効にすることを示します。
starrocks.write.properties.partial_update_mode
- 必須: NO
- デフォルト値:
row - 説明: 部分更新のモードを指定します。有効な値:
rowおよびcolumn。- 値
row(デフォルト)は行モードでの部分更新を意味し、多くの 列と小さなバッチでのリアルタイム更新に適しています。 - 値
columnは列モードでの部分更新を意味し、少ない列と多くの行でのバッチ更新に適しています。このようなシナリオでは、列モードを有効にすると更新速度が速くなります。例えば、100 列のテーブルで、すべての行に対して 10 列(全体の 10%)のみが更新される場合、列モードの更新速度は 10 倍速くなります。
- 値
starrocks.write.num.partitions
- 必須: NO
- デフォルト値: なし
- 説明: Spark がデータを書き込む際に並行して使用できるパーティションの数。データ量が少ない場合、パーティションの数を減らしてロードの同時実行性と頻度を下げることができます。このパラメータのデフォルト値は Spark によって決定されます。ただし、この方法は Spark Shuffle コストを引き起こす可能性があります。
starrocks.write.partition.columns
- 必須: NO
- デフォルト値: なし
- 説明: Spark のパーティション列。このパラメータは
starrocks.write.num.partitionsが指定されている場合にのみ有効です。このパラメータが指定されていない場合、書き込まれるすべての列がパーティションに使用されます。
starrocks.timezone
- 必須: NO
- デフォルト値: JVM のデフォルトタイムゾーン
- 説明: バージョン 1.1.1 以降でサポートされています。Spark の
TimestampTypeを StarRocks のDATETIMEに変換する際に使用されるタイムゾーン。デフォルトはZoneId#systemDefault()によって返される JVM のタイムゾーンです。形式はAsia/Shanghaiのようなタイムゾーン名、または+08:00のようなゾーンオフセットで指定できます。
starrocks.write.socket.timeout.ms
- 必須: NO
- デフォルト値:
-1 - 説明: バージョン 1.1.3 以降でサポートされています。HTTP クライアントがデータを待機する時間。単位:ms。デフォルト値
-1は、タイムアウトがないことを意味します。
starrocks.write.properties.compression
- 必須: NO
- デフォルト値: なし
- 説明: バージョン 1.1.3 以降でサポートされています。Stream Load で使用される圧縮アルゴリズム。有効な値:
lz4_frame。JSON 形式の圧縮には、データベース v3.2.7 以降が必要です。CSV 形式の圧縮には、データベースのバージョンに関する要件はありません。
Spark と StarRocks のデータ型マッピング
-
デフォルトのデータ型マッピングは以下の通りです:
Spark データ型 StarRocks データ型 BooleanType BOOLEAN ByteType TINYINT ShortType SMALLINT IntegerType INT LongType BIGINT StringType LARGEINT FloatType FLOAT DoubleType DOUBLE DecimalType DECIMAL StringType CHAR StringType VARCHAR StringType STRING StringType JSON DateType DATE TimestampType DATETIME ArrayType ARRAY
注意:
バージョン 1.1.1 以降でサポートされています。詳細な手順については、Load data into columns of ARRAY type を参照してください。MapType MAP
注意:
バージョン 1.1.3 以降でサポートされています。詳細な手順については、ネストされた列の読み込みを参照してください。StructType STRUCT
注意:
バージョン 1.1.3 以降でサポートされています。詳細な手順については、ネストされた列の読み込みを参照してください。 -
データ型マッピングをカスタマイズすることもできます。
例えば、StarRocks テーブルに BITMAP および HLL 列が含まれているが、Spark はこれらのデータ型をサポートしていません。Spark で対応するデータ型をカスタマイズする必要があります。詳細な手順については、BITMAP および HLL 列にデータをロードする方法を参照してください。BITMAP および HLL はバージョン 1.1.1 以降でサポートされています。