在 Spark 的 YARN 模式下连接数据库并将处理后的数据写回数据库,下面以连接 MySQL 数据库为例,为你详细介绍操作步骤及代码示例。
步骤分析
- 配置环境:确保你已经完成了 Spark 在 YARN 模式下的配置,同时下载并将 MySQL 的 JDBC 驱动(
mysql-connector-java-x.x.x.jar
)放到 Spark 的jars
目录下。 - 编写代码:使用 Python(
pyspark
)或者 Scala 编写代码来连接数据库、读取数据、处理数据,最后将结果写回数据库。 - 提交任务:使用
spark-submit
命令将代码提交到 YARN 集群上运行。
代码示例
Python (PySpark)
python
from pyspark.sql import SparkSession
# 创建SparkSession
spark = SparkSession.builder \
.appName("ReadAndWriteToMySQL") \
.master("yarn") \
.getOrCreate()
# 数据库连接配置
jdbc_url = "jdbc:mysql://your_mysql_host:3306/your_database_name"
properties = {
"user": "your_username",
"password": "your_password",
"driver": "com.mysql.cj.jdbc.Driver"
}
# 从数据库读取数据
df = spark.read.jdbc(url=jdbc_url, table="your_table_name", properties=properties)
# 简单的数据处理示例:显示数据的基本信息和前几行
df.printSchema()
df.show()
# 假设我们要写回处理后的数据,这里简单地将原数据写回另一个表
new_table_name = "new_table_name"
df.write.jdbc(url=jdbc_url, table=new_table_name, mode="overwrite", properties=properties)
# 停止SparkSession
spark.stop()
Scala
scala
import org.apache.spark.sql.SparkSession
object ReadAndWriteToMySQL {
def main(args: Array[String]): Unit = {
// 创建SparkSession
val spark = SparkSession.builder
.appName("ReadAndWriteToMySQL")
.master("yarn")
.getOrCreate()
// 数据库连接配置
val jdbcUrl = "jdbc:mysql://your_mysql_host:3306/your_database_name"
val connectionProperties = new java.util.Properties()
connectionProperties.setProperty("user", "your_username")
connectionProperties.setProperty("password", "your_password")
connectionProperties.setProperty("driver", "com.mysql.cj.jdbc.Driver")
// 从数据库读取数据
val df = spark.read.jdbc(jdbcUrl, "your_table_name", connectionProperties)
// 简单的数据处理示例:显示数据的基本信息和前几行
df.printSchema()
df.show()
// 假设我们要写回处理后的数据,这里简单地将原数据写回另一个表
val newTableName = "new_table_name"
df.write.mode("overwrite").jdbc(jdbcUrl, newTableName, connectionProperties)
// 停止SparkSession
spark.stop()
}
}
提交任务到 YARN 集群
将上述代码保存为文件(例如read_write_mysql.py
或ReadAndWriteToMySQL.scala
),然后使用spark-submit
命令提交任务:
Python 代码提交
bash
spark-submit \
--master yarn \
--deploy-mode cluster \
read_write_mysql.py
Scala 代码提交
首先将 Scala 代码打包成 JAR 文件,然后使用以下命令提交:
bash
spark-submit \
--master yarn \
--deploy-mode cluster \
--class ReadAndWriteToMySQL \
your_project_name.jar
注意事项
- 要把
your_mysql_host
、your_database_name
、your_username
、your_password
、your_table_name
和new_table_name
替换成实际的数据库信息。 - 若使用不同的数据库,需要把
driver
属性和 JDBC URL 修改成对应数据库的驱动和 URL。