apache spark

迁移到Apache Spark之前需要了解的5件事

似乎每个人都只是在谈论最热门的新技术,而忽略采用它的实际含义。 但这是自然的,对吧? 新功能和承诺胜过其他所有事物,而艰难的挑战和决​​定被抛在一边。

这次不行。 软件架构很难,权衡是游戏的名称。

在本文中,我们想退后一步,看看执行从头开始转向Spark的决定的真正含义。 非常感谢Kenshoo的开发人员和系统架构师Tzach Zohar ,他在本博文中与我们分享了他的经验。

为什么还要烦恼呢?

如果您从一个可以从分布式数据分析中受益的全新项目开始,无论是批处理分析还是精简分析,Spark都已将其优势确立为MapReduce的最佳实现。 主要是因为它使用内存处理的方式。 否则,如果您在一台服务器上获得了所需的吞吐量,并且使用的数据不会超出该范围,那么最好避免使用分布式的复杂性。 请注意,我们甚至一次都没有说过大数据。 哦 此外,Spark具有一个很棒且易于使用的机器学习库。
Spark与Hadoop

尽管您的起点很可能是您已经拥有的现有解决方案,但这会使事情变得多余。 我们将把重点放在那上面。 在难以扩展的数据库之上从Hadoop或本地解决方案迁移。 性能的提高最终可以减少硬件成本,提高生产力,或者实际上只是摆脱尝试做的事情的唯一方法。

最大的好处来自批次分析的角度,因此,如果这是您的用例–升级集群将变得更加紧迫。 在Kenshoo的情况下,单服务器MySQL解决方案已绰绰有余。 但是随着公司的发展和几年的过去,这已经不够了–每天要处理成千上万条记录,数百张表,较大记录上的十亿条记录以及TB级的数据。 不再是堪萨斯州了 。 有一点是,您无法进行所有优化,甚至TokuDB之类的高性能存储引擎也无法实现。 您最终要做的是在类固醇上安装了一个突变MySQL。

在海岸的另一边,有Spark公司,它解决了各种各样的问题,这些新问题却是长期存在的原则,并得到社区的Swift采用和许多积极的信号。

1. HDFS与Cassandra与S3

您为Apache Spark选择的存储服务器应该反映出您对系统最看重的东西。 这里的3个常见选项是Hadoop的HDFS,Apache Cassandra和Amazon的S3。 当数据局部性不是很关键时,S3适合非常特定的用例。 例如,每天运行一次的作业,或者实际上不需要任何数据和处理能力来共享机器的任何事情。 没有紧迫的工作。 至于HDFS与Cassandra的问题,运行HDFS的硬件成本较低,因为它旨在解决更简单的用例。 多低 高达10倍。 主要区别在于HDFS解决了分布式文件系统运行的问题,而Cassandra专门设计为高吞吐量键值存储。

尽管成本较高,但Cassandra在交互式流数据分析方面处于优势地位–与运行批处理作业相反。 您可以说HDFS喜欢大文件,而Cassandra不必加载所有数据,仅使用所需的数据即可访问

  • S3 –非紧急批处理作业。
  • Cassandra –非常适合流数据分析,并且对批处理作业有过高的要求。
  • HDFS –非常适合批处理作业,而不会影响数据局部性。

2.绿地与重构

好吧,所以您现在决定迁移到Spark,您应该从全新的项目开始还是基于当前应用程序进行重构? 每个人都有自己的警告,Kenshoo决定放弃绿地之路,以重构其当前系统。 该决定缩小为四个因素:

  1. 避免移动目标场景 –从头开始构建新系统需要花费时间和数月的开发时间。 在此期间,旧系统也在发生变化,因此您的规范实际上是随时间变化的移动目标。
  2. 零差异容限 –新系统应达到与旧系统相同的结果,对吗? 听起来很简单的过程是一个变相的问题。 经过多年的发展,针对特定分析过程的各种怪癖和定制已被硬编码到较旧的应用程序中。 例如,某些假设,四舍五入的结果以及来自各个客户的请求-已经创建了一个复杂的分析过程,很难从头开始重新创建。
  3. 代码是唯一的规范 –文档很有可能……不存在。 如果确实存在,则很可能不能反映系统的当前状态。 这是您可能与代码中的那些黑角有关的示例:

    “不应该”发生的东西,但是会发生吗?

  4. 测试重用 –您当前的测试与较旧的实现结合在一起,并采用不同的设置。 这里的另一个任务是重写它们以匹配新的实现。

