Spark Streaming小结
来源:互联网 发布:java spring 单例模式 编辑:程序博客网 时间:2024/06/08 02:05
Spark Streaming是core Spark API的扩展,实现可扩展(scalable),高吞吐量(high-throughput),容错的实时数据流的流式处理。数据可以从多种数据源如kafka、flume等灌入,而且可以使用带有高级函数如map、reduce、join和window的复杂算法来处理。实际上,你可以在数据流上使用spark的机器学习和图处理算法。
spark streaming接收数据,然后把它切割成batches,如下图
Spark Streaming 将其抽象为离散流或者DStream,代表了连续的数据流。Dstream的本质是一连串的RDDs
窗口操作
一个滑动的窗口,两个因素:窗口大小和滑动尺寸
例子
// Reduce last 30 seconds of data, every 10 secondsval windowedWordCounts = pairs.reduceByKeyAndWindow((a:Int,b:Int) => (a + b), Seconds(30), Seconds(10))
使用foreachRDD的设计模式
功能很强大,使用需谨慎!
使用它的时候一般是输出到外部数据源的时候,此时需要与数据源建立connection
错误的使用方式
关注注释,因为connection对象是不可序列化的,这会导致序列化错误。
dstream.foreachRDD { rdd => val connection = createNewConnection() // executed at the driver rdd.foreach { record => connection.send(record) // executed at the worker }}
低效的使用方式
在worker端每一个rdd都创建连接,很明显这个是低效而且愚蠢的方式。连接是很昂贵的资源。
dstream.foreachRDD { rdd => rdd.foreach { record => val connection = createNewConnection() connection.send(record) connection.close() }}
浪费的使用方式
相比于前者,扩大了范围rdd->partition
dstream.foreachRDD { rdd => rdd.foreachPartition { partitionOfRecords => val connection = createNewConnection() partitionOfRecords.foreach(record => connection.send(record)) connection.close() }}
正确的使用方式
使用连接池
dstream.foreachRDD { rdd => rdd.foreachPartition { partitionOfRecords => // ConnectionPool is a static, lazily initialized pool of connections val connection = ConnectionPool.getConnection() partitionOfRecords.foreach(record => connection.send(record)) ConnectionPool.returnConnection(connection) // return to the pool for future reuse }}
参考
http://spark.apache.org/docs/latest/streaming-programming-guide.html
阅读全文
0 0
- Spark Streaming小结
- Spark Streaming小结
- Spark Streaming小结
- Spark Streaming小结
- Spark Streaming小结
- Spark Streaming小结
- Spark Streaming
- spark streaming
- Spark/Streaming
- Spark Streaming
- spark streaming
- Spark Streaming
- Spark Streaming
- Spark Streaming
- Spark Streaming
- spark streaming
- Spark Streaming
- Spark Streaming
- BZOJ 3130 [Sdoi2013]费用流 题解
- MySQL
- matlab倒序打印
- Hadoop作业提交分析(一)
- STM32时钟之3
- Spark Streaming小结
- JAVA I/O 、NIO 文件读写性能对比
- C++迭代器
- continue
- Express 创建项目命令,怎么使用ejs模板?
- oracle 如何获取今天是星期几
- git 更新本地分支与远程同步
- mongod副本集部署
- 第三十九天:Aurora下拉框的三种获取数据源的形式