大火的Apache Spark也有诸多不完美
现在如果你想要选择一个解决方案来处理企业中的大数据并不是难事,毕竟有很多数据处理框架可以任君选择,如Apache Samza,Apache Storm 、Apache Spark等等。Apache Spark应该是2016年风头最劲的数据处理框架,它在数据的批处理和实时流处理方面有着得天独厚的优势。
Apache Spark为大数据处理提供一套完整的工具,用户在大数据集上进行操作完全不需考虑底层基础架构,它会帮助用户进行数据采集、查询、处理以及机器学习,甚至还可以构建抽象分布式系统。
Apache Spark以速度而闻名,当然这是MapReduce改进的结果,它没有把数据保存在磁盘上,而是选择将数据保存在内存中。另外,Apache Spark提供了三种语言的库,即Scala,Java和Python。
Spark架构
Apache Spark虽然主要用于处理流数据,但是它也包含了很多数据执行操作的组件,上图就展示了它的不同模块。
Spark SQL:Apache Spark附带了SQL接口,这意味着用户可以直接使用SQL查询来与数据进行交互,这些查询统统是由Spark的执行引擎来处理的。
Spark Streaming:此模块提供一组API,用于编写对数据的实时流执行操作的应用程序,它会先将传入的数据流划分为微批次,然后再对数据执行操作。
MLib:MLLib提供了一组API,主要用于对大型数据集运行机器学习算法。
GraphX:支持内置的图操作算法,尤其适用于有很多连接节点的数据集。
除了数据处理库,Apache Spark还附带了一个Web UI。当运行Spark应用程序时,Web UI会默认打开4040端口进行监听,用户可以在其中查看有关任务执行器和统计信息的详细信息,甚至还可以查看任务在执行阶段所花费的时间,从而帮助用户进一步优化性能。
用例
分析:Spark在数据流传入构建实时分析时能够发挥很大作用,它可以有效处理各种来源的大量数据,支持HDFS,Kafka,Flume,Twitter和ZeroMQ,还可以处理自定义数据源。
趋势数据:Apache Spark可用于从传入事件流计算趋势数据。
物联网:物联网系统会生成大量数据然后将其推送到后端进行处理。 Apache Spark能够以固定的间隔(每分钟,小时,周,月等)构建数据管道,还可以基于一组可配置的事件触发操作。
机器学习:因为Spark可以批量处理离线数据并提供机器学习库(MLib),所以用户的数据集上可以轻松应用机器学习算法。 此外,用户可以通过一个大型数据集来实验不同的算法,将MLib与Spark Streaming组合,就可以轻松拥有一个实时机器学习系统。
虽然Apache Spark在很短的时间内就获得了极佳的人气,但是它也不是完美无缺的。
部署棘手
目前Apache Spark支持三种分布式部署方式,分别是standalone、spark on mesos和 spark on YARN。其中,独立部署是最简单直接的方法,而后两种部署方式较为复杂,对于没有经验的新手来说难度很大,在安装依赖的时候可能会遇到一些问题。如果不正确,Spark应用程序将在独立模式下工作,但在集群模式下运行时会遇到类路径异常。
内存问题
因为Apache Spark是为处理大量数据而存在的,所以监控和测量内存使用是至关重要的。Spark中有很多配置是可以根据用例进行调整的,默认配置不一定是最好的,所以建议用户要仔细阅读Spark内存配置的文档,根据自己的需求及时作出调整。
版本发布频繁导致API更改
Apache Spark无论是1.x.x版本还是2.x.x版本都一直遵循着三四个月的发布周期,虽说版本的快速迭代代表了Spark的活力和开发人员功能开发的能力,但是它也意味着API的变化。对于,不希望API变化的用户来说,频繁的版本发布反而成了一大难题,甚至为了确保Spark应用程序不受API更改的影响不得不增加额外的开销。
Python支持不成熟
Apache Spark支持Scala,Java和Python,这很对开发人员的胃口,但是这三者的地位并非平起平坐的,尤其是在涉及到新功能时,Java和Scala总是可以第一时间更新,而 Python库需要一些时间才能赶上最新的API和功能。所以用户在选用最新版本的Spark时,应该首先考虑使用Java或Scala实现,如果选用Python则需考虑 feature/API中是否已经支持。
文档贫乏
文档教程和代码演练对于新手快速提升能力非常重要,而Apache Spark的样例虽然会和文档一起分享出来,但是大部分的示例都很基本,有质量的深度样例很少,所以对于想要学习Spark的用户来说参考意义并不是很大。
后记
Apache Spark能够在短时间内击败其它对手走红,不是没有道理的,它的确是一款很好的大数据处理框架,但是如果你的数据没有达到一定的量级,选用Spark无异于杀鸡用牛刀,而简单的解决方案不失为一个更好的选择。
本文作者:田晓旭
来源:51CTO

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
增加SDN和NFV优势的三种技术
改变网络的构建方式会影响各个方面,包括从服务订购到问题管理。当企业试图为技术转型(例如软件定义网络和网络功能虚拟化)创建业务案例时必须考虑所有这些变化。 标准组织和行业论坛往往侧重于技术目标,而不是整个生态系统,而这会很快消散技术优势。 对于SDN和NFV,与很多开发技术一样,它们的优势最初都是减少资本支出。但现在运营商和其他内部人士怀疑资本支出是否可以真正推动这两种技术快速全面部署。这里的问题变成了如何利用这两个技术的其他优势。 幸运的是,下面三种技术可帮助增加SDN和NFV的优势: 1. 编排和业务建模 可帮助SDN和NFV增加价值的第一种技术是服务建模和从上到下的编排。 NFV功能模型的核心是管理和编排--由ETSI NFV行业规范组发布。这个特定的NFV功能旨在采用虚拟功能模型,并将其转变为传统硬件设备(例如路由器或防火墙)对等的部分。ETSI NFV行业规范组将业务编排划分为两个层次:服务编排和资源编排。此扩展允许运营商或供应商构建服务的功能模型,然后可进行编排来部署虚拟网络功能,以及控制传统网络组件。 编排的关键是模型,而SDN和NFV建模融合了意图模型的概念,即技术系统的...
- 下一篇
大数据时代如何提升挖掘能力
大数据如今备受关注,如何将企业中的数据挖掘出最大的价值是用户最关注的事情,目前,针对大数据领域的分析、挖掘的工具很多,但真正在市场上能够叫的出名气的却屈指可数,这是为何呢?更多的时候是很多厂商各自为政,很难让企业数据发挥最大的作用。 在大数据时代,如何提升数据的挖掘能力呢?要想提升大数据的挖掘能力,硬件系统需要提升其自身的计算性能,超强的计算能力无疑有助于企业快速的挖掘出数据中的价值,也从而让数据能够快速的反应到企业决策中去。 目前,要提升平台的计算能力,无疑可以从几个方面入手。处理器、内存以及存储,这三方面的计算能力直接影响到数据的挖掘价值。 首先我们来看下处理器,谈到处理器我们肯定会想到英特尔,在摩尔定律的推进下,英特尔的计算平台一直保持着较快的更新速度,每年我们都会看到新的计算平台的出现,英特尔在推动大数据方面无疑发挥着重要的作用。 在内存和存储方面,我们也看到这方面的发展也是非常迅速的,如今,计算平台对内存的支持越来越大,而从存储方面来看,闪存的出现无疑也加快了这方面的计算速度。 但值得我们注意的是,如今,在处理器、内存和存储方面,通过硬件的提升来促使大数据挖掘的能力已经达到...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果