底线:在这种情况下,重构而不是完全重新启动是最有意义的。

3.重构挑战

选择重构路径还面临挑战,未经测试的遗留代码,与其他系统组件的紧密耦合以及新体系结构的范式转换。 从相似的Hadoop架构进行切换比在单节点应用程序上进入分布式系统路径更容易。 有很多新的知识要学习,要有调整的过程,还有很多摩擦。 不论是否新建项目,这都是艰巨的任务,但是如果您确定这是值得的–隧道尽头便是一盏灯。

在Kenshoo的案例中,他们的任务是从一个拥有8年历史的庞大系统中释放瓶颈聚合器组件。 聚合器偶尔对数据执行批处理,并通过不同的键将其分组。

底线:在移动之前预先了解您的弱点,并确保针对新实现中的关键路径具有解决方案。

4.解决方法

4.1。 核心业务规则至上

重构的主要好处之一当然是代码重用。 构建新系统的第一步是首先遵循核心业务规则,并从中创建一个独立的jar。 这些方法被重构为Java静态方法,以避免Spark中的序列化问题。

4.2。 Dropwizard指标和复杂的遗留代码

继续前进,还记得“不应该发生”的例子吗? Kenshoo使用Dropwizard Metrics计数器进行装配:

你知道什么。 确实发生了很多:

发生…..“这不应该发生”

底线:事实证明,使用度量标准来度量遗留代码中的未知数是一个功能强大的工具,它可以将“隐藏”功能转变为明确的,经过良好记录和经过良好测试的功能。

4.3。 本地模式测试

为了应对测试挑战,Kenshoo充分利用了Spark的本地模式并从中汲取了灵感–在新的聚合组件中创建了一个类似Spark的嵌入式实例。 而且,他们然后采用了这个新组件,并将其嵌入到旧系统中,重用了较早的测试,并确保新系统满足所有要求:

4.4。 石墨“ diffRecorder”

除了本地模式测试之外,最后的领域是测试生产中的实际数据,并查看Spark结果是否与旧系统的结果匹配。 为此,实现了与Graphite可视化挂钩的“ diffRecorder”。 差异记录器将这两个版本不同的每个实际输入表示为Graphite Metric(石墨度量),精确指出新实现不一致的确切输入。

生成的数据有助于了解需要进行哪些调整以匹配旧系统(或发现系统中的隐藏故障)。 顺便说一句,要了解有关Graphite的更多信息,可以查看有关为系统选择最佳Graphite体系结构的文章 。

Kenshoo的Graphite仪表板

5.火花监控

Spark与Graphite紧密集成,您可以在其中绘制任何您想要的图形。 除此之外,这里的第二个工具是Spark Web UI,用于查看您的作业和性能指标。 任何严肃的Spark部署都需要在性能和监视方面投入大量精力。 这可能会成为一个非常棘手的问题,您需要熟悉内部结构才能调整系统。 为Spark编写代码很容易,但是性能又增加了另一层复杂性。 从这个意义上讲,很容易在这里出错并产生错误的代码。

查看这篇文章,我们探讨了Taboola的Spark监视架构 ,以及他们为什么要继续将Takipi添加到其监视堆栈中。

推荐的Spark入门资源

基本文档简短,直接,可以完成工作。 有关Spark性能调整的更高级的主题主要可以在以前的Spark峰会的录制演讲中找到。

结论

存储,重构技术,监视,测试重用和一致的结果–我们希望您发现所提供的解决方案有用,并且知道如何在需要时应用它们。 向新技术的过渡非常困难。 除了学习曲线外,它们还使您更容易出错(也使您更有可能在半夜接听电话以解决某些关键的生产问题)。 对于这种情况,我们启动了Takipi的Spark错误分析 。

我们要再次感谢Kenshoo的Tzach Zohar与我们分享他的经验!

翻译自: https://www.javacodegeeks.com/2015/08/apache-spark-5-pitfalls-you-must-solve-before-changing-your-architecture.html

apache spark

