学习使用一个技术框架,仅仅是理论学习,那是完全不够的,而要进入到实操层面,一个很重要的问题,就是部署应用程序的问题。今天的大数据开发学习分享,我们就来讲讲Spark框架当中,怎么部署Spark Streaming应用程序?
首先,要部署运行Spark Streaming应用程序,需要满足以下一些条件:
①使用集群管理器管理的集群
这是任何Spark应用程序的基本要求。
②将应用程序打成JAR包
必须将流式应用程序编译成JAR包。如果您正在使用spark-submit来启动应用程序,则无需提供Spark和Spark Streaming的JAR包。但是,如果您的应用程序使用高级输入源(例如Kafka,Flume),则必须将它们添加额外的依赖及其依赖项打包在用于部署应用程序的JAR中。
例如,使用KafkaUtils的应用程序必须在应用程序JAR中包含spark-streaming-kafka-0-8_2.11及其所有相关的依赖项。
③为执行程序配置足够的内存
由于接收到的数据必须存储在内存中,因此必须为执行程序配置足够的内存来保存接收到的数据。请注意,如果您要执行10分钟的窗口操作,则系统必须在内存中至少保留最后10分钟的数据。因此,应用程序的内存的大小要求取决于其中使用的操作。
④配置检查点
如果流应用程序需要配置检查点,则必须将Hadoop API兼容的容错存储中的目录(例如HDFS,S3等)配置为检查点目录,并且以这样的方式编写流应用程序:用于故障恢复。
⑤配置应用程序驱动程序的自动重启
要从驱动程序故障中自动恢复,用于运行流式应用程序的部署基础结构必须监控驱动程序进程,并在驱动程序失败时重新启动。不同的集群管理器具有不同的工具来实现:
Spark Standalone模式:
可以提交Spark应用程序驱动程序以Spark Standalone集群模式运行,即应用程序驱动程序本身在worker节点之一上运行。此外,可以指示独立集群管理器监控驱动程序,并在驱动程序由于非零退出代码或由于运行该驱动程序的节点故障而失败时重新启动它。
YARN-Yarn模式:
支持自动重启应用程序的类似机制。
Mesos模式:
Marathon已经用Mesos来实现这一功能。
⑥配置预写日志
自Spark 1.2起,我们引入了预写日志以实现强大的容错保证。如果启用,则将从接收器接收的所有数据写入配置检查点目录中的预写日志中。这样可以防止驱动程序恢复时丢失数据,从而确保零数据丢失。这可以通过设置来启用配置参数spark.streaming.receiver.writeAheadLog.enable为true。但是,这些更强的语义可能以单个接收器的接收吞吐量为代价。可以通过并行运行更多接收器来纠正此问题增加总吞吐量。
另外,由于启用了预写日志,因此建议禁用Spark中接收到的数据的复制,因为该日志已存储在复制的存储系统中。可以通过将输入流的存储级别设置为来完成此操作StorageLevel.MEMORY_AND_DISK_SER。在使用S3(或任何不支持刷新的文件系统)作为预写日志时,请记住启用spark.streaming.driver.writeAheadLog.closeFileAfterWrite和spark.streaming.receiver.writeAheadLog.closeFileAfterWrite。
请注意,启用I/O加密后,Spark不会加密写入预写日志的数据。如果需要对预写日志数据进行加密,则应将其存储在本机支持加密的文件系统中。
⑦设置最大接收速率
如果群集资源不足以使流式应用程序以最快的速度处理数据,则可以通过设置记录/秒的最大速率限制来限制接收器的速率。在Spark 1.5中,引入了一项称为背压的功能,该功能消除了设置此速率限制的需要,因为Spark Streaming会自动计算出速率限制,并在处理条件发生变化时动态调整它们。这个背压可以通过设置来启用配置参数spark.streaming.backpressure.enabled为true。
关于大数据开发学习,怎么部署Spark Streaming应用程序,以上就是基本的介绍了。Spark Streaming作为流计算引擎,在部署阶段最好是能够在分布式集群环境下进行,更贴近于实际工作场景。
网友评论