如何在Dataproc集群中配置Kerberos并运行SQL Server读取脚本
Dataproc集群Kerberos配置与Spark作业迁移方案
1. Dataproc集群的Kerberos整体配置步骤
- 创建带Kerberos的Dataproc集群:用gcloud命令创建时关联你的AD域(适配Windows身份验证服务账号),命令示例:
gcloud dataproc clusters create <集群名> \ --region <区域> \ --kerberos-realm <你的AD域> \ --kerberos-kdc <AD域控制器地址> \ --kerberos-admin-server <AD域控制器地址> \ --service-account <Dataproc服务账号> - 配置krb5.conf:登录集群主节点,编辑
/etc/krb5.conf,替换为和本地一致的AD域配置,核心内容示例:[libdefaults] default_realm = YOUR_AD_REALM.COM dns_lookup_kdc = true dns_lookup_realm = true [realms] YOUR_AD_REALM.COM = { kdc = ad-controller.your-ad-realm.com admin_server = ad-controller.your-ad-realm.com } - 上传服务账号keytab:将本地生成的服务账号keytab(如
sql_service.keytab)上传至集群统一路径(比如/etc/security/keytabs/),设置权限为600,确保仅root和Spark进程可访问。 - 同步SQL Server权限:确认服务账号已在SQL Server中配置登录权限,且SQL Server已加入AD域、SPN配置正确。
2. 集群创建后的令牌刷新处理
- 定时自动刷新:给Spark用户配置crontab定时任务,定期执行kinit刷新令牌,示例:
# 切换到Spark用户 su spark # 编辑定时任务 crontab -e # 添加每日凌晨2点刷新的任务 0 2 * * * kinit -kt /etc/security/keytabs/sql_service.keytab <服务账号@YOUR_AD_REALM.COM> - 用k5start工具自动维持令牌:安装k5start后后台运行,每12小时自动刷新,命令示例:
# 安装k5start apt-get install k5start # 后台启动,每12小时刷新一次令牌 k5start -f /etc/security/keytabs/sql_service.keytab <服务账号@YOUR_AD_REALM.COM> -K 43200 -D - Spark作业级自动认证:提交作业时指定
--keytab和--principal参数,让作业自动获取令牌,无需手动执行kinit。
3. Dataproc上运行的PySpark代码示例
PySpark脚本(sql_server_kerberos.py)
from pyspark.sql import SparkSession def main(): spark = SparkSession.builder \ .appName("SQLServerKerberosRead") \ .getOrCreate() # JDBC连接参数 jdbc_url = "jdbc:sqlserver://<SQL_SERVER_IP>:1433;databaseName=<DB_NAME>;integratedSecurity=true;authenticationScheme=JavaKerberos" connection_properties = { "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver", "principal": "<服务账号@YOUR_AD_REALM.COM>" } # 读取SQL Server表 df = spark.read.jdbc( url=jdbc_url, table="<TABLE_NAME>", properties=connection_properties ) # 打印前10条数据验证 df.show(10) spark.stop() if __name__ == "__main__": main()
作业提交命令
spark-submit \ --master yarn \ --deploy-mode cluster \ --keytab /etc/security/keytabs/sql_service.keytab \ --principal <服务账号@YOUR_AD_REALM.COM> \ --jars /path/to/mssql-jdbc-<版本号>.jar,/path/to/sqljdbc_auth-<版本号>.so \ sql_server_kerberos.py
注:需提前将SQL Server JDBC驱动(mssql-jdbc.jar)和Linux版认证库(sqljdbc_auth.so)上传至集群并指定路径。
内容的提问来源于stack exchange,提问作者saravana ir
相关产品推荐
相关产品推荐

