Spark Streaming介绍以及简单使用

本文介绍SparkStreaming,作为Spark核心API的扩展,它提供高可扩展、高吞吐量及容错的实时数据流处理能力。支持从多种数据源如Kafka、Flume等收集数据,利用复杂算法进行处理,并将结果输出至文件系统、数据库或实时仪表板。文章还涵盖了SparkStreaming的工作原理、使用方法及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Spark Streaming介绍

Spark Streaming is an extension of the core Spark API that enables scalable, high-throughput, fault-tolerant stream processing of live data streams.
Spark Streaming是Spark core的扩展,有以下特点:高可扩展、高吞吐量的、容错的流式程序作用在数据流上
Data can be ingested from many sources like Kafka, Flume, Kinesis, or TCP sockets, and can be processed using complex algorithms
expressed with high-level functions like map, reduce, join and window.
数据能够被采集,从Kafka, Flume, Kinesis, or TCP sockets中,并且可以被处理,使用复杂的算法通过高级别得方法表达,比如:map, reduce, join and window
Finally, processed data can be pushed out to filesystems, databases, and live dashboards.
最终,处理过的数据能够被推到文件系统、数据库以及在线的dashboards(仪表板)。
In fact, you can apply Spark’s machine learning and graph processing algorithms on data streams.
事实上,你可以在实时的数据流上应用Spark的机器学习和图形处理算法
在这里插入图片描述

1、总结:

将不同数据源的数据经过Spark Streaming处理之后将结果输出到外部文件系统

2、特点:

1)低延迟
2)能从错误高效的恢复:fault-tolerant
3)能运行在成百上千的节点上
4)能够将批处理、机器学习、图处理等子框架和Spark Streaming综合起来使用

3、工作原理:
粗粒度

数据流进入,Spark Streaming接收到实时数据流,把数据按照指定的时间段切成一片一片小的数据块,然后把小的数据块传给 Spark Engine处理后批次输出
在这里插入图片描述

二、Spark Streaming使用

1、Github

https://github.com/apache/spark/

2、启动nc
yum install -y nc
nc -lk 9999
3、spark-submit使用
$SPARK_HOME/bin/spark-submit --master local[2] \
--class org.apache.spark.examples.streaming.NetworkWordCount \
--name NetworkWordCount \
/app/cdh/spark-2.3.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.3.0.jar dev2 9999

–class 使用包名org.apache.spark.examples.streaming + 类名
在这里插入图片描述

4、如何使用spark-shell测试

$SPARK_HOME/bin/spark-shell --master local[2]

#由于sc在spark-shell中已经自带,我们直接使用就可以了

import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.{Seconds, StreamingContext}
val ssc = new StreamingContext(sc, Seconds(1))
val lines = ssc.socketTextStream("dev2", 9999, StorageLevel.MEMORY_AND_DISK_SER)
val words = lines.flatMap(_.split(" "))
val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _)
wordCounts.print()
ssc.start()

#StorageLevel.MEMORY_AND_DISK_SER这个参数是设置spark处理数据的存储方式,如果数据量少,我们一般使用内存

### 关于 Spark Streaming简单 Java 代码示例 为了初始化一个 Spark Streaming 应用程序,必须创建 `StreamingContext` 对象,这是所有 Spark Streaming 功能的主要入口点[^1]。 下面是一个简单的 Java 代码示例来展示如何设置并运行一个基本的 Spark Streaming 程序: ```java import org.apache.spark.SparkConf; import org.apache.spark.streaming.Durations; import org.apache.spark.streaming.api.java.JavaPairInputDStream; import org.apache.spark.streaming.api.java.JavaStreamingContext; public class SimpleSparkStreaming { public static void main(String[] args) throws InterruptedException { // 创建配置对象 SparkConf conf = new SparkConf().setAppName("Simple Spark Streaming").setMaster("local[*]"); // 初始化 StreamingContext 并设定批处理间隔时间为2秒 try (JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(2))) { // 定义数据源(此处省略具体实现) // 处理逻辑 // 启动流计算上下文 jssc.start(); jssc.awaitTermination(); } } } ``` 此代码片段展示了如何通过 `SparkConf` 来定义应用程序名称以及指定本地模式作为主节点。接着实例化了一个具有两秒钟批次持续时间的 `JavaStreamingContext`。需要注意的是,在实际应用中还需要进一步配置输入源和具体的业务逻辑处理部分。 对于更复杂的场景比如集成 Flume 收集日志信息,则可以参照如下方式构建 DStreams 接收来自 Flume 的事件,并对其进行计数操作[^4]: ```java // 假设已经有一个可用的 JavaStreamingContext 实例名为 'jssc' JavaPairInputDStream<String, String> flumeStream = FlumeUtils.createPollingStream(jssc, ...); flumeStream.count().print(); // 打印每一批次接收到的消息数量 ``` 上述例子说明了怎样利用 `FlumeUtils.createPollingStream()` 方法连接至 Flume agent 获取实时流入的数据流,并调用 `.count().print()` 输出每一时间段内所接收消息的数量统计结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛!Destiny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值