【Spark研究】如何用 Spark 快速开发应用?

如果你还没有仔细研究过 Spark (或者还不知道 Spark 是什么),那么本文很好地介绍了 Spark。描述了基本的数据结构、shell ,并对其包含的 API 进行了概述。


你已经知道的Hadoop是部署大规模大数据应用的最好的,并兼具高成本效益的平台之一。但当Hadoop与Apache Spark提供的执行力相结合的时候会更加强大。虽然Spark可在许多大数据平台上使用,但将其部署在有效的Hadoop平台上会更好,你可以使用已知工具快速构建大型应用。

什么是Apache Spark?

Apache Spark是处理大量数据的通用引擎。它是设计用来允许开发者快速部署大数据应用的。Spark的特点是它的弹性分布式数据集(RDDs)。数据结构既可以存在内存中也可以在磁盘上。将对象保存于内存中将带来可观的性能提升,因为应用程序无需将时间浪费在从磁盘中获取数据。

如果你有大的集群,你的数据可能传遍数百个甚至上千个节点。Apache Spark不仅快而且可靠。Spark的设计具有容错性,它能够从诸如节点或进程错误所导致的数据损失中恢复。

你可以在任何文件系统中使用Apache Spark,但是通过Hadoop,你将得到一个可靠的,分布式的文件系统,作为你的大数据应用的基础。

大数据应用程序开发的效率的另一个主要来源是人的因素。开发工具使得工作比它的现状更加复杂,但Apache Spark跳出了程序员的方式。在使用Apache Spark快速地应用开发中有两个关键:shell 和 API。

Shell

脚本语言的最大好处之一是它们的互动式 shell。利用各种方式回到早起的 Unix 时代,shell 使得你快速地尝试你的想法而不会被写/测试/编译/调试的循环放缓速度。

有想法?现在你就可以试试并且看看发生了什么。想法很简单,就是使你在本地机器上更有效率。当你使用大数据集群后,静观其变吧。

Spark提供了Scala或者Python的Shell。你可以选择任意一个你所习惯的 shell。类似Unix的系统中,你可以在Spark的目录 ./bin/pyspark下找到Python的shell,在./bin/sparkshell下找到Scala的shell。

一旦你找到了shell并且运行起来,你就可以将数据导入RDDs并且对这些数据执行所有类型的操作,例如统计行数或者找到列表中的第一个项目。操作分为两种:一种是转换,它在一个集合中创建新的列表;另一种是动作,它返回值。你也可以写自定义函数并将它们应用到你的数据。这些是为你创建RDD对象的Python方法。

例如,向Spark导入一个文本文件作为在Python的shell中的RDD,如下:

textfile = sc.textFile(“hello.txt”)

这是一个统计行数的动作:

textfile.count():

这是一个返回含有“MapR”行的列表转换:

textFile.filter(lambda line: "MapR" in line)

参照“Spark开发指南”可得到更多的信息。

API

尽管Spark本身是用Scala写的,但你可以用一些API使得你的工作容易些。如果你用过Python或者Scala的shells,那么你就已经在用这些语言的API了。你需要做的就是将你的程序保存为脚本而仅需很少的修改。

如果你在寻找构建更加健壮的程序,你可以使用Java API。即使你已经用Java完全实现了你的程序,你仍然可以在shell中勾画出的你的想法以确保在将其部署到你的集群之前你的算法是正确的。

Spark发行了一些库:Spark SQL,Spark Streaming(建立在Spark上的实时计算框架),the MLlib machine learning library(机器学习库)和GraphX。

你可以通过使用一些易用的API来构建复杂的应用并且实时部署它们。你甚至可以以混合和匹配技术来构建应用程序或者大数据管道,例如从机器学习的结果生成图的应用。由 Hadoop平台支持的 Apache Spark 提供了强大和灵活性。

通过完全支持Spark栈的MapR分布,对程序员很容易地实时创建一个复杂的大数据应用是可能的,就像批处理数据……

总结

世界变化快。你的业务所积累的数据也在不断增长,你需要一种方法来快速倒腾数据。当你能够构建大数据集群并尝试去筛选数据时,你需要正确的工具–设计用来快速处理大量数据的工具。

而运行在Hadoop上的Spark可以做到这点,它的最大优势在于提高开发人员的生产力上。通过使用Spark上的Scala和Python,在更短的时间里你可以做更多的事。你和你的开发人员可以畅游在你们的大数据思想中。

原文发布于微信公众号 - 数据科学与人工智能(DS_AI_shujuren)

原文发表时间:2015-11-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏斑斓

Apache下流处理项目巡览

我们的产品需要对来自不同数据源的大数据进行采集,从数据源的多样化以及处理数据的低延迟与可伸缩角度考虑,需要选择适合项目的大数据流处理平台。 我最初列出的候选平台...

3716
来自专栏java一日一条

Elasticsearch、MongoDB和Hadoop比较

IT界在过去几年中出现了一个有趣的现象。很多新的技术出现并立即拥抱了“大数据”。稍微老一点的技术也会将大数据添进自己的特性,避免落大部队太远,我们看到了不同技术...

1353
来自专栏CSDN技术头条

LinkedIn开源大数据计算引擎 Cubert,并为此创建新的语言

【编者按】Linkedin周二宣布开源其大数据计算引擎Cubert,其名字来源于鲁比克方块(Rubik’s Cube),为了让开发人员更容易使用Cubert,而...

2075
来自专栏企鹅号快讯

大数据处理框架是怎样的原理

处理框架和处理引擎负责对数据系统中的数据进行计算。虽然“引擎”和“框架”之间的区别没有什么权威的定义,但大部分时候可以将前者定义为实际负责处理数据操作的组件,后...

2237
来自专栏蘑菇先生的技术笔记

浅谈分布式计算的开发与实现(一)

3447
来自专栏我是攻城师

2015 Bossie评选:最佳的10款开源大数据工具

34810
来自专栏蓝天

大数据利器

1433
来自专栏CSDN技术头条

Apache Spark的承诺及所面临的挑战

Spark并非完美无瑕,目前发展到了什么程度呢?我们来一起看看Spark的优劣之处吧。 可以读一读Panopoly带来的The Evolution of the...

20410
来自专栏蓝天

大数据利器2018版

2323
来自专栏大数据-Hadoop、Spark

头条大数据实践

一、 除了日志数据,关系数据库中的数据也是数据分析的重要来源。在数据的采集方式上,用Spark实现类 Sqoop 的分布式抓取替代了早期定期用单机全量抓取 M...

1342

扫码关注云+社区

领取腾讯云代金券