import java.sql.{Connection, ResultSet} import com.jolbox.bonecp.{BoneCP, BoneCPConfig} import org.slf4j.LoggerFactory object ConnectionPool { val logger = LoggerFactory.getLogger(this.getClass) private val connectionPool = { try{ Class.forName("com.mysql.jdbc.Driver") val config = new BoneCPConfig() config.setJdbcUrl("jdbc:mysql://192.168.0.46:3306/test") config.setUsername("test") config.setPassword("test") config.setMinConnectionsPerPartition(2) config.setMaxConnectionsPerPartition(5) config.setPartitionCount(3) config.setCloseConnectionWatch(true) config.setLogStatementsEnabled(true) Some(new BoneCP(config)) } catch { case exception:Exception=> logger.warn("Error in creation of connection pool"+exception.printStackTrace()) None } } def getConnection:Option[Connection] ={ connectionPool match { case Some(connPool) => Some(connPool.getConnection) case None => None } } def closeConnection(connection:Connection): Unit = { if(!connection.isClosed) connection.close() } }
import java.sql.{Connection, DriverManager, PreparedStatement} import org.apache.spark.streaming.kafka.KafkaUtils import org.apache.spark.streaming.{Seconds, StreamingContext} import org.apache.spark.{SparkConf, SparkContext} import org.slf4j.LoggerFactory /** * 记录最近五秒钟的数据 */ object RealtimeCount1{ case class Loging(vtime:Long,muid:String,uid:String,ucp:String,category:String,autoSid:Int,dealerId:String,tuanId:String,newsId:String) case class Record(vtime:Long,muid:String,uid:String,item:String,types:String) val logger = LoggerFactory.getLogger(this.getClass) def main(args: Array[String]) { val argc = new Array[String](4) argc(0) = "10.0.0.37" argc(1) = "test-1" argc(2) = "test22" argc(3) = "1" val Array(zkQuorum, group, topics, numThreads) = argc val sparkConf = new SparkConf().setAppName("RealtimeCount").setMaster("local[2]") val sc = new SparkContext(sparkConf) val ssc = new StreamingContext(sc, Seconds(5)) val topicMap = topics.split(",").map((_,numThreads.toInt)).toMap val lines = KafkaUtils.createStream(ssc, zkQuorum, group, topicMap).map(x=>x._2) val sql = "insert into loging_realtime1(vtime,muid,uid,item,category) values (?,?,?,?,?)" val tmpdf = lines.map(_.split("\t")).map(x=>Loging(x(9).toLong,x(1),x(0),x(3),x(25),x(18).toInt,x(29),x(30),x(28))).filter(x=>(x.muid!=null && !x.muid.equals("null") && !("").equals(x.muid))).map(x=>Record(x.vtime,x.muid,x.uid,getItem(x.category,x.ucp,x.newsId,x.autoSid.toInt,x.dealerId,x.tuanId),getType(x.category,x.ucp,x.newsId,x.autoSid.toInt,x.dealerId,x.tuanId))) tmpdf.filter(x=>x.types!=null).foreachRDD{rdd => //rdd.foreach(println) rdd.foreachPartition(partitionRecords=>{ val connection = ConnectionPool.getConnection.getOrElse(null) if(connection!=null){ partitionRecords.foreach(record=>process(connection,sql,record)) ConnectionPool.closeConnection(connection) } }) } ssc.start() ssc.awaitTermination() } def getItem(category:String,ucp:String,newsId:String,autoSid:Int,dealerId:String,tuanId:String):String = { if(category!=null && !category.equals("null")){ val pattern = "http://www.ihaha.com/\\d{4}-\\d{2}-\\d{2}/\\d{9}.html" val matcher = ucp.matches(pattern) if(matcher) { ucp.substring(33,42) }else{ null } }else if(autoSid!=0){ autoSid.toString }else if(dealerId!=null && !dealerId.equals("null")){ dealerId }else if(tuanId!=null && !tuanId.equals("null")){ tuanId }else{ null } } def getType(category:String,ucp:String,newsId:String,autoSid:Int,dealerId:String,tuanId:String):String = { if(category!=null && !category.equals("null")){ val pattern = "100000726;100000730;\\d{9};\\d{9}" val matcher = category.matches(pattern) val pattern1 = "http://www.chexun.com/\\d{4}-\\d{2}-\\d{2}/\\d{9}.html" val matcher1 = ucp.matches(pattern1) if(matcher1 && matcher) { "nv" }else if(newsId!=null && !newsId.equals("null") && matcher1){ "ns" }else if(matcher1){ "ne" }else{ null } }else if(autoSid!=0){ "as" }else if(dealerId!=null && !dealerId.equals("null")){ "di" }else if(tuanId!=null && !tuanId.equals("null")){ "ti" }else{ null } } def process(conn:Connection,sql:String,data:Record): Unit ={ try{ val ps : PreparedStatement = conn.prepareStatement(sql) ps.setLong(1,data.vtime) ps.setString(2,data.muid) ps.setString(3,data.uid) ps.setString(4,data.item) ps.setString(5,data.types) ps.executeUpdate() }catch{ case exception:Exception=> logger.warn("Error in execution of query"+exception.printStackTrace()) } } }
使用连接池的方式获取connection
相关推荐
(1)利用SparkStreaming从文件目录读入日志信息,日志内容包含: ”日志级别、函数名、日志内容“ 三个字段,字段之间以空格拆分。请看数据源的文件。 (2)对读入都日志信息流进行指定筛选出日志级别为error或warn...
- **数据源创建**:使用 `spark streamingContext.textFileStream(directory)` 创建 DStream 从文件系统读取日志数据。 - **数据转换**:通过 `map`、`filter`、`reduceByKey` 等操作对数据进行预处理和过滤。 - ...
这种系统设计能够应对各种实时数据源,保证数据的实时性和准确性,为实时数据分析和决策提供强大支持。随着大数据技术的不断发展,实时数据处理系统的性能和应用场景将持续拓宽,为企业创造更大的价值。
通过该示例,您将了解到如何使用Spark Streaming和Kafka处理实时数据流,以及如何将处理后的数据保存到MySQL数据库中。示例涵盖了从环境搭建到代码实现的全过程,帮助您快速上手实时数据处理的开发。提供了一个完整...
【SparkStreaming】之图书评分数据实时分析系统是一个综合性的大数据处理和实时分析项目,它结合了多个技术组件,包括Hadoop、Kafka、SparkStreaming、SpringBoot和Mysql,以及Echarts用于数据可视化。这个系统的...
Spark Streaming可以处理来自多种数据源(如Kafka、Flume或TCP套接字)的连续数据流,通过微批处理的方式实现低延迟的数据处理。 此外,项目可能还利用了Spark的MLlib库进行机器学习。通过对用户的历史行为数据进行...
数据处理模块使用Spark Streaming进行实时处理;存储模块将处理后的结果存入数据库;查询分析模块提供接口供用户查询和分析数据;可视化展示模块则以图表形式展示分析结果,方便用户理解。 总结来说,这个基于Spark...
对于离线分析,Spark SQL 或 DataFrames 可以用于结构化数据的处理,而 Spark Streaming 则用于处理实时数据流,它可以以微批处理的方式高效地处理数据流,提供近实时的分析结果。 - **Spark SQL**:用于离线分析...
该项目是大三下学期的课程设计,选取了共541909条数据,以Python为编程语言,使用大数据框架Spark对数据进行了预处理,然后分别从多个方面对数据进行了分类和分析,并对分析结果进行可视化。里面包含我的课程设计...
Spark的核心组件包括:Spark Core、Spark SQL、Spark Streaming、MLlib(机器学习库)和GraphX(图计算)。Spark Core提供了基础的分布式任务调度和内存管理机制;Spark SQL用于结构化数据处理,支持SQL查询;Spark ...
1. **DataFrame API**:提供了SQL-like接口进行数据处理,支持多种数据源,如HDFS、Cassandra、Hive等。 2. **DataFrame Join操作**:用于将两个或多个DataFrame合并,支持不同类型的join(inner join, outer join,...
3. **Kafka**:作为一个高吞吐量的消息中间件,它接收Maxwell产生的JSON消息,并为Spark Streaming提供数据源。 4. **Spark Streaming**:Apache Spark的实时处理模块,用于消费Kafka中的消息,对数据进行处理和转换...
在数据仓库中,MySQL通常作为数据源,存储原始业务数据,确保数据的完整性和一致性。 Spark作为一个通用的大数据处理引擎,拥有丰富的API和工具,如Spark SQL、Spark Streaming等,可以灵活处理多种类型的数据任务...
在构建外卖大数据平台时,首先需要集成数据源。外卖平台的数据通常包括订单信息、用户行为、商家信息、配送轨迹等多维度数据。这些数据可以通过Spark的Spark Streaming或Structured Streaming模块进行实时捕获和处理...
Flume可以将MySQL的数据写入HDFS,以便进行后续的批处理分析或者作为其他Hadoop服务(如Hive、Pig等)的数据源。 4. **Kafka**: Kafka是一个高吞吐量的分布式消息系统,通常用作实时数据管道,将数据从一个位置传输...
2. **数据源**:网易云音乐作为数据来源,意味着项目中可能包含用户的听歌记录、歌曲喜好、评论、分享等多种类型的数据。这些数据通常存储在分布式文件系统(如HDFS)或者NoSQL数据库中,如HBase或Cassandra。 3. *...
实时计算是指通过流处理方式计算当日的数据,例如使用Spark Streaming等技术。实时计算需要通过代码,往往需要对接多种数据容器完成,相对开发较为复杂。 实时计算特点 * 局部计算 * 开发成本较高 * 资源成本较高 ...
Spark的计算过程主要包括从数据源读取数据,进行数据分区,计算中间结果,并将最终结果写回数据源。 Spark开发相关的知识点包括: 1. Spark核心架构:Spark Core是Spark生态系统的核心组件,负责处理数据的读取和...
7.外部数据源(HBase和MySQL) 8.广播变量和累加器 9.Spark 内核调度 10.Spark 并行度 第三章、SparkSQL 模块 1.快速入门:词频统计 2.SparkSQL 概述 3.DataFrame 4.RDD与DataFrame转换 5.数据分析SQL和DSL 6.案例:...