大数据开发:如何部署Spark Streamingapp
大数据开发
大数据
浏览:1382 次

学习使用技术框架只是理论学习,这是不够的。要进入实践层面,一个非常重要的问题是app的部署。今天的大数据开发学习和分享,让我们来谈谈如何在Spark框架中部署Spark Streamingapp?
首先,要部署和运行Spark Streamingapp,需要满足以下条件:
① 使用群集管理器管理的群集
这是任何Sparkapp的基本要求。
② 将app打包到JAR包中
流app必须编译成JAR包。如果您使用spark提交来启动app,则不需要提供spark和spark Streaming的JAR包。但是,如果您的app使用高级输入源(如Kafka和Flume),则必须添加额外的依赖项,并将它们打包到用于部署app的JAR中。
例如,使用KafkaUtils的app必须在appJAR_2.11中包含火花流kafka-0-8及其所有相关依赖项。
③ 为执行程序配置足够的内存

由于接收到的数据必须存储在存储器中,所以执行程序必须配置有足够的存储器来存储接收到的信息。请注意,如果要执行10分钟的窗口操作,系统必须在内存中至少保留最后10分钟的数据。因此,app的内存大小要求取决于其中使用的操作。
④ 配置检查点
如果流app需要配置检查点,则必须将Hadoop API兼容的容错存储(如HDFS、S3等)中的目录配置为检查点目录,并且流app必须以用于故障恢复的方式编写。
⑤ 配置app驱动程序的自动重启
要从驱动程序故障中自动恢复,用于运行流式app的部署基础架构必须监视驱动程序进程,并在驱动程序故障时重新启动。不同的集群管理器有不同的工具来实现:
Spark独立模式:
您可以提交Sparkapp驱动程序以在Spark独立集群模式下运行,也就是说,app驱动本身在其中一个工作节点上运行。此外,您可以指示独立群集管理器监视驱动程序,并在驱动程序因非零退出代码或运行驱动程序的节点故障而失败时重新启动它。
纱线纱线模式:

支持app自动重启的类似机制。
Mesos模式:
马拉松使用Mesos来实现此功能。
⑥ 配置写前日志
自Spark 1.2以来,我们引入了预先编写的日志,以确保强大的容错能力。如果启用,从接收器接收的所有数据都将写入配置检查点目录中的预写日志。这可以防止驱动程序恢复时的数据丢失,从而确保零数据丢失。这可以设置为启用配置参数spark.streaming.receiver。writeHeadLog Enable为true。然而,这些更强的语义可能以牺牲单个接收器的接收吞吐量为代价。您可以通过并行运行更多的接收器以提高总吞吐量来纠正此问题。
此外,由于启用了预写日志,因此建议禁用在Spark中接收的数据的复制,因为日志已存储在复制的存储系统中。这可以通过将输入流的存储级别设置为StorageLevel MEMORY_ AND_ DISK_ SER来完成当使用S3(或任何不支持刷新的文件系统)作为预写日志时,请记住启用spark.streaming.driver.writeHeadLog。closeFileAfterWrite和spark.streaming.receiver.writeHeadLog.closeFileAterWrite。
请注意,启用I/O加密时,Spark不会加密写入预写日志的数据。如果需要对预先写入的日志数据进行加密,则应将其存储在支持加密的本地文件系统中。
⑦ 设置最大接收速率

如果群集资源不足以流app以最快的速度处理数据,则可以通过设置记录/秒的最大速率限制来限制接收器的速率。在Spark 1.5中,引入了一个称为背压的函数,这消除了设置此速率限制的需要,因为Spark Streaming会自动计算速率限制,并在处理条件改变时动态调整。此背压可设置为启用配置参数spark.streaming.backpressure。启用为真。
这是大数据开发和学习的基本介绍,以及如何部署Spark Streamingapp。作为流计算引擎,Spark Streaming可以部署在分布式集群环境中,这更接近于实际工作场景。