apache spark_Apache Spark:更改架构之前必须解决的5个陷阱相关推荐

  1. Apache Spark:更改架构之前必须解决的5个陷阱

    迁移到Apache Spark之前需要了解的5件事 似乎每个人都只是在谈论最热门的新技术,而忽略采用它的真正含义. 但这是自然的,对吧? 新功能和承诺胜过其他一切,而艰巨的挑战和决​​定被抛在一边. ...

  2. apache spark_Apache Spark软件包,从XML到JSON

    apache spark Apache Spark社区为扩展Spark付出了很多努力. 最近,我们希望将XML数据集转换为更易于查询的内容. 我们主要对每天进行的数十亿笔交易之上的数据探索感兴趣. X ...

  3. apache spark_Apache Spark Job的剖析

    apache spark Apache Spark是通用的大规模数据处理框架. 了解spark如何执行作业对于获取大部分作业非常重要. 关于Spark评估范式的简要介绍:Spark使用的是惰性评估范式 ...

  4. apache spark_Apache Spark中的自定义日志

    apache spark 您是否曾经对运行了几个小时的Spark作业感到沮丧,但由于基础设施问题而失败了. 您会很晚才知道此故障,并浪费了数小时的时间,当Spark UI日志也无法进行事后检查时,它会 ...

  5. Spark运行程序异常信息: org.apache.spark.SparkException: Task not serializable 解决办法

    Spark运行程序异常信息: org.apache.spark.SparkException: Task not serializable 解决办法 参考文章: (1)Spark运行程序异常信息: o ...

  6. Apache Kafka / Spark流系统的性能调优

    电信行业的实际案例研究 调试实际的分布式应用程序可能是一项艰巨的任务. 至少在一开始,最常见的Google搜索并没有什么用. 在这篇博客文章中,我将详细介绍如何将Apache Kafka / Spar ...

  7. Apache Kylin Spark Cubing on Kubernetes 初探

    2019独角兽企业重金招聘Python工程师标准>>> 背景介绍 相信凡是关注容器生态圈的人都不会否认,Kubernetes 已经成为容器编排调度的实际标准,不论 Docker 官方 ...

  8. Spark SQL架构工作原理及流程解析

    Spark SQL架构工作原理及流程解析,spark sql从shark发展而来,Shark为了实现Hive兼容,在HQL方面重用了Hive中HQL的解析.逻辑执行计划翻译.执行计划优化等逻辑. Sp ...

  9. Spark系列之Spark体系架构

    title: Spark系列 第四章 Spark体系架构 4.1 Spark核心功能 Alluxio 原来叫 tachyon 分布式内存文件系统 Spark Core提供Spark最基础的最核心的功能 ...

最新文章

  1. CentOS下yum找不到安装软件的解决方法。
  2. 线程管理(七)守护线程的创建和运行
  3. Flex开源开发框架
  4. 深入研究 Java Synchronize 和 Lock 的区别与用法
  5. Angular2学习笔记——在子组件中拿到路由参数
  6. 写出高质量的代码——“零星”总结(延续3)
  7. MySql中执行 GROUP BY 分组 遇到 1055错误
  8. Qt与VS2005/2008的完美配合(转)
  9. IOS文件操作(NSFileManager)
  10. 全网首发:FreeSwitch BANNER支持中文
  11. 二进制文件与文本文件详解
  12. 火车头伪原创接口【基于ai伪原创】
  13. CSS动画 animation与transition
  14. 网络编辑必知常识:什么是PV、UV和PR值
  15. Windows系统快速修改IP地址的方法
  16. matlab三维画图总结
  17. 判断银行卡号归属银行和卡类型
  18. lnk306dn引脚功能_LNK306DN
  19. 《18岁,你读了大学~》
  20. 小米手机搭载鸿蒙,弃安卓支持华为,小米新机要率先搭载鸿蒙,这话到底是谁说的...

热门文章

  1. P3233-[HNOI2014]世界树【虚树,倍增】
  2. CF786E-ALT【网络流,倍增】
  3. NOIP2018普及组复赛解析
  4. 牛客练习赛 56 E tarjan 割边
  5. HDU5322 - cdq分治FFT加速dp
  6. UVA4671 K-neighbor substrings FFT+字符串hash
  7. 关于Icon,Image,ImageIcon的简单的对比参考 上篇
  8. jdk和cglib简单理解
  9. 优秀学生专栏——孙振涛
  10. 当当网新用户注册界面——界面源码