spark streaming多个输入DStream并行运行的问题

wjhdtx 2015-05-18 06:13:12
spark官网,多个receive(对应多个输入dstream)并行运行通过下面的代码解决:

int numStreams = 5;
List<JavaPairDStream<String, String>> kafkaStreams = new ArrayList<JavaPairDStream<String, String>>(numStreams);
for (int i = 0; i < numStreams; i++) {
kafkaStreams.add(KafkaUtils.createStream(...));
}
JavaPairDStream<String, String> unifiedStream = streamingContext.union(kafkaStreams.get(0), kafkaStreams.subList(1, kafkaStreams.size()));
unifiedStream.print();


我的程序中,使用kafka源,单个输入dstream是没有问题,当采用多个Dstream时,经过测试,两个输入DStream中的数据都接收到了,但问题是:程序只运行一次,或者说只接收一次数据,后面就不再接收了,我的代码如下:


String groupId = args[0];
String zookeepers = args[1];
String topics = "tpsN5a";
Integer numPartitions = Integer.parseInt(args[3]);

Map<String, Integer> topicsMap = new HashMap<String, Integer>();
for (String topic : topics.split(",")) {
topicsMap.put(topic, numPartitions);
}
// 多长时间统计一次
Duration batchInterval = Durations.seconds(2);
SparkConf sparkConf = new SparkConf().setAppName("JavaKafkaConsumerWordCount");

JavaStreamingContext ssc = new JavaStreamingContext(sparkConf,
batchInterval);

JavaPairReceiverInputDStream<String, String> kafkaStream = KafkaUtils
.createStream(ssc, zookeepers, groupId, topicsMap, StorageLevel.MEMORY_AND_DISK_SER());

String topics2 = "tpsN5b";
Map<String, Integer> topicsMap2 = new HashMap<String, Integer>();
topicsMap2.put(topics2, numPartitions);
JavaPairReceiverInputDStream<String, String> kafkaStream2 = KafkaUtils
.createStream(ssc, zookeepers, groupId, topicsMap2, StorageLevel.MEMORY_AND_DISK_SER());

List<JavaPairDStream<String, String>> kafkaStreams = new ArrayList<JavaPairDStream<String, String>>(2);
kafkaStreams.add(kafkaStream);
kafkaStreams.add(kafkaStream2);

ssc.checkpoint("/spark/stream/checkpoint/d1");

JavaPairDStream<String, String> unifiedStream = ssc.union(kafkaStreams.get(0), kafkaStreams.subList(1, kafkaStreams.size()));

JavaDStream<String> lines = unifiedStream//kafkaStream
.map(new Function<Tuple2<String, String>, String>() {
@Override
public String call(Tuple2<String, String> arg0)
throws Exception {
logger.warn(Thread.currentThread().getName() + " msg1:" + arg0._1 + "|msg2:" + arg0._2);
return arg0._2();
}
});



请教如何解决上面提到的问题,当采用多个输入DStream并行接收数据时,streaming程序能持续接收数据,而不是只接收一次?
...全文
1955 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
储物柜 2019-05-22
  • 打赏
  • 举报
回复
请问你的多个输入DStream的groupid是一样的吗?换句话说你的多个输入DStream都属于一个消费者群组吗?
FightForData 2018-01-26
  • 打赏
  • 举报
回复
运行了一下,没问题,在程序最后加上如下代码即可: ssc.start(); ssc.awaitTermination();
langzicjx2010 2015-12-16
  • 打赏
  • 举报
回复
问题解决了吗?我也遇到了类似的问题。
wjhdtx 2015-05-18
  • 打赏
  • 举报
