用spark Streamming 将mysql的数据 展示到控制台

本文详细介绍如何使用Apache Spark读取MySQL数据库中的数据,包括配置依赖、编写Spark应用程序以及使用Hadoop配置进行数据库连接设置。

第一步

依赖
  <!--对接MysQL-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.4.3</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-auth</artifactId>
            <version>2.9.2</version>
        </dependency>
drver编写
package com.baizhi.demo02

import com.mysql.jdbc.Driver
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.io.LongWritable
import org.apache.hadoop.mapreduce.lib.db.DBConfiguration
import org.apache.hadoop.mapreduce.lib.db.DBInputFormat
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

object SparkRDDMySQL {
  def main(args: Array[String]): Unit = {
    //1.创建SparkContext
    val sparkConf = new SparkConf()
      .setMaster("local[6]")
      .setAppName("wordcount")
    val sc=new SparkContext(sparkConf)
    //2.创建并行集合 数据集 抽象成 Spark 并行集合 RDD (理解Scala集合升级版)
    val hadoopConfig = new Configuration()
    DBConfiguration.configureDB(hadoopConfig,
      "com.mysql.jdbc.Driver",
      "jdbc:mysql://localhost:3306/test",
      "root", "root")

    hadoopConfig.set(DBConfiguration.INPUT_QUERY,"select id,name from t_user")
    hadoopConfig.set(DBConfiguration.INPUT_COUNT_QUERY,"select count(*) from t_user")
    hadoopConfig.set(DBConfiguration.INPUT_CLASS_PROPERTY,"com.baizhi.demo02.UserDBWriteable")

    val userRDD:RDD[(LongWritable,UserDBWriteable)] = sc.newAPIHadoopRDD(hadoopConfig,classOf[DBInputFormat[UserDBWriteable]],classOf[LongWritable],classOf[UserDBWriteable])

    userRDD.map(t=>(t._2.id,t._2.name))
        .foreach(tuple=>println(tuple))//action算子
    //4.关闭SparkContext
    sc.stop();
  }
}

package com.baizhi.demo02

import java.sql.{PreparedStatement, ResultSet}

import org.apache.hadoop.mapreduce.lib.db.DBWritable

class UserDBWriteable extends DBWritable{
  var id:Int=_
  var name:String=_
  //无需是实现-使用DBOutputForamt使用
  override def write(preparedStatement: PreparedStatement): Unit = {

  }

  //封装数据
  override def readFields(rs: ResultSet): Unit = {
    id = rs.getInt("id")
    name=rs.getString("name")
  }
}

在使用 Spark 将 TDW 数据转换并迁移到 MySQL 的过程中,需要考虑以下几个关键步骤:数据抽取、数据清洗与转换、数据加载以及性能优化。 ### 数据抽取 首先,需要从 TDW 中抽取数据。TDW 是腾讯基于 Hadoop 和 Hive 构建的分布式数据仓库,因此可以通过 Hive 查询接口来获取数据Spark 提供了对 Hive 的良好支持,可以通过 `SparkSession` 直接读取 Hive 表中的数据。 ```python from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("TDW to MySQL Migration") \ .enableHiveSupport() \ .getOrCreate() # 读取 Hive 表数据 df = spark.sql("SELECT * FROM tdw_database.tdw_table") ``` ### 数据清洗与转换 在将数据迁移到 MySQL 之前,通常需要对数据进行清洗和转换。清洗过程包括去除重复记录、处理缺失值、修正数据格式等。转换过程则可能涉及字段重命名、类型转换、数据聚合等操作。 ```python # 示例:数据清洗与转换 cleaned_df = df.dropDuplicates() \ .na.fill(0, ["numeric_column"]) \ .withColumnRenamed("old_name", "new_name") \ .select("new_name", "other_column") ``` ### 数据加载 完成数据清洗和转换后,下一步是将数据写入 MySQLSpark 提供了 `DataFrameWriter` 接口,可以通过 JDBC 连接 MySQL 并将数据写入目标表中。 ```python jdbc_url = "jdbc:mysql://mysql_host:3306/mysql_database" connection_properties = { "user": "username", "password": "password", "driver": "com.mysql.cj.jdbc.Driver" } cleaned_df.write \ .mode("overwrite") \ .jdbc(url=jdbc_url, table="mysql_table", properties=connection_properties) ``` ### 性能优化 为了提高迁移效率,可以对 Spark 作业进行性能优化。常见的优化手段包括调整分区数、合理配置资源、使用缓存机制等。 ```python # 重新分区以提高写入性能 repartitioned_df = cleaned_df.repartition(100) # 缓存中间结果以加速多次使用 repartitioned_df.cache() ``` 此外,还可以通过调整 Spark 的配置参数来进一步优化性能,例如设置合适的 `spark.sql.shuffle.partitions` 值以控制 Shuffle 操作的并行度[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值