sparkStreaming 连接mysql测试

本文介绍了一个使用 Scala 和 Spark Streaming 的实时数据处理应用案例。该应用通过 Socket 接收数据,并利用 RDD 对数据进行处理和统计分析后存入 MySQL 数据库。文章提供了完整的代码示例,包括如何设置 Spark 环境、数据接收、处理流程及数据库写入等关键步骤。

 

netcat for windows

链接:https://pan.baidu.com/s/1crvMSL4JS_ZTCcFr9CPc9w 
提取码:o2yx 
 

 

因为代码是在windows 写的local模式   所以得下载一个netcat工具作为端口测试工具

 

package com.scala

import java.sql.DriverManager

import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}

object ForeachRDDApp {
  def main(args: Array[String]): Unit = {


    val sparkConf = new SparkConf().setAppName("ForeachRDDApp").setMaster("local[2]")

    val ssc = new StreamingContext(sparkConf, Seconds(5))

    val lines = ssc.socketTextStream("localhost", 9998)

    val result = lines.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_)


    result.print()
    result.foreachRDD { rdd =>
      rdd.foreachPartition { partitionOfRecords =>
        // ConnectionPool is a static, lazily initialized pool of connections
        val connection = createConnection()
        partitionOfRecords.foreach(record => {
          var sql = "insert into wordcount(word, wordcount) values('" + record._1 + "'," + record._2 + ")"
          connection.createStatement().execute(sql)
        })
        connection.close()
      }
    }

    ssc.start()
    ssc.awaitTermination()
  }


  def createConnection() = {
    Class.forName("com.mysql.jdbc.Driver")
    DriverManager.getConnection("jdbc:mysql://localhost:3306/test_spark","root","root")
  }
}

然后再用 nc -L -p 9998 -v 才能连接这个程序  看日志说 如果不先启动监听程序  有可能会报错  我之后会在验证

学习Spark从MySQL中提取增量数据并存储到Hive中,可以按照以下几个步骤来进行: 1. **安装与配置**: - 安装Apache Spark、Scala(如果Spark依赖)、Python(PySpark),以及MySQL和Hadoop(包括Hive)。 - 配置环境变量,比如`SPARK_HOME`、`JAVA_HOME`等,并确保所有工具都能相互找到。 2. **设置连接库**: - 对于Python,你可以使用`pymysql`库连接MySQL,对于Scala则有`jdbc`库。 3. **创建DataFrame**: - 使用Spark SQL的`read.format("jdbc")`函数读取MySQL数据,指定URL、用户名、密码以及SQL查询(通常是一个SELECT * FROM table WHERE ...命令,用于选择增量数据)。 ```python from pyspark.sql import SparkSession # 创建SparkSession spark = SparkSession.builder.appName("mysql_to_hive").getOrCreate() # 连接MySQL df_mysql = spark.read.format("jdbc").options( url="jdbc:mysql://localhost:port/db_name", driver="com.mysql.jdbc.Driver", username="username", password="password", query="SELECT * FROM table WHERE modified_date > last_synced_date" ).load() ``` 4. **处理数据**: - 数据可能存在脏数据,如空值或非结构化,需要根据需求进行清洗和转换。 5. **写入Hive**: - 将DataFrame保存到Hive表中,这会直接更新Hive表,而不是生成一个新的分区,除非你明确地指定创建新分区。 ```python df_mysql.write \ .format("parquet") # 或者"orc", "csv"等格式,取决于Hive支持的存储格式 .mode("append") # 表示追加模式,仅写增量数据 .saveAsTable("target_table") ``` 6. **测试与优化**: - 验证数据是否正确加载到Hive,检查日志和性能指标。 - 如果数据量大,考虑分批处理或使用Spark Streaming做实时流式处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值