作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
拉狄克·奥斯特洛夫斯基的头像

Radek Ostrowski

Radek是一名区块链工程师,对以太坊智能合约感兴趣. 他在机器学习方面也有丰富的经验.

Previously At

Sony
Share

我第一次听说Spark是在2013年底,当时我对Scala产生了兴趣, 编写Spark的语言. 一段时间后,我做了一个有趣的数据科学项目 预测泰坦尼克号上的生还. 这是进一步了解Spark概念和编程的好方法. 我强烈推荐给有抱负的人 Spark developers 想找个地方开始.

如今,Spark已被亚马逊、eBay和雅虎等主要公司采用! 许多组织在拥有数千个节点的集群上运行Spark. 根据Spark FAQ,已知最大的集群有超过8000个节点. 事实上,Spark是一项非常值得注意和学习的技术.

本文介绍了Spark,包括用例和示例. 它包含了来自Apache Spark网站和这本书的信息 学习火花-闪电般的快速大数据分析.

什么是Apache Spark? An Introduction

Spark 是一个被标榜为“闪电般快速集群计算”的Apache项目。. 它有一个繁荣的开源社区,是目前最活跃的Apache项目.

Spark提供了一个更快、更通用的数据处理平台. Spark让你在内存中运行程序的速度比Hadoop快100倍,在磁盘上运行程序的速度比Hadoop快10倍. Last year, Spark通过在十分之一的机器上以三倍的速度完成了100 TB Daytona GraySort比赛,从而取代了Hadoop 用于排序pb的最快开源引擎.

Spark还可以更快地编写代码,因为您可以使用80多个高级操作符. 为了演示这一点,让我们看一下“Hello World”!,以Word Count为例. 它是用Java为MapReduce编写的,大约有50行代码, 而在Spark(和Scala)中,你可以简单地这样做:

sparkContext.textFile("hdfs://...")
            .flatMap(line => line.split(" "))
            .map(word => (word, 1)).reduceByKey(_ + _)
            .saveAsTextFile(“hdfs: / /...")

在学习如何使用Apache Spark时,另一个重要的方面是它提供的开箱即用的交互式shell (REPL). Using REPL, 您可以测试每行代码的结果,而无需首先编写代码并执行整个作业. 因此,工作代码的路径要短得多,并且可以进行特别的数据分析.

Spark的其他关键特性包括:

  • 目前在Scala中提供api, Java, and Python, 支持其他语言(如R)
  • 与Hadoop生态系统和数据源(HDFS)很好地集成, Amazon S3, Hive, HBase, Cassandra, etc.)
  • 可以在Hadoop YARN或Apache Mesos管理的集群上运行,也可以独立运行

Spark核心是由一套强大的, 可以在同一应用程序中无缝使用的高级库. 这些库目前包括SparkSQL, Spark Streaming, MLlib(用于机器学习), and GraphX, 本文将进一步详细介绍其中的每一个. 其他Spark库和扩展目前也在开发中.

Spark库和扩展

Spark Core

Spark Core 是大规模并行和分布式数据处理的基础引擎吗. 它负责:

  • 内存管理和故障恢复
  • 调度、分配和监控集群上的作业
  • 与存储系统交互

Spark引入了一个概念 RDD(弹性分布式数据集)一种不可变的、容错的、可并行操作的分布式对象集合. RDD可以包含任何类型的对象,并通过加载外部数据集或分发来自驱动程序的集合来创建.

rdd支持两种类型的操作:

  • Transformations 操作(如map, filter, join, union, 等等),这些操作在RDD上执行,并产生包含结果的新RDD.
  • Actions 操作(例如reduce, count, first, 等等),在RDD上运行计算后返回一个值.

Spark中的转换是“懒惰的”,这意味着它们不会立即计算结果. 相反,它们只是“记住”要执行的操作和数据集(e.g.要对其执行操作的文件). 只有在调用操作并将结果返回给驱动程序时才实际计算转换. 这样的设计使Spark能够更高效地运行. For example, 如果一个大文件以各种方式转换并传递给第一个操作, Spark只处理并返回第一行的结果, 而不是为整个文件执行工作.

默认情况下,每次在其上运行操作时,可能会重新计算每个转换后的RDD. However, 还可以使用持久化或缓存方法在内存中持久化RDD, 在这种情况下,Spark会将这些元素保留在集群上,以便下次查询时更快地访问它.

SparkSQL

SparkSQL 是一个Spark组件,支持通过SQL或 Hive查询语言. 它起源于Apache Hive端口,运行在Spark之上(代替MapReduce),现在与Spark堆栈集成在一起. 除了提供对各种数据源的支持之外, 它可以将SQL查询与代码转换结合起来,从而形成一个非常强大的工具. 下面是一个Hive兼容查询的例子:

// sc是一个已经存在的SparkContext.
val sqlContext = new org . val.apache.spark.sql.hive.HiveContext(sc)

sqlContext.sql("CREATE TABLE IF NOT EXISTS (key INT, value STRING)")
sqlContext./src/main/resources/kv1 . sql("LOAD DATA LOCAL INPATH ".' INTO TABLE src ')

//查询用HiveQL表达
sqlContext.sql("FROM src SELECT key, value").collect().foreach(println)

Spark Streaming

Spark Streaming 支持对流数据的实时处理,如生产web服务器日志文件(如web服务器日志文件).g. Apache Flume和HDFS/S3),像Twitter这样的社交媒体,以及像Kafka这样的各种消息队列. 在底层,Spark Streaming接收输入的数据流,并将数据分批处理. Next, 它们由Spark引擎处理,并分批生成最终的结果流, as depicted below.

spark streaming

Spark Streaming API与Spark Core的API非常匹配, 使程序员更容易在批处理和流数据的世界中工作.