回复
我用的是spark1.3.1,使用了预写日志,我的预写日志的接收数据中,能接收到kafka发的消息,但在程序中怎么接收不到呢
手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程简介 知识点介绍、代码演示、逻辑分析、灵活举例、使用图形的方式详细演示代码的流程和细节、整合企业级实战案例,全面讲解并突出重点,让学习也变成一种快乐。 课程亮点 1,知识体系完备,阶段学习者都能学有所获。 2,综合各种方式演示代码、分析逻辑,生动形象,化繁为简,讲解通俗易懂。 3,结合工作实践及分析应用,培养解决实际问题的能力。 4,使用综合案例来加强重点知识,用切实的应用场景提升编程能力,充分巩固各个知识点的应用。 5,整个课程的讲解思路是先提出问题,然后分析问题,并编程解决解题。 适用人群 1、对大数据感兴趣的在校生及应届毕业生。 2、对目前职业有进一步提升要求,希望从事大数据行业高薪工作的在职人员。 3、对大数据行业感兴趣的相关人员。 课程内容 第一章、Spark 基础环境 1.课程安排说明 2.Spark 框架概述 3.快速入门 4.Standalone集群及HA 5.Spark 应用开发入门 6.Spark 应用提交 7.Spark on YARN 8.应用部署模式DeployMode 第二章、SparkCore 模块 1.RDD 概念及特性 2.RDD 创建 3.RDD 函数及使用 4.RDD 持久化 5.案例:SogouQ日志分析 6.RDD Checkpoint 7.外部数据源(HBase和MySQL) 8.广播变量和累加器 9.Spark 内核调度 10.Spark 并行度 第三章、SparkSQL 模块 1.快速入门:词频统计 2.SparkSQL 概述 3.DataFrame 4.RDD与DataFrame转换 5.数据分析SQL和DSL 6.案例:电影评分数据分析 7.DataSet 8.外部数据源Exeternal DataSource 9.集成Hive 10.自定义函数UDF 11.分布式SQL引擎(spakr-sql和Spark ThriftServer) 12.Catalyst 优化器 第四章、离线综合实战 1.综合实战概述(需求、调研、业务) 2.环境搭建(大数据环境和应用开发环境) 3.项目初始化(工具类和属性文件) 4.广告数据ETL 5.Spark 分布式缓存 6.业务报表分析 7.应用执行部署 8.Oozie和Hue集成调度Spark 应用 第五章、SparkStreaming 模块 1.Streaming流式应用概述 2.Streaming 计算模式 3.SparkStreaming计算思路 4.入门案例 5.SparkStreaming工作原理 6.DStream及函数 7.集成Kafka 8.案例:百度搜索风云榜(实时ELT、窗口Window和状态State) 9.SparkStreaming Checkpoint 10.消费Kafka偏移量管理 第六章、StructuredStreaming模块 1.StructuredStreaming 概述(核心设计和编程模型) 2.入门案例:WordCount 3.输入源InputSources 4.Streaming Query 设置 5.输出终端OutputSink 6.集成Kafka(Source和Sink) 7.案例:物联网设备数据分析 8.事件时间窗口分析 9.Streaming Deduplication数据去重 10.Continues Processing连续流处理 第七章、实时综合实战 1.综合实战概述(需求、环境搭建和项目初始化) 2.模拟交易订单数据 3.数据实时ETL存储Kafka 4.实时应用停止 5.实时增量存储(存储HBase和Elasticsearch) 6.实时订单报表(Kafka-StructuredStreaming-Redis) 7.实时应用性能调优(数据本地性、反压机制、动态资源和日志管理)
一种大数据智能分析平台的数据分析方法及实现技术 作者:蓝科 李婧 来源:《数字技术与应用》2017年第03期 摘要:文章介绍了一种用于大数据智能分析平台的数据分析方法及实现技术, 介绍了这种方法的需求和意义;和该方法的总体架构,以及在数据传输、数据清洗和数 据分析的实现;概述了这种技术高并发、大数据量的优化措施和跨平台的实现。 关键词:大数据;数据分析;数据挖掘 中图分类号:TP311 文献标识码:A 文章编号:1007-9416(2017)03-0104- 02 1 综述 1.1 简介 在数字化时代,需要新一代系统架构提升业务创新能力。在新一代系统架构中 ,大数据是核心要素。业务应用能否自主发现与自助获得高质量的大数据,就成为业务 创新成败的关键。这就要在搭建大数据平台时,就着手大数据治理相关建设。 1.2 需求和意义 从某种意义上说大数据治理架构需要以元数据为核心、提高大数据质量、透明 化大数据资产、自助化数据开发、自动化数据发布、智能化数据安全,提升大数据平台 服务能力,让大数据平台变得易使用、易获得、高质量。 但是,目前很多技术解决方案存在诸多安全和效率隐患:业务系统多,监管力 度大;数据量庞大且呈碎片化分布,急需提升大数据质量;数据格式不规范、难以在短 时间内找到所需数据;数据在各阶段的应用角度不同,需要降低系统间的集成复杂度。 2 功能设计 2.1 总体架构 本文讲述的数据分析方法及实现技术是建立在Hadoop/Spark技术生态圈的基础 之上,以实现用户集成处理、、清理、分析的一个统一的数据处理平台;按数据类别分 为线数据、归档数据;按数据格式分为非结构化数据、结构化数据;按数据模型分类为 范式化模型数据、维度模型数据;按数据采集频度分为非实时数据、准实时数据处理架 构;并提供数据中心平台与安全管理方案,为企业级用户建立一个通用数据处理和分析 中心。如图1所示。 2.2 在线数据 在线数据在线通过接口去获得的数据,一般要求为秒级或速度更快。首先应当 将数据进行区分:在线数据、或归档数据。本平台中采用:Storm或Spark Streaming框架进行实现。Spark Streaming将数据切分成片段,变成小批量时间间隔处理,Spark抽象一个持续的数据流 称为DStream(离散流),一个DStream是RDD弹性分布式数据集的micro- batch微批次,RDD是分布式集合能够并行地被任何函数操作,也可以通过一个滑动窗口 的数据进行变换。 2.3 归档数据 归档数据是在线存储周期超过数据生命周期规划的数据,处理的要求一般在分 钟级或速度更慢。通常归档数据的计算量、数据量、数据复杂度均超过试试数据处理。 本平台中采用:Hadoop、Spark技术生态体系内的框架进行计算,这里不详细阐述。 2.4 非结构化数据 通常非结构化的数据不一定具备字段,即使具备字段其长度也不固定,并且字 段的又可是由可不可重复和重复的子字段组成,不仅可以包含结构化数据,更适合处理 非结构化数据。常见的非结构化数据包括XML、文本、图象、声音、影音、各类应用软件 产生的文件。 针对包含文字、数据的为结构化数据应当先利用数据清洗、数据治理工具进行 提取,这项工作目前仍依赖技术员进行操作,由于格式的复杂性所以难以使用自动化方 式进行较为高效的批处理。在治理数据的过程中,需要根据情况对数据本身额外建立描 述数据结构的元数据、以及检索数据的索引服务,以便后续更佳深度利用数据。 2.5 结构化数据 结构化数据具备特定的数据结构,通常可以转换后最终用二维的结构的数据, 并且其字段的含义明确,是挖掘数据价值的主要对象。 本平台中主要使用Hadoop Impala和Spark SQL来进行结构化数据的处理。Impale底层采用C++实现,而非Hadoop的基于Java的Map- Reduce机制,将性能提高了1-2个数量级。而Spark SQL提供很好的性能并且与Shark、Hive兼容。提供了对结构化数据的简便的narrow- waist操作,为高级的数据分析统一了SQL结构化查询语言与命令式语言的混合使用。 结构化数据根据采集频度可以继续分类为:非实时数据、准实时数据。 2.6 准实时数据 通常准实时数据是指数据存储在平台本身,但更新频率接近于接口调用数据源 的数据。适合用于支持数据和信息的查询,但数据的再处理度不高,具有计算并发度高 、数据规模大、结果可靠性较高的特点。通常使用分布式数据处理提高数据规模、使用 内存数据进行计算过程缓冲和优化。本平台主要采用Spark SQL结合高速缓存Redis的技术来实现。Spark SQL作为大数据的基本查询框架,Redis作为高速缓存去缓存数据热区,减小高并发下的 系统负载。 2.7 非实时数据 非实时数据

1,258

社区成员

发帖
与我相关
我的任务
社区描述
Spark由Scala写成,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于MapReduce算法实现的分布式计算。
社区管理员
  • Spark
  • shiter
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