AmosCloud

Library

Have a Question?

If you have any question you can ask below or enter what you are looking for!

流式计算day03_sparkStreaming

SparkStreaming

  • 伪流式计算(微批处理)

  • Storm(真流式计算)
    Storm是一个分布式流式计算框架
    Storm集群是一个主从的架构有两个角色,主节点叫Nimbus,从节点叫supervisor
    Storm将流式程序抽象成一个一个的topology结构,每个topology结构由若干个Spout(数据源)和若干个bolt(数据处理环节)组成,每个组件之间以键值对(KV结构的tuple)进行数据传输。
    Storm编写流式程序时,先单独编写每一个Spout和bolt,再编写一个主程序,将所有已经实现好的需要用到的组件拼接成一个有向图(topology结构),提交到集群运行。

1. SparkStreaming架构模型

file

与SparkCore和SQL不同的是,Streaming程序需要有一个单独的cpu核心用来启动一个叫做接收器的线程,所以如果整个集群只有1个核心可用,这个核心会用来做接收器,而没有足够的核心做数据处理,那么Streaming程序可以启动,但是不是执行运算。

Streaming至少要占用2个CPU核心

3.SparkStreaming读取kafka

  1. spark-streaming-kafka
    老API的依赖最新更新到
    Spark1.6.3 对应兼容的kafka版本是0.8.2.1
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming-kafka_2.11</artifactId>
    <version>1.6.3</version>
</dependency>

运行时会出现错误java.lang.NoClassDefFoundError: org/apache/spark/Logging
广义:java中出现类找不到,或者方法找不到通常有两种情况,
1真找不到 引入依赖或者单独引入对应的类或者方法
2多个版本冲突 排除所有相关依赖,单独引入兼容的版本
狭义:当前问题,是由于使用的依赖中的Logging类是spark1.6.3中的类,新版本的spark已经替换了,如果想正常执行
1.替换spark依赖到老版本(不合理)
2.去老版本中找到对应类,放在新项目中

注意!kafka集群的配置中,我们设置listener时,
如果使用的是IP地址,那么将来连接集群时就必须使用IP地址,
如果设置时使用的是主机名那么连接时必须使用主机名。