❄️
Spark Iceberg REST catalog + S3 warehouse 接続例
QuickStart からはじめて、warehouse 部分を S3 に置き換えるのがおすすめ。
正直ドキュメント を読んだだけで、すんなり設定値がかける気がしない。ドキュメントに載っていないプロパティはたくさんある。Javadoc にプロパティの宣言がされていることもある。どの位置にどのプロパティを設定すればいいのか最初は見当もつかないけれど、下に例を挙げたので探し出して欲しい。
Spark の基本設定で java 標準ライブラリの proxy 等は設定できる。必要に応じて設定する。環境変数 NO_PROXY
に相当相当する部分は、区切り部分が |
で特殊なので注意。
spark.driver.extraJavaOptions = -Dhttp.proxyHost=proxy.example.jp -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy.example.jp -Dhttps.proxyPort=8080 -Dhttp.nonProxyHosts=polaris.minio|minio|polaris -Dhttps.nonProxyHosts=polaris.minio|minio|polaris
spark.sql.catalog.spark_catalog = org.apache.iceberg.spark.SparkSessionCatalog
Iceberg Catalog の基本プロパティ(Javadoc)
spark.sql.catalog.<catalog-name> = org.apache.iceberg.spark.SparkCatalog
spark.sql.catalog.<catalog-name>.type = rest
spark.sql.catalog.<catalog-name>.uri = http://polaris:8080
Iceberg AwsClient は S3, KMS, DynamoDB などの起点になっている(Javadoc)。region は client.region で設定する(参考)。polaris 側で Minio のアクセスができていれば credential vendoring されているだろう。
# 設定した値
spark.sql.catalog.<catalog-name>.client.region = us-east-2
spark.sql.catalog.<catalog-name>.client.refresh-credentials-endpoint = http://minio:9000
# その他参考
spark.sql.catalog.<catalog-name>.client.credentials-provider = <特殊な場合使う>
spark.sql.catalog.<catalog-name>.client.refresh-credentials-enabled = true
S3 storage に関しては書き出すと次のようなものになる(Javadoc)。
# 設定した値
spark.sql.catalog.<catalog-name>.s3.endpoint = http://minio:9000
# その他参考
spark.sql.catalog.<catalog-name>.iceberg.namespace
spark.sql.catalog.<catalog-name>.iceberg.table
spark.sql.catalog.<catalog-name>.s3.acceleration-enabled
spark.sql.catalog.<catalog-name>.s3.access-grants.enabled
spark.sql.catalog.<catalog-name>.s3.access-grants.fallback-to-iam
spark.sql.catalog.<catalog-name>.s3.access-key-id
spark.sql.catalog.<catalog-name>.s3.acl
spark.sql.catalog.<catalog-name>.s3.analytics-accelerator.enabled
spark.sql.catalog.<catalog-name>.s3.checksum-enabled
spark.sql.catalog.<catalog-name>.s3.client-factory-impl
spark.sql.catalog.<catalog-name>.s3.cross-region-access-enabled
spark.sql.catalog.<catalog-name>.s3.crt.enabled
spark.sql.catalog.<catalog-name>.s3.crt.max-concurrency
spark.sql.catalog.<catalog-name>.s3.delete-enabled
spark.sql.catalog.<catalog-name>.s3.delete.batch-size
spark.sql.catalog.<catalog-name>.s3.delete.num-threads
spark.sql.catalog.<catalog-name>.s3.directory-bucket.list-prefix-as-directory
spark.sql.catalog.<catalog-name>.s3.dualstack-enabled
spark.sql.catalog.<catalog-name>.s3.multipart.num-threads
spark.sql.catalog.<catalog-name>.s3.multipart.part-size-bytes
spark.sql.catalog.<catalog-name>.s3.multipart.threshold
spark.sql.catalog.<catalog-name>.s3.path-style-access
spark.sql.catalog.<catalog-name>.s3.preload-client-enabled
spark.sql.catalog.<catalog-name>.s3.remote-signing-enabled
spark.sql.catalog.<catalog-name>.s3.retry.max-wait-ms
spark.sql.catalog.<catalog-name>.s3.retry.min-wait-ms
spark.sql.catalog.<catalog-name>.s3.retry.num-retries
spark.sql.catalog.<catalog-name>.s3.secret-access-key
spark.sql.catalog.<catalog-name>.s3.session-token
spark.sql.catalog.<catalog-name>.s3.session-token-expires-at-ms
spark.sql.catalog.<catalog-name>.s3.sse.key
spark.sql.catalog.<catalog-name>.s3.sse.md5
spark.sql.catalog.<catalog-name>.s3.sse.type
spark.sql.catalog.<catalog-name>.s3.staging-dir
spark.sql.catalog.<catalog-name>.s3.use-arn-region-enabled
spark.sql.catalog.<catalog-name>.s3.write.namespace-tag-enabled
spark.sql.catalog.<catalog-name>.s3.write.storage-class
spark.sql.catalog.<catalog-name>.s3.write.table-tag-enabled
Discussion