MLlib

MLlib 提供各种算法的机器学习库是为了在集群上扩展以进行分类吗, regression, clustering, 协同过滤, 等等(请查看Toptal关于 machine learning 有关该主题的更多信息). 其中一些算法也适用于流数据, 例如使用普通最小二乘或k均值聚类的线性回归(以及更多). Apache Mahout (面向Hadoop的机器学习库)已经放弃了MapReduce,转而与Spark MLlib合作.

GraphX

graphx

GraphX 是用于操作图和执行图并行操作的库吗. 它为ETL、探索性分析和迭代图计算提供了统一的工具. 除了图形操作的内置操作, 它提供了一个常见的图形算法库,如PageRank.

如何使用Apache Spark:事件检测用例

现在我们已经回答了“什么是Apache Spark?,让我们来思考一下它可以最有效地用于解决什么样的问题或挑战.

我最近读到一篇关于实验的文章 通过分析Twitter流来检测地震. Interestingly, 事实证明,这种技术可能比日本气象厅更快地通知你日本有地震. 尽管他们在文章中使用了不同的技术, 我认为这是一个很好的例子,可以让我们看到如何使用简化的代码片段,而不需要粘合代码.

首先,我们必须过滤与“地震”或“摇晃”相关的推文。. 我们可以很容易地使用Spark Streaming实现以下目的:

TwitterUtils.createStream(...)
            .filter(_.getText.包含("earthquake") || _.getText.包含(“摇晃”))

Then, 我们必须对推文进行一些语义分析,以确定它们是否引用了当前发生的地震. 像“地震”这样的推文!或“现在它在摇晃”。, for example, 会被认为是正匹配吗, 而像“参加地震会议”或“昨天的地震很可怕”这样的推文则不会. 本文的作者为此使用了支持向量机(SVM). 我们在这里做同样的事情,但也可以尝试a streaming version. MLlib的结果代码示例如下:

//我们将准备一些地震tweet数据并以LIBSVM格式加载.
val data = MLUtils.sample_earthquate_tweets loadLibSVMFile (sc。.txt")

//将数据分成训练(60%)和测试(40%).
val splits = data.randomSplit(数组(0.6, 0.4), seed = 11L)
Val训练=分割(0).cache()
Val test = split (1)

//运行训练算法构建模型
val numIterations = 100
val model = SVMWithSGD.培训(培训、numIterations)

//清除默认阈值.
model.clearThreshold()

//计算测试集的原始分数. 
val scoreAndLabels =测试.map { point =>
  val score = model.predict(point.features)
  (score, point.label)
}

//获取评估指标.
val metrics = new BinaryClassificationMetrics(scoreAndLabels)
val auROC =度量.areaUnderROC()

println("Area under ROC = " + auROC)

如果我们对模型的预测率满意的话, 我们可以进入下一个阶段,并在发现地震时做出反应. 要检测一个,我们需要一定的数(i).e.在定义的时间窗口内(如文章中所述)积极推文的密度. Note that, 启用了推特定位服务的推文, 我们还可以提取地震的位置. 有了这些知识, 我们可以使用SparkSQL并查询现有的Hive表(存储对接收地震通知感兴趣的用户)来检索他们的电子邮件地址并向他们发送个性化的警告电子邮件, as follows:

// sc是一个已经存在的SparkContext.
val sqlContext = new org . val.apache.spark.sql.hive.HiveContext(sc)
// sendmail是一个自定义函数
sqlContext.sql("FROM seisake_warning_users SELECT firstName, lastName, city, email")
          .collect().foreach (sendEmail)

其他Apache Spark用例

当然,Spark的潜在用例远远超出了地震检测.

这里是一个快速的(但肯定不是详尽的)!)需要处理速度的其他用例的抽样, 大数据的种类和数量, Spark非常适合:

在游戏行业, 从潜在的实时游戏事件中处理和发现模式,并能够立即对其做出反应,这是一种能够产生有利可图业务的能力, 出于玩家留存等目的, 有针对性的广告, 自动调整复杂程度, and so on.

在电子商务行业, 实时事务信息可以传递给流聚类算法 k-means 或者协同过滤 ALS. 结果甚至可以与其他非结构化数据源相结合, 例如客户评论或产品评论, 并用于随着时间的推移根据新的趋势不断改进和调整建议.

在金融或安全行业, Spark堆栈可以应用于欺诈或入侵检测系统或基于风险的身份验证. 它可以通过收集大量的存档日志来获得一流的结果, 将其与外部数据源(如有关数据泄露和受损帐户的信息)相结合(参见, for example, http://haveibeenpwned.com/)和来自连接/请求的信息,例如IP地理位置或时间.

Conclusion

To sum up, Spark有助于简化处理大量实时或存档数据的挑战性和计算密集型任务, 包括结构化和非结构化, 无缝集成相关复杂功能,如机器学习和图形算法. Spark将大数据处理带给大众. Check it out!

了解基本知识

  • 什么是Apache Spark?

    Spark是Apache的一个项目,号称“闪电般快速的集群计算”.“它有一个繁荣的开源社区,是目前最活跃的Apache项目.

  • Spark是用什么语言写的?

    Apache Spark是用Scala编写的.

  • Spark能为你做什么?

    Spark有助于简化处理大量实时或存档数据的挑战性和计算密集型任务.

聘请Toptal这方面的专家.
Hire Now
拉狄克·奥斯特洛夫斯基的头像
Radek Ostrowski

Located in Phuket, Thailand

Member since 2014年9月24日

About the author

Radek是一名区块链工程师,对以太坊智能合约感兴趣. 他在机器学习方面也有丰富的经验.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

Previously At

Sony

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

Toptal Developers

Join the Toptal® community.