Spark学习之Spark Streaming(9)

Spark学习之Spark Streaming(9)

1. Spark Streaming允许用户使用一套和批处理非常接近的API来编写流式计算应用,这就可以大量重用批处理应用的技术甚至代码。

2. Spark Streaming使用离散化(discretized steam)作为抽象表示,叫做DStream。DStream是随时间推移而收到的数据的序列。

3. DSteam支持两种操作:转换操作(transformation),会生成一个新的DStream;另一种是输出操作(output operation),可以把数据写入到外部系统中。

4. Spark Stream的简单例子

需求:使用maven或者sbt打包编译出来独立应用的形式运行。从一台服务器的7777端口接受一个以换行符分隔的多行文本,要从中筛选出包含单词error的行,并打印出来。

    //Maven 索引
    groupID = org.apache.spark
    artifactID = spark-steaming_2.10
    version = 1.2.0
    //Scala流计算import声明
    import org.apache.spark.streaming.StreamingContext
    import org.apache.spark.streaming.StreamingContext._
    import org.apache.spark.streaming.dstream.DStream
    import org.apache.spark.streaming.Duration
    import org.apache.spark.streaming.Seconds
    //用Scala进行流式筛选,打印包含“error”的行
        //从SparkConf创建StreamingContext并指定1秒钟的处理
    val ssc = new SteamingContext(conf,Seconds(1))
        //连接到本地机器7777端口上后,使用收到的数据创建DStream
    val lines = ssc.socketTextStream("localhost",7777)
        //从DStream中筛选出包含字符串“error”的行
    val errorLines = lines.filter(_.contains("error"))
        //  打印拥有“error”的行
    errorLines.print()
    //用Scala进行流式筛选,打印出包含“error”的行
    ssc.start()
    //等待作业完成
    ssc.awaitTermination()
注意:一个Streaming context只能执行一次,所以只有在配置好所有DStream以及所需要的输出操作之后才启动。

最后:在Linux/Mac操作系统上运行流计算应用并提供数据
    $spark-submit --class com.oreilly.learningsparkexamples.scala.streamingLogInput \
    $ASSEMBLY_JAR local[4]

    $ nc localhost 7777 # 使你可以键入输入的行来发送给服务器 
Windows nc命令对应ncat

5. DStream 的转化操作可以分为两种:无状态(stateless)转化操作和有状态(stateful)转化操作。

5.1无状态转化操作中,每个批次的处理不依赖于之前批次的数据。
例如map()、filter()、reduceByKey()等。
5.2有状态转化操作中,需要使用之前批次的数据或者中间结果来计算当前批次的数据。
有状态转化操作包括基于滑动窗口的转化操作和追踪状态变化的转化操作。

6. 输出操作

输出操作指定了对数据经转化操作得到的数据所要执行的操作(例如把结果输出推入外部数据库或输出到屏幕上)。

7. 输入源包括:核心数据源、附加数据源、多数据源与集群规模。

8. Steaming用户界面http://localhost:4040可以查看运行详细信息。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习从入门到成神

Pandas使用DataFrame进行数据分析比赛进阶之路(二):日期数据处理:按日期筛选、显示及统计数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

3341
来自专栏CaiRui

详细grep、sed、awk

[root@VM_0_7_centos tmp]# cat 1.txt 1 2 3 4 5 6 [root@VM_0_7_centos tmp]# cat 2...

4447
来自专栏技术碎碎念

处理机进程调度模拟

一、进程调度 无论是在批处理还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按...

37711
来自专栏祝威廉

自定义Spark Partitioner提升es-hadoop Bulk效率

之前写过一篇文章,如何提高ElasticSearch 索引速度。除了对ES本身的优化以外,我现在大体思路是尽量将逻辑外移到Spark上,Spark的分布式计算能...

1303
来自专栏程序你好

Apache Spark大数据处理 - 性能分析(实例)

今天的任务是将伦敦自行车租赁数据分为两组,周末和工作日。将数据分组到更小的子集进行进一步处理是一种常见的业务需求,我们将看到Spark如何帮助我们完成这项任务。

1253
来自专栏每日一篇技术文章

Metal_入门01_为什么要学习它

Metal 系列教程 Metal_入门01_为什么要学习它 Metal_入门02_带你走流程

982
来自专栏人人都是极客

环形缓冲区的实现

队列 (Queue):是一种先进先出(First In First Out ,简称 FIFO)的线性表,只允许在一端插入(入队),在另一端进行删除(出队)。

1623
来自专栏Python

Python任务调度模块 – APScheduler,Flask-APScheduler实现定时任务

  看代码,定义一个函数,然后定义一个scheduler类型,添加一个job,然后执行,就可以了,代码是不是超级简单,而且非常清晰。看看结果吧。

4760
来自专栏蓝天

改进型MapReduce

本文通过对MapReduce的分析,列出MapReduce存在的问题,然后提出一种解决这些问题的改进型MapReduce,这种改进型的MapReduce暂且取名...

852
来自专栏张宁的专栏

【腾讯云的1001种玩法】Ubuntu 14.04 Spark单机环境搭建与初步学习

最近毕设需要学习Spark操作,预先学习了一波。也撰写个文章供各位讨论分享。安装与配置大数据这个领域是热火朝天,而Apache Spark则是一个炙手可热大数据...

7290

扫码关注云+社区