Spark是一种基本的开源大数据技术

火花前的时间(http://www.3if0.com)
要了解Spark的潜力,它有助于在十年前回顾大数据的形状。在2008 - 2009年,大数据即业务概念经常与Hadoop技术混为一谈。Hadoop是一个开源框架,用于管理在MapReduce编程任务上运行的集群(多台计算机的网络)。MapReduce是Google于2004年推广的一种编程模型,用于构建大型数据集的收集和分析。十年前,范式大数据项目被编码为应用于特定域数据的MapReduce批处理,然后在Hadoop管理的集群上执行。大数据和Hadoop如此密切地确定了几年之后,那些不熟悉大数据的部门(例如风险资本家,公关公司,人力资源部门)在他们的广告和其他写作中众所周知地混淆了两者。

Hadoop强调批处理对于迭代和交互式作业来说是笨拙的。更重要的是,Hadoop的MapReduce解释假设数据集驻留在Hadoop分布式文件系统(HDFS)中。许多(可能是大多数)数据集令人不舒服地适合这个模型。例如,高性能机器学习强调内存处理,而不常使用文件系统大容量存储。

Spark,“用于大规模数据处理的统一分析引擎”,始于2009年的Berkeley类项目,强调:

通过重用HDFS作为存储层与Hadoop兼容。

交互式查询。

支持机器学习。

流水线操作(即易于连接不同的执行单元,以便可以实现复杂的计算,作为通过连续计算阶段传递数据的“桶式旅”)。

Spark还在几个方面具有灵活性,包括它所服务的不同编程语言,可以租用的云以及它集成的大数据库。

Spark vs. Hadoop
Spark通常比Hadoop更快,因此可以更好地安装Spark的内存模型,最多可以有100多个作业。Spark针对典型的ML任务进行了调整,如NaiveBayes和K-Means计算,还可以帮助节省时间并减轻硬件限制。然而,早期的Spark项目以泄露记忆而闻名,至少在新手的手中。此外,长期运行的批处理MapReduce作业似乎更容易使用Hadoop。

Spark也是一个更通用的编程框架,如上所述,下面的例子更详细地说明。Hadoop将大数据设想为Java编码的MapReduce操作,而且非常不灵活; 相比之下,Spark的学习曲线远不那么陡峭。Python,Java,Scala,R甚至SQL中的传统程序几乎可以立即开始在传统桌面上编写熟悉的程序,同时利用Spark的强大功能。Spark的官方网站有几个令人回味的例子。在Python中考虑这个单词计数器:

进口 pyspark
source = “file:// ...”
result = “file:// ...”
与 pyspark。SparkContext(“local”,“WordCount”)为 sc:
text_file = sc。textFile(来源)
counts = text_file。flatMap(拉姆达 线:线。分裂(“
“))
。map(lambda word:(word,1))
。reduceByKey(lambda a,b:a + b)
很重要。saveAsTextFile(result)
任何Python程序员都可以读到这个。虽然它在低功耗的开发主机上运行,但它在Docker-ized Spark,Sparkon工业级云集群,实验性超级计算机,高运行时间大型机等方面也保持不变。此外,使用传统的Python编程很容易改进这样的例子; 后续示例可能是:

进口 重新
进口 pyspark
source = “file:// ...”
result = “file:// ...”
def better_word_splitter(line):
“””
使用负面的后视来分割所有
空白,但每个空格只有一次
序列。
“””
返回 重。分裂(“(?<!\ S) S” ,线。条())
与 pyspark。SparkContext(“local”,“WordCount2”)为 sc:
text_file = sc。textFile(来源)
counts = text_file。flatMap(better_word_splitter)\
。地图(拉姆达 字:(字,1))\
。reduceByKey(lambda a,b:a + b)
很重要。saveAsTextFile(结果
Spark肯定比Hadoop更新,并且声誉不太广泛。同时,Spark补充并概括了Hadoop,因此现有的ETL转换,ML,图形分析,OLAP,数据集流,时间序列分析或交互式和实验查询等编程领域的专家可以逐步采用Spark。此外,Spark将这些不同的域结合起来,简化了架构设计; 特定结果所需的所有内容都可以在单个管道中编写,并在标准Spark集群上计算。

来自官方(http://www.3if0.com)Spark Apache网站的另一个例子 - 这次是在Scala中 - 展示了Spark集成的一些功能。不久前,预测分析是研究生院的一项工作; 现在,Spark的力量使它成为一个单线:

//此DataFrame的每条记录都包含标签和
//由向量表示的要素。
val df = sqlContext。createDataFrame(data)。
toDF(“标签”,“功能”)
//设置算法的参数。
//在这里,我们将迭代次数限制为10。
val lr = new LogisticRegression()。setMaxIter(10)
//使模型适合数据。
val model = lr。适合(df)
//检查模型:获取要素权重。
val weights = model。权重
//给定数据集,预测每个点的标签,以及
显示 的 结果。
模特。变换(df)。show()
Spark在通用编程语言(如Scala)中的曝光意味着可以轻松扩展,调整和集成这些强大的结果与其他组织资产。在过去,大数据往往是一个孤立的专业化。Spark的优势为更广泛的程序员和项目带来了大量数据。

请记住Spark带来的操作:一旦程序正确,它将会很快,并且能够通过Spark管理一系列集群的能力进行英雄缩放。

准备好出发
所有这些功能听起来不错。但对于依赖百万美元硬件的项目,Spark是否真的安全,更不用说专有数据的价值和安全性了?是! 包括GoDaddy,阿里巴巴和Shopify 在内的数十亿美元的公司依靠Spark提供关键服务和结果。

作为一个知识产权,Hadoop在2011年与Apache软件基金会建立了一个创新的所有权安排。Spark后来跟着同样的道路。有趣的是,在过去四年中,Spark存储库中的活动超过了较旧且通常更为突出的Hadoop存储库的活动。虽然这种比较意味着很少孤立,但它至少暗示了大量将Spark视为基础开源技术的组织

如果有的话,Spark的灵活性和集成使其成为比Hadoop或其他替代品更安全的选择。虽然Hadoop本身表现得很可靠,但是有太多基于Hadoop的项目在与MapReduce聚焦的内核接口方面遇到了麻烦; MapReduce部分是正确的,但它周围的包装器连接到其他组织资产最终是新颖的,相应地摇摇欲坠。相比之下,Spark更通用的框架邀请了一种方便,值得信赖的界面,这些界面有助于整个项目的成功。

结论
三年前,Derrick Harris在为业务受众总结Spark时说得对:“(http://www.3if0.com)Spark比Hadoop MapReduce更快,更灵活,更易于使用。” Spark的复杂内存处理使其更快 - 有时达到数量级。Spark为图形,流媒体,ML等提供了丰富的API,甚至可以管理Spark自己的内存加速。Spark构建在管道中并支持多个集群设施。程序员可以使用五种语言中的任何一种,而不仅仅是Hadoop的Java基础。

由于所有这些原因,Spark的增长只会在未来几年内增加。Spark是大数据从业者最需要了解的技术之一。

更多:(http://www.3if0.com)


猜你喜欢

转载自blog.51cto.com/14202983/2351061